[project] name = "han-sms-service" version = "0.1.0" description = "HAN Chat durable SMS delivery service" requires-python = ">=3.12" dependencies = [ "alembic>=1.16,<2", "asyncpg>=0.30,<1", "fastapi>=0.116,<1", "httpx>=0.28,<1", "opentelemetry-api>=1.44,<2", "opentelemetry-exporter-otlp-proto-grpc>=1.44,<2", "opentelemetry-instrumentation-fastapi>=0.65b0,<1", "opentelemetry-instrumentation-httpx>=0.65b0,<1", "opentelemetry-instrumentation-sqlalchemy>=0.65b0,<1", "opentelemetry-sdk>=1.44,<2", "phonenumbers>=9,<10", "prometheus-client>=0.22,<1", "pydantic-settings>=2.10,<3", "sqlalchemy[asyncio]>=2.0.41,<3", "structlog>=25,<26", "uvicorn[standard]>=0.35,<1", ] [project.optional-dependencies] dev = [ "aiosqlite>=0.21,<1", "mypy>=1.16,<2", "pytest>=8.4,<9", "pytest-asyncio>=1.0,<2", "pyyaml>=6,<7", "ruff>=0.12,<1", ] [project.scripts] han-sms-api = "app.main:run" han-sms-worker = "app.worker:run" [build-system] requires = ["hatchling"] build-backend = "hatchling.build" [tool.hatch.build.targets.wheel] packages = ["app"] [tool.pytest.ini_options] asyncio_mode = "auto" testpaths = ["tests"] [tool.ruff] target-version = "py312" line-length = 100 [tool.ruff.lint] select = ["E", "F", "I", "UP", "B", "ASYNC", "S"] ignore = ["S101"] [tool.mypy] python_version = "3.12" check_untyped_defs = true warn_redundant_casts = true warn_unused_ignores = true ignore_missing_imports = true plugins = ["pydantic.mypy", "sqlalchemy.ext.mypy.plugin"] exclude = ["migrations/"]