Files
bracket/backend/pyproject.toml
Erik Vroon c8cab54286 Add pyrefly type checking (#1434)
Prefly is much faster than mypy and a bit stricter
Mypy will also still be checked on CI for now
2025-11-14 10:47:23 +00:00

190 lines
4.4 KiB
TOML

[project]
name = "bracket-backend"
version = "0.0.1"
requires-python = ">=3.12"
dependencies = [
"aiofiles==25.1.0",
"aiohttp==3.13.2",
"aiopg==1.4.0",
"alembic==1.17.1",
"asyncpg==0.30.0",
"bcrypt==5.0.0",
"click==8.3.0",
"databases[asyncpg]==0.9.0",
"fastapi==0.121.1",
"fastapi-sso==0.18.0",
"gunicorn==23.0.0",
"heliclockter==3.0.1",
"parameterized==0.9.0",
"passlib==1.7.4",
"pydantic==2.12.4",
"pydantic_settings==2.1.0",
"pyjwt==2.10.1",
"python-dotenv==1.2.1",
"python-multipart==0.0.20",
"sentry-sdk==2.44.0",
"sqlalchemy==2.0.44",
"sqlalchemy-stubs==0.4",
"starlette==0.49.1",
"types-aiofiles==25.1.0.20251011",
"types-passlib==1.7.7.20241221",
"types-simplejson==3.20.0.20250218",
"uvicorn==0.38.0",
]
[tool.pytest.ini_options]
addopts = [
'--junitxml=.junit_report.xml',
]
junit_family = 'xunit2'
asyncio_mode = 'auto'
filterwarnings = [
'error',
'ignore:The SelectBase.c and SelectBase.columns attributes are deprecated.*:DeprecationWarning',
'ignore:pkg_resources is deprecated as an API.*:DeprecationWarning',
'ignore:Deprecated call to `pkg_resources.declare_namespace(.*)`.*:DeprecationWarning',
'ignore:.*:pytest.PytestDeprecationWarning',
'ignore:.*pytest-asyncio detected an unclosed event loop.*:DeprecationWarning',
'ignore:.*The event_loop fixture provided by pytest-asyncio has been redefined.*:DeprecationWarning',
'ignore:.*Please use `import python_multipart` instead.*:PendingDeprecationWarning',
]
[dependency-groups]
dev = [
"aioresponses==0.7.4",
"mypy==1.18.2",
"pluggy==1.6.0",
"pylint==4.0.2",
"pyrefly>=0.41.3",
"pytest-asyncio==1.3.0",
"pytest-cov==7.0.0",
"pytest-xdist==3.8.0",
"pytest==9.0.1",
"ruff==0.14.4",
"vulture==2.14",
]
[tool.mypy]
junit_xml = '.junit_report.xml'
follow_imports = 'silent'
disallow_any_explicit = false
disallow_any_generics = true
check_untyped_defs = true
disallow_untyped_defs = true
disallow_incomplete_defs = true
disallow_untyped_decorators = false
warn_unused_configs = true
disallow_subclassing_any = false
disallow_untyped_calls = false
no_implicit_optional = true
warn_redundant_casts = true
warn_unused_ignores = true
warn_return_any = true
no_implicit_reexport = true
show_error_codes = true
[tool.uv]
package = false
[[tool.uv.index]]
name = "pypi"
url = "https://pypi.org/simple"
[tool.pydantic-mypy]
init_forbid_extra = true
init_typed = true
warn_required_dynamic_aliases = true
warn_untyped_fields = true
[[tool.mypy.overrides]]
module = ['aioresponses.*']
disallow_any_explicit = false
disallow_any_generics = false
[[tool.mypy.overrides]]
module = ['fastapi_sso.*']
ignore_missing_imports = true
[tool.pylint.'MESSAGES CONTROL']
disable = [
'broad-except',
'broad-exception-raised',
'consider-iterating-dictionary',
'contextmanager-generator-missing-cleanup', # Gives false positives.
'dangerous-default-value',
'duplicate-code',
'fixme',
'not-callable',
'import-outside-toplevel',
'invalid-name',
'logging-fstring-interpolation',
'missing-docstring',
'no-name-in-module', # Gives false positives.
'protected-access',
'too-few-public-methods',
'too-many-arguments',
'too-many-locals',
'too-many-nested-blocks',
'too-many-positional-arguments',
'unspecified-encoding',
'unused-argument', # Gives false positives.
'wrong-import-position',
]
[tool.bandit]
skips = [
'B101',
'B106',
'B108'
]
[tool.ruff]
line-length = 100
respect-gitignore = false
show-fixes = true
output-format = "full"
target-version = "py313"
exclude = [".venv", ".mypy_cache", ".pytest_cache", "__pycache__"]
[tool.ruff.lint]
select = [
"E",
"EXE",
# "ERA", TODO
"F",
"FA",
"FIX",
"I",
"ISC",
"PGH",
"PIE",
"PLE",
"PLW",
"RUF100",
"T20",
"TCH",
"TD",
"TID",
"UP",
"W",
]
ignore = ["FIX002", "TD002", "TD003", "TC001", "TC002", "TC003", "ISC001"]
[tool.vulture]
min_confidence = 0
paths = ["."]
exclude = [".venv"]
ignore_decorators = ["@pytest.*", "@*router*", "@app.*", "@*validator*"]
ignore_names = [
"RestartableUvicornWorker",
"_generate_next_value_",
"downgrade",
"startup_and_shutdown_uvicorn_server",
"todo*",
"upgrade",
]
sort_by_size = true
[tool.pyrefly]
ignore-missing-imports = ["fastapi_sso.*"]