[build-system] requires = ["hatchling"] build-backend = "hatchling.build" [project] name = "rehearsalhub-api" version = "0.1.0" requires-python = ">=3.12" dependencies = [ "fastapi>=0.115", "uvicorn[standard]>=0.30", "sqlalchemy[asyncio]>=2.0", "asyncpg>=0.29", "alembic>=1.13", "pydantic[email]>=2.7", "pydantic-settings>=2.3", "python-jose[cryptography]>=3.3", "bcrypt>=4.1", "httpx>=0.27", "redis[hiredis]>=5.0", "python-multipart>=0.0.9", ] [project.optional-dependencies] dev = [ "pytest>=8", "pytest-asyncio>=0.23", "pytest-cov>=5", "testcontainers[postgres]>=4.7", "ruff>=0.4", "mypy>=1.10", "types-python-jose", "factory-boy>=3.3", ] [tool.hatch.build.targets.wheel] packages = ["src/rehearsalhub"] [tool.pytest.ini_options] asyncio_mode = "auto" testpaths = ["tests"] markers = [ "integration: marks tests that require external services (deselect with '-m not integration')", "unit: marks fast unit tests with no external deps", ] [tool.ruff] src = ["src"] line-length = 100 target-version = "py312" [tool.ruff.lint] select = ["E", "F", "I", "UP", "B", "SIM"] [tool.mypy] python_version = "3.12" strict = true ignore_missing_imports = true [tool.coverage.run] source = ["src/rehearsalhub"] omit = ["src/rehearsalhub/db/models.py"] [dependency-groups] dev = [ "httpx>=0.28.1", "pytest>=9.0.2", "pytest-asyncio>=1.3.0", ]