[build-system] requires = ["setuptools>=64", "wheel"] build-backend = "setuptools.build_meta" [project] name = "gt2-control-panel-backend" version = "1.0.0" description = "GT 2.0 Control Panel Backend API" dependencies = [ "fastapi>=0.104.1", "uvicorn[standard]>=0.24.0", "sqlalchemy>=2.0.23", "alembic>=1.13.1", "psycopg2-binary>=2.9.9", # "redis>=5.0.1", # Redis removed - PostgreSQL handles all caching "pydantic>=2.5.2", "pydantic-settings>=2.1.0", "python-multipart>=0.0.6", "python-jose[cryptography]>=3.3.0", "passlib[bcrypt]>=1.7.4", "bcryptjs>=3.2.0", "structlog>=23.2.0", "kubernetes>=28.1.0", "asyncpg>=0.29.0", "httpx>=0.25.2", "celery>=5.3.4", # "minio>=7.2.0" # MinIO removed - PostgreSQL handles all file storage ] [tool.black] line-length = 88 target-version = ['py311'] [tool.isort] profile = "black" line_length = 88 [tool.pydocstyle] convention = "google" add-ignore = ["D100", "D104"] # Allow missing docstrings in __init__.py match = "(?!test_).*\\.py" # Exclude test files [tool.pytest.ini_options] testpaths = ["tests"] python_files = ["test_*.py", "*_test.py"] python_classes = ["Test*"] python_functions = ["test_*"] addopts = [ "--cov=app", "--cov-report=html", "--cov-report=term-missing", "--cov-fail-under=80", "--strict-markers", "-v", ] markers = [ "unit: Fast isolated tests (<100ms)", "integration: Cross-service tests", "slow: Long-running tests (>1s)", "security: Security-focused tests", ] asyncio_mode = "auto" [tool.coverage.run] source = ["app"] omit = [ "*/tests/*", "*/migrations/*", "*/venv/*", "*/env/*", ] [tool.coverage.report] exclude_lines = [ "pragma: no cover", "def __repr__", "raise AssertionError", "raise NotImplementedError", "if __name__ == .__main__.:", "if TYPE_CHECKING:", ] [tool.bandit] exclude_dirs = ["tests", "migrations", "venv", ".venv"] skips = ["B101", "B601"] # B101=assert_used, B601=shell_injection (for subprocess)