[project] name = "incidentops" version = "0.1.0" description = "Incident management API with multi-tenant org support" readme = "README.md" requires-python = ">=3.14" dependencies = [ "fastapi>=0.115.0", "uvicorn[standard]>=0.32.0", "asyncpg>=0.30.0", "pydantic[email]>=2.0.0", "pydantic-settings>=2.0.0", "python-jose[cryptography]>=3.3.0", "bcrypt>=4.0.0", "celery[redis]>=5.4.0", "redis>=5.0.0", "httpx>=0.28.0", # OpenTelemetry "opentelemetry-api>=1.27.0", "opentelemetry-sdk>=1.27.0", "opentelemetry-exporter-otlp>=1.27.0", "opentelemetry-exporter-prometheus>=0.48b0", "opentelemetry-instrumentation-fastapi>=0.48b0", "opentelemetry-instrumentation-asyncpg>=0.48b0", "opentelemetry-instrumentation-httpx>=0.48b0", "opentelemetry-instrumentation-redis>=0.48b0", "opentelemetry-instrumentation-logging>=0.48b0", "opentelemetry-instrumentation-system-metrics>=0.48b0", "prometheus-client>=0.20.0", ] [project.optional-dependencies] dev = [ "pytest>=8.0.0", "pytest-asyncio>=0.24.0", "ruff>=0.8.0", ] [build-system] requires = ["hatchling"] build-backend = "hatchling.build" [tool.hatch.build.targets.wheel] packages = ["app", "migrations", "worker"] [tool.ruff] line-length = 100 target-version = "py314" [tool.ruff.lint] select = ["E", "F", "I", "N", "W", "UP"] [tool.ruff.lint.per-file-ignores] "tests/**/*.py" = ["E501"] # Allow longer lines in tests for descriptive method names [tool.pytest.ini_options] asyncio_mode = "auto" testpaths = ["tests"]