[tool.poetry] name = "remodel-api" version = "0.1.0" description = "FastAPI + Arq async API for the REmodel calculation engine" authors = ["Manohar "] readme = "README.md" packages = [{include = "remodel_api", from = "src"}] [tool.poetry.dependencies] python = "^3.12" fastapi = "^0.111" uvicorn = {extras = ["standard"], version = "^0.30"} arq = "^0.26" redis = "^5.0" sqlalchemy = {extras = ["asyncio"], version = "^2.0"} aiosqlite = "^0.20" alembic = "^1.13" pydantic = "^2.7" pydantic-settings = "^2.3" remodel-engine = {path = "../engine", develop = true} sse-starlette = "^2.1" greenlet = "^3.5.0" [tool.poetry.group.dev.dependencies] ruff = "^0.4" mypy = "^1.10" pytest = "^8.2" pytest-cov = "^5.0" pytest-asyncio = "^0.23" httpx = "^0.27" anyio = "^4.4" [build-system] requires = ["poetry-core"] build-backend = "poetry.core.masonry.api" [tool.ruff] target-version = "py312" line-length = 100 src = ["src", "tests"] [tool.ruff.lint] select = ["E", "F", "W", "I", "UP", "B", "SIM", "ANN", "RUF"] ignore = ["ANN101", "ANN102", "ANN401"] [tool.ruff.lint.per-file-ignores] "tests/**" = ["ANN"] [tool.mypy] python_version = "3.12" strict = true warn_return_any = true warn_unused_configs = true disallow_untyped_defs = true disallow_any_generics = true check_untyped_defs = true no_implicit_reexport = true files = ["src"] [[tool.mypy.overrides]] module = ["arq.*", "sse_starlette.*", "redis.*"] ignore_missing_imports = true [[tool.mypy.overrides]] module = ["remodel_engine.*"] ignore_missing_imports = true [tool.pytest.ini_options] testpaths = ["tests"] asyncio_mode = "auto" addopts = "--cov=remodel_api --cov-report=term-missing --cov-fail-under=85" [tool.coverage.run] source = ["remodel_api"] branch = true [tool.coverage.report] exclude_lines = ["pragma: no cover", "if TYPE_CHECKING:"]