[project] name = "velodrome" version = "0.1.0" description = "Self-hosted cycling app API" requires-python = ">=3.12" dependencies = [ "fastapi>=0.115", "uvicorn[standard]>=0.32", "sqlalchemy[asyncio]>=2.0.35", "aiosqlite>=0.20", "alembic>=1.13", "pydantic[email]>=2.9", "pydantic-settings>=2.6", "argon2-cffi>=23.1", "uuid6>=2024.7.10", ] [project.optional-dependencies] dev = [ "ruff>=0.7", "mypy>=1.13", "pytest>=8.3", "pytest-asyncio>=0.24", "httpx>=0.27", ] [build-system] requires = ["hatchling"] build-backend = "hatchling.build" [tool.hatch.build.targets.wheel] packages = ["velodrome"] [tool.ruff] line-length = 100 target-version = "py312" [tool.ruff.lint] select = ["E", "F", "I", "UP", "B", "ASYNC"] [tool.ruff.lint.flake8-bugbear] # FastAPI's dependency-injection idiom is Depends(...) as a default argument value — that IS # the framework's intended pattern (see https://fastapi.tiangolo.com/tutorial/dependencies/), # not the mutable-default-argument bug B008 exists to catch. Same reasoning for Query/Body/ # Cookie/Header — declared now even though only Depends is used yet, so nobody hits this same # false positive when the others show up in a later phase. extend-immutable-calls = ["fastapi.Depends", "fastapi.Query", "fastapi.Body", "fastapi.Cookie", "fastapi.Header"] [tool.mypy] python_version = "3.12" strict = true plugins = ["pydantic.mypy"] [tool.pytest.ini_options] asyncio_mode = "auto" testpaths = ["tests"]