[project] name = "{{ project_slug }}-backend" version = "0.1.0" description = "{{ description }} — backend service" requires-python = ">={{ python_version }}" dependencies = [ "fastapi", "uvicorn[standard]", "sqlalchemy[asyncio]", {%- if database == 'sqlite' %} "aiosqlite", "alembic", {%- elif database == 'postgresql' %} "asyncpg", "alembic", {%- endif %} "loguru", "pydantic-settings", "websockets", ] [dependency-groups] dev = [ "pytest", "httpx", "pytest-asyncio", "pytest-cov", "mypy", "ruff", "pip-audit", ] [tool.ruff.lint] select = ["E", "F", "N", "T20", "I", "C901", "ANN", "S", "PLR"] ignore = ["ANN101", "ANN102"] [tool.ruff.lint.per-file-ignores] "tests/**" = ["ANN"] [tool.mypy] strict = true ignore_missing_imports = true [tool.pytest.ini_options] addopts = "--cov=src --cov-report=term-missing --cov-fail-under=80" asyncio_mode = "auto" [tool.importlinter] root_packages = ["src"] [[tool.importlinter.contracts]] name = "Layered architecture" type = "layers" layers = ["src.infrastructure", "src.application", "src.domain"] [[tool.importlinter.contracts]] name = "Domain zero IO" type = "forbidden" source_modules = ["src.domain"] forbidden_modules = ["fastapi", "sqlalchemy", "httpx", "subprocess"]