[project]
name = "charasheet"
version = "0.0.1"
requires-python = ">=3.13"
classifiers = [ "Programming Language :: Python :: 3 :: Only", "Programming Language :: Python :: 3.13" ]
dependencies = [
  "django>=4.1",
  "django-anymail[mailgun]>=8.6",
  "django-bootstrap5>=22.1",
  "django-cleanup>=6",
  "django-environ>=0.9",
  "django-extensions>=3.1.5",
  "django-htmx>=1.12.2",
  "django-linear-migrations>=2.2",
  "django-registration>=3.3",
  "gunicorn>=20.1",
  "markdown>=3.2",
  "pillow>=9.3",
  "requests>=2.28.1",
  "selenium>=4.5",
  "whitenoise>=6.2",
]

[dependency-groups]
dev = [
  "black>=22.12",
  "bpython>=0.22.1",
  "django-browser-reload>=1.6",
  "django-debug-toolbar>=3.2",
  "hypothesis>=6.56.4",
  "invoke>=2",
  "model-bakery>=1.3.1",
  "pre-commit>=2.1",
  "pytest>=6",
  "pytest-cov>=3",
  "pytest-django>=4.1",
  "pytest-selenium>=4",
  "ruff>=0.0.237",
]

[tool.ruff]
target-version = "py313"

src = [
  "src",
]
lint.select = [
  "ALL",
]
lint.ignore = [
  "ANN",    # flake8-annotations
  "BLE",    # flake8-blind-except
  "D1",     # missing docstring
  "E501",   # long lines
  "RUF012", # Mutable class attributes should be annotated with `typing.ClassVar`
  "TCH",    # flake8-type-checking / TODO: revisit later ?

  "TRY003", # Avoid specifying long messages outside the exception class
]
lint.per-file-ignores."**/tests/*" = [
  "ARG001",  # Unused function argument (mostly fixtures)
  "B011",    # Do not call assert False since python -O removes these calls.
  "PLR2004", # Magic value used in comparison, consider replacing {value} with a constant variable
  "S101",    # Use of assert detected.
  "S106",    # Possible hardcoded password.
  "S311",    # Standard pseudo-random generators are not suitable for cryptographic purposes.
]
lint.per-file-ignores."src/character/management/commands/*" = [
  "RUF001", # String contains ambiguous unicode character
]
lint.per-file-ignores."src/conftest.py" = [
  "INP001",
]
lint.per-file-ignores."src/manage.py" = [
  "INP001",
]
# File {name} is part of an implicit namespace package. Add an `__init__.py`.
lint.per-file-ignores."tasks.py" = [
  "INP001",
]
lint.unfixable = [
  "RUF001",
  "RUF002",
  "RUF003",
  "T20",
]
lint.mccabe.max-complexity = 10
# TODO remove "hash" ignore after issue is fixed: https://github.com/python-trio/trio/issues/3053
lint.pydocstyle.convention = "pep257"

[tool.pytest.ini_options]
addopts = """
--html=test_reports/pytest_result/pytest.html --color=yes --durations 20
--no-cov-on-fail --strict-markers --reuse-db
--driver=Firefox
-W error
-W "ignore:The `hash` argument is deprecated in favor of `unsafe_hash` and will be removed in or after August 2025:DeprecationWarning"
"""
markers = [
]
minversion = "6.0"
DJANGO_SETTINGS_MODULE = "charasheet.settings"
junit_family = "xunit1"
norecursedirs = [
  ".*",
  "docker",
  "documentation",
  "static",
  "public",
]
testpaths = [
  "src",
]
python_files = [
  "test_*.py",
  "tests.py",
]

[tool.uv]
package = false

###############################################################################
# ruff
###############################################################################