[project] name = "Sith" version = "3" description = "Le web Sith de l'AE" readme = "README.md" authors = [ {name = "Skia", email = "skia@hya.sk"}, {name = "klmp200", email = "antoine@bartuccio.fr"}, {name = "Krophil", email = "pierre.brunet@krophil.fr"}, {name = "Maréchal", email = "thgirod@hotmail.com"}, {name = "Och", email = "francescowitz68@gmail.com"}, {name = "tleb", email = "tleb@openmailbox.org"}, {name = "Soldat", email = "ryan-68@live.fr"}, {name = "Nabos", email = "gnikwo@hotmail.com"}, {name = "Terre", email = "jbaptiste.lenglet+git@gmail.com"}, {name = "Lo-J", email = "renaudg779@gmail.com"}, {name = "Vial", email = "robin.trioux@utbm.fr"}, ] license = {text = "GPL-3.0-only"} requires-python = "<4.0,>=3.12" dependencies = [ "Django<5.0.0,>=4.2.17", "django-ninja<2.0.0,>=1.3.0", "django-ninja-extra<1.0.0,>=0.21.8", "Pillow<12.0.0,>=11.0.0", "mistune<4.0.0,>=3.0.2", "django-jinja<3.0.0,>=2.11.0", "cryptography<45.0.0,>=44.0.0", "django-phonenumber-field<9.0.0,>=8.0.0", "phonenumbers<9.0.0,>=8.13.52", "reportlab<5.0.0,>=4.2.5", "django-haystack<4.0.0,>=3.3.0", "xapian-haystack<4.0.0,>=3.1.0", "libsass<1.0.0,>=0.23.0", "django-ordered-model<4.0.0,>=3.7.4", "django-simple-captcha<1.0.0,>=0.6.0", "python-dateutil<3.0.0.0,>=2.9.0.post0", "sentry-sdk<3.0.0,>=2.19.2", "Jinja2<4.0.0,>=3.1.4", "django-countries<8.0.0,>=7.6.1", "dict2xml<2.0.0,>=1.7.6", "Sphinx<6,>=5", "tomli<3.0.0,>=2.2.1", "django-honeypot<2.0.0,>=1.2.1", "pydantic-extra-types<3.0.0,>=2.10.1", "ical<9.0.0,>=8.3.0", ] [project.urls] homepage = "https://ae.utbm.fr/" documentation = "https://sith-ae.readthedocs.io/" [dependency-groups] prod = [ "psycopg[c]<4.0.0,>=3.2.3", "redis[hiredis]<6.0.0,>=5.2.0", ] dev = [ "django-debug-toolbar<5.0.0,>=4.4.6", "ipython<9.0.0,>=8.30.0", "pre-commit<5.0.0,>=4.0.1", "ruff<1.0.0,>=0.8.3", "djhtml<4.0.0,>=3.0.7", "faker<34.0.0,>=33.1.0", "rjsmin<2.0.0,>=1.2.3", ] tests = [ "freezegun<2.0.0,>=1.5.1", "pytest<9.0.0,>=8.3.4", "pytest-cov<7.0.0,>=6.0.0", "pytest-django<5.0.0,>=4.9.0", "model-bakery<2.0.0,>=1.20.0", ] docs = [ "mkdocs<2.0.0,>=1.6.1", "mkdocs-material<10.0.0,>=9.5.47", "mkdocstrings<1.0.0,>=0.27.0", "mkdocstrings-python<2.0.0,>=1.12.2", "mkdocs-include-markdown-plugin<8.0.0,>=7.1.2", ] [tool.uv] default-groups = ["dev", "tests", "docs"] [tool.xapian] version = "1.4.25" [tool.ruff] output-format = "concise" # makes ruff error logs easier to read [tool.ruff.lint] select = [ "A", # shadowing of Python builtins "B", "C4", # use comprehensions when possible "DJ", # django-specific rules, "E", # pycodestyle (https://docs.astral.sh/ruff/rules/#pycodestyle-e-w) "ERA", # commented code "F", # pyflakes (https://docs.astral.sh/ruff/rules/#pyflakes-f) "FBT", # boolean trap "FLY", # f-string instead of str.join "FURB", # https://docs.astral.sh/ruff/rules/#refurb-furb "I", # isort "INT", # gettext "PERF", # performance "PLW", # pylint warnings (https://docs.astral.sh/ruff/rules/#pylint-pl) "RUF", # Ruff specific rules "SIM", # simplify (https://docs.astral.sh/ruff/rules/#flake8-simplify-sim) "T100", # breakpoint() "T2", # print statements "TCH", # type-checking block "UP008", # Use super() instead of super(__class__, self) "UP009", # utf-8 encoding declaration is unnecessary ] ignore = [ "DJ001", # null=True in CharField/TextField. this one would require a migration "E501", # line too long. The rule is too harsh, and the formatter deals with it in most cases "RUF012" # mutable class attributes. This rule doesn't integrate well with django ] [tool.ruff.lint.pydocstyle] convention = "google" [tool.pytest.ini_options] DJANGO_SETTINGS_MODULE = "sith.settings" python_files = ["tests.py", "test_*.py", "*_tests.py"] markers = ["slow"]