[tool.pytest.ini_options] addopts = "--color=yes" minversion = "6.0" DJANGO_SETTINGS_MODULE = "blog.settings" testpaths = [ "src", ] env = [ "GOATCOUNTER_DOMAIN=gc.gabnotes.org" ] [tool.mypy] mypy_path = "$MYPY_CONFIG_FILE_DIR/stubs" disallow_untyped_defs = true warn_redundant_casts = true strict_equality = true disallow_untyped_calls = true warn_unreachable = true enable_error_code = ["redundant-expr"] [[tool.mypy.overrides]] module = [ "django.*", "environ", "django_otp.plugins.otp_static.models", "two_factor.models", "django_otp.plugins.otp_totp.models", "model_bakery", "invoke", ] ignore_missing_imports = true ############################################################################### # ruff ############################################################################### [tool.ruff] src = ["src"] target-version = "py311" select = [ "F", # pyflakes "E", "W", # pycodestyle "C90", # mccabe "I", # isort "N", # pep8-naming "D", # pydocstyle "S", # flake8-bandit "FBT", # flake8-boolean-trap "B", # flake8-bugbear "A", # flake8-builtins "C4", # flake8-comprehensions "DTZ", # flake8-datetimez "T10", # flake8-debugger "EXE", # flake8-executable "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 "RET", # flake8-return "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 "RUF", # ruff-specific rules ] unfixable = ["T20", "RUF001", "RUF002", "RUF003"] ignore = [ "UP", # pyupgrade "YTT", # flake8-2020 "ANN", # flake8-annotations "BLE", # flake8-blind-except "COM", # flake8-commas "EM", # flake8-errmsg "Q", # flake8-quotes "TCH", # flake8-type-checking / TODO: revisit later ? "E501", # long lines "D1", # missing docstring "TRY003", # Avoid specifying long messages outside the exception class ] [tool.ruff.per-file-ignores] "**/tests/*" = [ "S101", # Use of assert detected. "S106", # Possible hardcoded password. "B011", # Do not call assert False since python -O removes these calls. "ARG001", # Unused function argument (mostly fixtures) "PLR2004", # Magic value used in comparison, consider replacing {value} with a constant variable ] # File {name} is part of an implicit namespace package. Add an `__init__.py`. "tasks.py" = ["INP001"] "src/conftest.py" = ["INP001"] "src/manage.py" = ["INP001"] "**/migrations/*" = [ "ARG001", # Unused function argument "N806", # Variable in function should be lowercase ] "**/*.pyi" = ["ALL"] [tool.ruff.pydocstyle] convention = "pep257" [tool.ruff.mccabe] max-complexity = 10