[project] name = "bulk-ats" version = "0.1.0" description = "Bulk ATS scoring engine: one job description, many resume PDFs, one leaderboard." # Matches the project's conda env (Talha, 3.11.14). The code uses nothing newer. requires-python = ">=3.11" dependencies = [ "openai>=2.0.0", "fastapi>=0.115.0", "uvicorn[standard]>=0.32.0", "pydantic>=2.9.0", "pydantic-settings>=2.6.0", "pypdf>=5.1.0", "python-multipart>=0.0.12", ] [project.optional-dependencies] dev = [ "pytest>=8.3.0", "pytest-asyncio>=0.24.0", "httpx>=0.27.0", "ruff>=0.8.0", "mypy>=1.13.0", ] [build-system] requires = ["hatchling"] build-backend = "hatchling.build" [tool.hatch.build.targets.wheel] packages = ["app"] [tool.ruff] line-length = 100 target-version = "py311" [tool.ruff.lint] select = [ "E", # pycodestyle "F", # pyflakes "I", # isort "N", # pep8-naming "UP", # pyupgrade "B", # bugbear "A", # builtins shadowing "C4", # comprehensions "SIM", # simplify "TID", # tidy imports "RUF", ] ignore = [ "B008", # FastAPI depends on function calls in argument defaults ] [tool.ruff.lint.per-file-ignores] "tests/*" = ["E501"] [tool.mypy] python_version = "3.11" strict = true warn_unreachable = true plugins = ["pydantic.mypy"] [[tool.mypy.overrides]] module = ["pypdf.*"] ignore_missing_imports = true [tool.pytest.ini_options] asyncio_mode = "auto" testpaths = ["tests"] addopts = "-q"