[project] name = "membersystem" description = '' readme = "README.md" requires-python = ">=3.11" keywords = [] authors = [ { name = "Víðir Valberg Guðmundsson", email = "valberg@orn.li" }, { name = "Benjamin Balder Bach", email = "benjamin@overtag.dk" }, ] dependencies = [ "Django~=5.1", "django-allauth~=0.63", "django-dirtyfields~=1.9.5", "django-money~=3.5", "django-oauth-toolkit~=2.4", "django-registries==0.0.3", "django-view-decorator==0.0.4", "django-oauth-toolkit~=2.4", "django-ratelimit~=4.1", "django-zen-queries~=2.1", "django_stubs_ext~=5.0", "environs[django]>=11,<12", "httpx~=0.28.1", "psycopg[binary]~=3.2", "stripe~=10.5", "uvicorn~=0.30", "whitenoise~=6.7", ] version = "0.0.1" [tool.uv] dev-dependencies = [ "coverage[toml]~=7.6", "pytest~=8.3", "pytest-cov", "pytest-django~=4.8", "mypy~=1.11", "django-stubs[compatible-mypy]~=5.0", "django-debug-toolbar~=4.4", "django-browser-reload~=1.15", "model-bakery==1.17.0", ] [tool.pytest.ini_options] DJANGO_SETTINGS_MODULE="tests.settings" addopts = "--reuse-db" norecursedirs = "build dist docs .eggs/* *.egg-info htmlcov .git" python_files = "test*.py" testpaths = "tests" pythonpath = ". src tests" [tool.coverage.run] branch = true parallel = true [tool.coverage.report] exclude_lines = [ "no cov", "if __name__ == .__main__.:", "if TYPE_CHECKING:", ] [tool.mypy] mypy_path = "src/" exclude = [ "venv/", "dist/", "docs/", ] namespace_packages = false show_error_codes = true strict = true warn_unreachable = true follow_imports = "normal" plugins = ["mypy_django_plugin.main"] [tool.django-stubs] django_settings_module = "project.settings" [[tool.mypy.overrides]] module = "tests.*" allow_untyped_defs = true [tool.ruff] target-version = "py312" extend-exclude = [ ".git", "__pycache__", ] lint.select = ["ALL"] lint.ignore = [ "G004", # https://docs.astral.sh/ruff/rules/logging-f-string/ "EM101", # https://docs.astral.sh/ruff/rules/raw-string-in-exception/ "EM102", # https://docs.astral.sh/ruff/rules/f-string-in-exception/ "COM812", # missing-trailing-comma (https://docs.astral.sh/ruff/formatter/#conflicting-lint-rules) "ISC001", # single-line-implicit-string-concatenation (https://docs.astral.sh/ruff/formatter/#conflicting-lint-rules) "ARG001", # https://docs.astral.sh/ruff/rules/unused-function-argument/ "ARG002", # https://docs.astral.sh/ruff/rules/unused-method-argument/ "ARG004", # https://docs.astral.sh/ruff/rules/unused-static-method-argument/ "S101", # https://docs.astral.sh/ruff/rules/assert/ "FIX002", # https://docs.astral.sh/ruff/rules/line-contains-todo/ - we rely on TD* "D104", # https://docs.astral.sh/ruff/rules/undocumented-public-package/ "D105", # https://docs.astral.sh/ruff/rules/undocumented-magic-method/ "D106", # https://docs.astral.sh/ruff/rules/undocumented-public-nested-class/ "D107", # https://docs.astral.sh/ruff/rules/undocumented-public-init/ ] line-length = 120 [tool.ruff.lint.isort] force-single-line = true [tool.ruff.lint.pydocstyle] convention = "pep257" [tool.ruff.lint.pylint] max-args = 10 [tool.ruff.lint.per-file-ignores] "test*.py" = [ "S101", # https://docs.astral.sh/ruff/rules/assert/ "PLR2004", # https://docs.astral.sh/ruff/rules/magic-value-comparison/ "PT009", # https://docs.astral.sh/ruff/rules/pytest-unittest-assertion/ "S106", # https://docs.astral.sh/ruff/rules/hardcoded-password-func-arg/ "PLR0912", # https://docs.astral.sh/ruff/rules/too-many-branches/ "C901", # https://docs.astral.sh/ruff/rules/complex-structure/ "SLF001", # https://docs.astral.sh/ruff/rules/private-member-access/ "ANN001", # https://docs.astral.sh/ruff/rules/missing-type-function-argument/ "ANN201", # https://docs.astral.sh/ruff/rules/missing-return-type-undocumented-public-function/ ] "factories.py" = [ "PLR0913" # https://docs.astral.sh/ruff/rules/too-many-arguments/ ] "*/migrations/*" = [ "RUF001", "RUF012", "D" # https://docs.astral.sh/ruff/rules/#pydocstyle-d ]