[project] name = "consentos-api" version = "0.1.0" description = "ConsentOS — API service" license = "Elastic-2.0" requires-python = ">=3.12" dependencies = [ "fastapi>=0.115,<1", "uvicorn[standard]>=0.34,<1", "sqlalchemy[asyncio]>=2.0,<3", "asyncpg>=0.30,<1", "alembic>=1.14,<2", "pydantic>=2.0,<3", "pydantic-settings>=2.0,<3", "python-jose[cryptography]>=3.3,<4", "bcrypt>=4.0,<5", "redis>=5.0,<6", "celery>=5.4,<6", "httpx>=0.28,<1", "structlog>=24.0,<25", "psycopg2-binary>=2.9,<3", "email-validator>=2.0,<3", "jinja2>=3.1,<4", "markupsafe>=2.1,<3", "reportlab>=4.0,<5", "geoip2>=4.8,<5", ] [project.optional-dependencies] dev = [ "pytest>=8.0,<9", "pytest-asyncio>=0.24,<1", "pytest-cov>=6.0,<7", "httpx>=0.28,<1", "ruff>=0.9,<1", "mypy>=1.13,<2", ] [build-system] requires = ["setuptools>=68"] build-backend = "setuptools.build_meta" [tool.setuptools.packages.find] where = ["."] include = ["src*"] [tool.pytest.ini_options] testpaths = ["tests"] asyncio_mode = "auto" asyncio_default_fixture_loop_scope = "session" filterwarnings = ["ignore::DeprecationWarning"] [tool.ruff] target-version = "py312" line-length = 100 [tool.ruff.lint] select = ["E", "F", "I", "N", "W", "UP", "B", "SIM", "RUF"] ignore = ["B008"] # Depends() in FastAPI defaults is idiomatic [tool.mypy] python_version = "3.12" strict = true plugins = ["pydantic.mypy"]