[project] name = "fastapi-route-loader" version = "0.1.0" description = "Automatic APIRouter loading and management for FastAPI with event dispatch system" readme = "README.md" requires-python = ">=3.10" authors = [ {name = "Zane Walker"} ] license = {text = "MIT"} keywords = ["fastapi", "router", "loader", "api", "events"] classifiers = [ "Development Status :: 4 - Beta", "Intended Audience :: Developers", "License :: OSI Approved :: MIT License", "Programming Language :: Python :: 3", "Programming Language :: Python :: 3.10", "Programming Language :: Python :: 3.11", "Programming Language :: Python :: 3.12", "Framework :: FastAPI", ] dependencies = [ "fastapi>=0.100.0", ] [project.optional-dependencies] dev = [ "pytest>=7.4.0", "pytest-cov>=4.1.0", "pytest-asyncio>=0.21.0", "ruff>=0.1.0", "pyright>=1.1.0", "httpx>=0.24.0", ] [build-system] requires = ["hatchling"] build-backend = "hatchling.build" [tool.hatch.build.targets.wheel] packages = ["src/fastapi_route_loader"] [tool.ruff] target-version = "py310" line-length = 88 select = [ "E", # pycodestyle errors "W", # pycodestyle warnings "F", # pyflakes "I", # isort "C", # flake8-comprehensions "B", # flake8-bugbear "UP", # pyupgrade "N", # pep8-naming "YTT", # flake8-2020 "ANN", # flake8-annotations "S", # flake8-bandit "BLE", # flake8-blind-except "FBT", # flake8-boolean-trap "A", # flake8-builtins "COM", # flake8-commas "C4", # flake8-comprehensions "DTZ", # flake8-datetimez "T10", # flake8-debugger "EM", # flake8-errmsg "ISC", # flake8-implicit-str-concat "ICN", # flake8-import-conventions "G", # flake8-logging-format "INP", # flake8-no-pep420 "PIE", # flake8-pie "T20", # flake8-print "PT", # flake8-pytest-style "Q", # flake8-quotes "RSE", # flake8-raise "RET", # flake8-return "SLF", # flake8-self "SIM", # flake8-simplify "TID", # flake8-tidy-imports "ARG", # flake8-unused-arguments "PTH", # flake8-use-pathlib "ERA", # eradicate "PD", # pandas-vet "PGH", # pygrep-hooks "PL", # pylint "TRY", # tryceratops "FLY", # flynt "NPY", # numpy "PERF",# perflint "RUF", # ruff-specific rules ] ignore = [ "D203", # 1 blank line required before class docstring "D213", # Multi-line docstring summary should start at the second line ] [tool.ruff.per-file-ignores] "tests/*" = ["S101", "PLR2004", "ANN201", "ANN001"] "examples/*" = ["T201", "INP001"] [tool.pyright] include = ["src"] exclude = ["**/__pycache__"] typeCheckingMode = "strict" pythonVersion = "3.10" reportMissingTypeStubs = false reportUnknownMemberType = false reportUnknownVariableType = false reportUnknownArgumentType = false [tool.pytest.ini_options] testpaths = ["tests"] python_files = ["test_*.py"] python_classes = ["Test*"] python_functions = ["test_*"] addopts = [ "--strict-markers", "--strict-config", "--cov=fastapi_route_loader", "--cov-report=term-missing", "--cov-report=html", ] [tool.coverage.run] source = ["src"] omit = ["tests/*"] [tool.coverage.report] exclude_lines = [ "pragma: no cover", "def __repr__", "raise AssertionError", "raise NotImplementedError", "if __name__ == .__main__.:", "if TYPE_CHECKING:", "@abstractmethod", ] [dependency-groups] dev = [ "pytest>=9.0.2", "pytest-cov>=4.1.0", "pytest-asyncio>=0.21.0", "httpx>=0.24.0", "ruff>=0.1.0", "pyright>=1.1.0", "uvicorn>=0.40.0", ]