[project] name = "thrillwiki" version = "0.1.0" readme = "README.md" requires-python = ">=3.13" dependencies = [ "django>=5.0", "djangorestframework>=3.14.0", "django-cors-headers>=4.3.1", "django-allauth>=0.60.1", "django-oauth-toolkit>=3.0.1", "dj-rest-auth>=7.0.0", "pyjwt>=2.10.1", "psycopg2-binary>=2.9.9", "dj-database-url>=2.3.0", "requests>=2.32.3", "django-webpack-loader>=3.1.1", "python-dotenv>=1.0.1", "Pillow>=10.2.0", "django-cleanup>=8.0.0", "django-filter>=23.5", "django-htmx>=1.17.2", "whitenoise>=6.6.0", "pycountry>=24.6.1", "black>=24.1.0", "flake8>=7.1.1", "pytest>=8.3.4", "pytest-django>=4.9.0", "channels>=4.2.0", "channels-redis>=4.2.1", "daphne>=4.1.2", "django-simple-history>=3.5.0", "django-tailwind-cli>=2.21.1", "playwright>=1.41.0", "pytest-playwright>=0.4.3", "django-pghistory>=3.5.2", "django-htmx-autocomplete>=1.0.5", "coverage>=7.9.1", "poetry>=2.1.3", "piexif>=1.1.3", "django-environ>=0.12.0", "factory-boy>=3.3.3", "drf-spectacular>=0.27.0", "django-silk>=5.0.0", "django-debug-toolbar>=4.0.0", "nplusone>=1.0.0", "django-health-check>=3.17.0", "django-redis>=5.4.0", "sentry-sdk>=1.40.0", "python-json-logger>=2.0.7", "psutil>=7.0.0", "django-extensions>=4.1", "werkzeug>=3.1.3", "django-widget-tweaks>=1.5.0", "redis>=6.4.0", "ruff>=0.12.10", "python-decouple>=3.8", "pyright>=1.1.404", "celery>=5.5.3", "django-celery-beat>=2.8.1", "django-celery-results>=2.6.0", "djangorestframework-simplejwt>=5.5.1", "django-forwardemail>=1.0.0", "django-cloudflareimages-toolkit>=1.0.6", "django-fsm>=2.8.1", "django-fsm-log>=3.1.0", ] [dependency-groups] dev = [ "autoflake>=2.3.1", "autopep8>=2.3.2", "black>=25.1.0", "django-stubs>=5.2.2", "rope>=1.14.0", ] [tool.pyright] stubPath = "stubs" typeCheckingMode = "basic" [tool.pylance] stubPath = "stubs" # ============================================================================= # Pytest Configuration # ============================================================================= [tool.pytest.ini_options] DJANGO_SETTINGS_MODULE = "config.django.test" python_files = ["test_*.py", "*_test.py"] python_classes = ["Test*"] python_functions = ["test_*"] addopts = [ "-v", "--strict-markers", "--tb=short", ] markers = [ "unit: Unit tests (fast, isolated)", "integration: Integration tests (may use database)", "e2e: End-to-end browser tests (slow, requires server)", "slow: Tests that take a long time to run", "api: API endpoint tests", ] filterwarnings = [ "ignore::DeprecationWarning", "ignore::PendingDeprecationWarning", ] # ============================================================================= # Coverage Configuration # ============================================================================= [tool.coverage.run] source = ["apps"] branch = true omit = [ "*/migrations/*", "*/tests/*", "*/__pycache__/*", "*/admin.py", "*/apps.py", "manage.py", "config/*", ] parallel = true [tool.coverage.report] exclude_lines = [ "pragma: no cover", "def __repr__", "def __str__", "raise AssertionError", "raise NotImplementedError", "if __name__ == .__main__.:", "if TYPE_CHECKING:", "if typing.TYPE_CHECKING:", "@abstractmethod", "@abc.abstractmethod", ] show_missing = true skip_covered = false fail_under = 70 [tool.coverage.html] directory = "htmlcov" [tool.coverage.xml] output = "coverage.xml" [tool.uv.sources] python-json-logger = { url = "https://github.com/nhairs/python-json-logger/releases/download/v3.0.0/python_json_logger-3.0.0-py3-none-any.whl" }