[tool.ruff] line-length = 100 target-version = "py310" # Select critical rule sets: Errors, Warnings, Pyflakes, isort, PEP8-naming, pyupgrade, flake8-bugbear, flake8-builtins, flake8-comprehensions, pytest-style, Ruff-specific select = ["E", "W", "F", "I", "N", "UP", "B", "A", "C4", "PT", "RUF"] ignore = [ "B008", # Do not perform function calls in default args (Required for FastAPI Depends) "A003", # Shadowing Python built-in (id is fine for DB models) "N818", # Exception names should end in Error (We use custom hierarchy names) ] [tool.ruff.per-file-ignores] "tests/*" = ["S101"] # Assert is fine in tests "db/migrations/*" = ["E501"] # Migration auto-generations can be long [tool.black] line-length = 100 target-version = ["py310"] include = '\.pyi?$' exclude = "migrations" [tool.mypy] python_version = "3.10" strict = false warn_return_any = true warn_unused_imports = true ignore_missing_imports = true [[tool.mypy.overrides]] module = ["torch.*", "transformers.*", "chromadb.*", "cv2.*", "PIL.*"] ignore_missing_imports = true [tool.pytest.ini_options] asyncio_mode = "auto" testpaths = ["tests"] markers = [ "unit: fast isolated tests", "integration: tests using real DB or filesystem", "ml: tests that load ML models", "slow: tests taking more than 5 seconds", "e2e: full end-to-end tests" ] filterwarnings = ["ignore::DeprecationWarning", "ignore::PendingDeprecationWarning"] log_cli = true log_cli_level = "INFO"