schon/pyproject.toml
Egor fureunoir Gorbunov 20473818a9 feat(emailing): add OpenAPI schemas for unsubscribe and tracking endpoints
Includes detailed OpenAPI schemas for unsubscribe (GET and POST) and tracking pixel (GET) endpoints, supporting email compatibility and event tracking. Added support for RFC 8058-compliant one-click unsubscribe functionality and transparent image-based email tracking.
2026-02-05 19:30:53 +03:00

153 lines
3.7 KiB
TOML

[project]
name = "schon"
version = "2026.1"
description = "Schon — your store without the extra baggage. Everything works out of the box: storefront, product catalog, cart, and orders. Minimal complexity, maximum flexibility — install, adjust to your needs, and start selling."
authors = [{ name = "fureunoir", email = "contact@fureunoir.com" }]
readme = "README.md"
requires-python = ">=3.12,<=3.13"
dependencies = [
"aiogram==3.24.0",
"aiosmtpd==1.4.6",
"channels==4.3.2",
"channels-redis==4.3.0",
"colorlog==6.10.1",
"coverage==7.13.3",
"click==8.3.1",
"cryptography==46.0.4",
"django==5.2.11",
"django-cacheops==7.2",
"django-constance==4.3.4",
"django-cors-headers==4.9.0",
"django-dbbackup==5.1.2",
"django-elasticsearch-dsl==8.2",
"django-extensions==4.1",
"django-filter==25.2",
"django-health-check==3.23.3",
"django-import-export[all]==4.4.0",
"django-json-widget==2.1.1",
"django-model-utils==5.0.0",
"django-md-field==0.1.0",
"django-modeltranslation==0.19.19",
"django-mptt==0.18.0",
"django-prometheus==2.4.1",
"django-redis==6.0.0",
"django-ratelimit==4.1.0",
"django-storages==1.14.6",
"django-unfold==0.78.1",
"django-widget-tweaks==1.5.1",
"djangorestframework==3.16.1",
"djangorestframework-recursive==0.1.2",
"djangorestframework-simplejwt[crypto]==5.5.1",
"djangorestframework-xml==2.0.0",
"djangorestframework-yaml==2.0.0",
"djangoql==0.19.1",
"docutils==0.22.4",
"drf-spectacular==0.29.0",
"drf-spectacular-websocket==1.3.1",
"drf-orjson-renderer==1.8.0",
"elasticsearch-dsl==8.18.0",
"filelock==3.20.3",
"filetype==1.2.0",
"graphene-django==3.2.3",
"graphene-file-upload==1.3.0",
"httpx==0.28.1",
"paramiko==4.0.0",
"pillow==12.1.0",
"pip==26.0.1",
"polib==1.2.0",
"PyJWT==2.11.0",
"pytest==9.0.2",
"pytest-django==4.11.1",
"python-slugify==8.0.4",
"psutil==7.2.2",
"psycopg[binary]==3.3.2",
"redis==7.1.0",
"requests==2.32.5",
"sentry-sdk[django,celery,opentelemetry]==2.52.0",
"six==1.17.0",
"swapper==1.4.0",
"uvicorn==0.40.0",
"zeep==4.3.2",
"websockets==16.0",
"whitenoise==6.11.0",
]
[project.optional-dependencies]
worker = [
"celery==5.6.2",
"django-celery-beat==2.8.1",
"django-celery-results==2.6.0",
]
linting = [
"ty==0.0.15",
"ruff==0.15.0",
"celery-types==0.24.0",
"django-stubs==5.2.9",
"djangorestframework-stubs==3.16.8",
"types-requests==2.32.4.20260107",
"types-redis==4.6.0.20241004",
"types-paramiko==4.0.0.20250822",
"types-psutil==7.2.2.20260130",
"types-pillow==10.2.0.20240822",
"types-docutils==0.22.3.20251115",
"types-six==1.17.0.20251009",
]
openai = ["openai==2.16.0"]
jupyter = ["jupyter==1.1.1"]
[tool.uv]
package = false
[tool.uv.pip]
python-version = "3.13"
[tool.ruff]
line-length = 88
target-version = "py312"
exclude = [
"Dockerfiles",
"monitoring",
"scripts",
"static",
"storefront",
"tmp",
"media",
]
[tool.ruff.lint]
select = ["E4", "E7", "E9", "F", "B", "Q", "I"]
ignore = ["RUF012", "A002", "A003"]
[tool.ruff.lint.isort]
known-first-party = ["schon", "engine"]
[tool.ruff.format]
quote-style = "double"
indent-style = "space"
[tool.ty.src]
exclude = [
"Dockerfiles/**",
"monitoring/**",
"scripts/**",
"static/**",
"storefront/**",
"tmp/**",
"media/**",
]
[tool.ty.environment]
python-version = "3.12"
[tool.ty.terminal]
output-format = "concise"
[tool.ty.rules]
possibly-unresolved-reference = "warn"
possibly-missing-attribute = "warn"
possibly-missing-import = "warn"
unsupported-base = "warn"
[tool.django-stubs]
django_settings_module = "schon.settings.__init__"