[project] name = "crochet" version = "0.1.0" description = "Add your description here" readme = "README.md" requires-python = ">=3.13" dependencies = [ "django>=6.0.7", "django-cors-headers>=4.9.0", "django-environ>=0.14.0", "django-extensions>=4.1", "django-filter>=26.1", "django-htmx>=1.28.0", "django-otp>=1.7.3", "django-ratelimit>=4.1.0", "django-silk>=5.5.0", "django-storages[s3]>=1.14.6", "ipython>=9.15.0", "pillow>=12.3.0", "psycopg[binary]>=3.3.4", "pytest-cov>=7.1.0", "qrcode>=8.2", "uvicorn>=0.51.0", "watchman>=0.0.1", "weasyprint>=69.0", "whitenoise>=6.12.0", ] [dependency-groups] dev = [ "coverage>=7.15.2", "django-browser-reload>=1.21.0", "django-debug-toolbar>=7.0.0", "django-watchfiles>=1.4.0", "pre-commit>=4.6.2", "pytest>=9.1.1", "pytest-django>=4.12.0", "ruff>=0.16.7", ] [tool.pytest.ini_options] DJANGO_SETTINGS_MODULE = "config.settings" [tool.ruff] line-length = 120 target-version = "py313" extend-exclude = ["*/migrations/*"] [tool.ruff.lint] select = ["E", "F", "W", "I", "UP", "B", "DJ"] # B905 (zip sin strict=): no aplica a Python 3.13 sin más contexto, ruidoso # más que útil en este proyecto. ignore = ["B905"] [tool.ruff.lint.isort] known-first-party = ["crochet", "config"] [tool.ruff.lint.per-file-ignores] # base.py consume a propósito los nombres de env.py vía `from # config.settings.env import *` (ver env.py): ruff no puede saber que # vienen de ahí y los marca F403/F405, pero es justo el patrón que separa # "qué lee del entorno" de "qué depende de ello", no un descuido. "config/settings/base.py" = ["F403", "F405"] # __init__.py existe solo para reexportar env.py + base.py como un único # módulo "config.settings" (ver DJANGO_SETTINGS_MODULE en pyproject.toml): # su única línea de trabajo son estos dos star-imports. "config/settings/__init__.py" = ["F403"] [tool.ruff.format] # El proyecto entero usa comillas simples; sin esto, ruff format reescribe # todas las cadenas a comillas dobles (su estilo por defecto, tipo Black) en # cuanto se ejecute una vez. quote-style = "single"