[tool.poetry]
name = "eVibes"
version = "2.9.2"
description = "eVibes is an open-source eCommerce backend service built with Django. It’s designed for flexibility, making it ideal for various use cases and learning Django skills. The project is easy to customize, allowing for straightforward editing and extension."
authors = ["fureunoir <contact@fureunoir.com>"]
readme = "README.md"
package-mode = false

[tool.poetry.dependencies]
aiosmtpd = "1.4.6"
celery = { version = "5.5.3", optional = true }
celery-prometheus-exporter = { version = "1.7.0", optional = true }
colorlog = "6.9.0"
click = "8.2.1"
cryptography = "45.0.4"
django = "5.2"
django-cacheops = "7.2"
django-celery-beat = { version = "2.8.1", optional = true }
django-celery-results = { version = "2.6.0", optional = true }
django-constance = "4.3.2"
django-cors-headers = "4.7.0"
django-dbbackup = "4.3.0"
django-elasticsearch-dsl = "8.0"
django-elasticsearch-dsl-drf = "0.22.5"
django-extensions = "4.1"
django-filter = "25.1"
django-health-check = "3.20.0"
django-hosts = "6.0"
django-jazzmin = "3.0.1"
django-json-widget = "2.0.1"
django-mailbox = "4.10.1"
django-model-utils = "5.0.0"
django-modeltranslation = "0.19.15"
django-mptt = "0.17.0"
django-prometheus = "2.3.1"
django-redis = "6.0.0"
django-ratelimit = "4.1.0"
django-storages = "1.14.6"
django-stubs = "5.2.1"
django-summernote = "0.8.20.0"
django-widget-tweaks = "1.5.0"
django-md-field = "0.1.0"
djangorestframework = "3.16.0"
djangorestframework-camel-case = "1.4.2"
djangorestframework-recursive = "0.1.2"
djangorestframework-simplejwt = { extras = ["crypto"], version = "5.5.0" }
djangorestframework-stubs = "3.16.0"
djangorestframework-xml = "2.0.0"
djangorestframework-yaml = "2.0.0"
docutils = "0.21.2"
drf-spectacular = { extras = ["sidecar"], version = "0.28.0" }
elasticsearch = "8.18.1"
elasticsearch-dsl = "8.18.0"
filelock = "3.18.0"
filetype = "1.2.0"
graphene-django = "3.2.3"
graphene-file-upload = "1.3.0"
gunicorn = "23.0.0"
httpx = "0.28.1"
jupyter = { version = "1.1.1", optional = true }
mypy = "1.16.1"
openai = { version = "1.88.0", optional = true }
paramiko = "3.5.1"
pillow = "11.2.1"
polib = "1.2.0"
poetry-core = "2.1.3"
PyJWT = "2.9.0"
python = ">=3.12,<3.13"
python-slugify = "8.0.4"
psutil = "6.1.1"
psycopg2 = "2.9.10"
pydantic = "2.9.2"
pygraphviz = { version = "1.14", optional = true, markers = "sys_platform != 'win32'" }
pymdown-extensions = "10.15"
redis = "6.2.0"
requests = "2.32.4"
ruff = "0.12.0"
sentry-sdk = { extras = ["django", "celery", "opentelemetry", "redis"], version = "2.27.0" }
six = "1.17.0"
swapper = "1.4.0"
yapf = "0.43.0"
zeep = "4.3.1"

[tool.poetry.group.dev.dependencies]
black = "25.1.0"
celery-stubs = "0.1.3"
isort = "6.0.1"
flake8 = "7.2.0"
mypy-extensions = "1.1.0"
pytest = "8.4.1"
pytest-django = "4.11.1"
coverage = "7.9.1"
pre-commit = "4.2.0"
bandit = "1.8.5"

[tool.poetry.extras]
graph = ["pygraphviz"]
worker = ["celery", "django-celery-beat", "django-celery-results", "celery-prometheus-exporter"]
openai = ["openai"]
jupyter = ["jupyter"]
docs = ["sphinx", "sphinx-rtd-theme", "m2r2"]
testing = ["pytest", "pytest-django", "coverage"]
linting = ["black", "isort", "flake8", "bandit"]

[tool.mypy]
strict = true
disable_error_code = ["no-redef", "import-untyped"]
exclude = ["*/migrations/*", "storefront/*"]
plugins = ["mypy_django_plugin.main", "mypy_drf_plugin.main"]

[tool.django-stubs]
django_settings_module = "evibes.settings"

[tool.ruff]
line-length = 120
target-version = "py312"
exclude = ["media", "static", "storefront"]

[tool.ruff.lint]
select = ["E4", "E7", "E9", "F", "B", "Q"]
ignore = ["RUF012", "A002", "A003"]

[tool.ruff.format]
quote-style = "double"
indent-style = "space"