[project] name = "fleet-platform" version = "0.1.0" description = "Fleet telematics platform — greenfield rebuild (Rahamafresh)" requires-python = ">=3.12" readme = "README.md" dependencies = [ "fastapi>=0.115", "uvicorn[standard]>=0.32", "psycopg[binary,pool]>=3.2", "pydantic>=2.9", "pydantic-settings>=2.6", "structlog>=24.4", "apscheduler>=3.10,<4", "bcrypt>=4.2", "pyjwt[crypto]>=2.10", "slowapi>=0.1.9", "httpx>=0.28", "python-multipart>=0.0.20", ] [project.optional-dependencies] dev = [ "ruff>=0.8", "mypy>=1.13", "pytest>=8.3", "pytest-asyncio>=0.24", "pytest-httpx>=0.32", "anyio>=4.6", ] [build-system] requires = ["hatchling"] build-backend = "hatchling.build" [tool.hatch.build.targets.wheel] packages = ["app"] [tool.ruff] line-length = 100 target-version = "py312" [tool.ruff.lint] select = ["E", "F", "I", "B", "UP", "SIM", "PL", "RUF"] ignore = ["PLR0913", "PLR2004"] [tool.ruff.lint.per-file-ignores] "tests/*" = ["PLR0913", "PLR2004"] [tool.mypy] python_version = "3.12" strict = true warn_unused_ignores = true disallow_untyped_defs = true plugins = ["pydantic.mypy"] [[tool.mypy.overrides]] module = ["apscheduler.*", "slowapi.*"] ignore_missing_imports = true [tool.pytest.ini_options] asyncio_mode = "auto" testpaths = ["tests"] addopts = "-ra --strict-markers"