[tool.pytest.ini_options] testpaths = ["tests"] pythonpath = ["."] # Parallel execution (pytest-xdist) is OPT-IN so a bare `pytest` never fails # when xdist is not installed. Run locally with `pytest -n auto`; CI passes # `-n auto` explicitly after installing requirements-dev.txt. [tool.ruff] target-version = "py312" line-length = 110 exclude = [".venv", ".venv311", ".pytest_cache", "static/js/vendor"] [tool.ruff.lint] # E/F: pyflakes + pycodestyle errors · I: isort · UP: pyupgrade · B: bugbear # W: whitespace. E501 ignored (line length is enforced by black, not here). select = ["E", "F", "I", "UP", "B", "W"] ignore = ["E501", "UP035"] [tool.ruff.lint.isort] known-first-party = ["app", "tests"] [tool.ruff.lint.flake8-bugbear] # FastAPI requires dependency markers (Depends, Query, ...) in argument # defaults — that is not the bug B008 warns about. extend-immutable-calls = [ "fastapi.Depends", "fastapi.Query", "fastapi.Path", "fastapi.Body", "fastapi.Form", "fastapi.File", "fastapi.Header", "fastapi.Cookie", ]