[project]
name = "django-spire"
description = "A project for Django Spire"
readme = { file = "README.md", content-type = "text/markdown" }
license = { file = "LICENSE.md" }
authors = [
    { name = "Brayden Carlson", email = "braydenc@stratusadv.com" },
    { name = "Nathan Johnson", email = "nathanj@stratusadv.com" },
]
keywords = [
    "portal",
    "cmms",
    "spire",
    "django",
    "backend",
    "frontend",
    "javascript",
    "active server pages",
]
classifiers = [
    "Development Status :: 5 - Production/Stable",
    "Environment :: Web Environment",
    "Framework :: Django",
    "Framework :: Django :: 3.2",
    "Framework :: Django :: 4.0",
    "License :: OSI Approved :: MIT License",
    "Operating System :: OS Independent",
    "Programming Language :: JavaScript",
    "Programming Language :: Python :: 3",
    "Programming Language :: Python :: 3.10",
    "Programming Language :: Python :: 3.11",
    "Programming Language :: Python :: 3.12",
    "Topic :: Internet :: WWW/HTTP",
    "Topic :: Internet :: WWW/HTTP :: Dynamic Content",
    "Topic :: Software Development :: Libraries :: Python Modules"
]
requires-python = ">=3.11"
dynamic = ["version"]

dependencies = [
    "beautifulsoup4>=4.14.2",
    "boto3>=1.34.0",
    "botocore>=1.34.0",
    "crispy-bootstrap5==2024.10",
    "dandy==2.0.0",
    "django>=5.1.8",
    "django-crispy-forms==2.3",
    "django-glue>=0.8.12",
    "django-sendgrid-v5",
    "django-storages==1.14.5",
    "docutils",
    "faker",
    "marko==2.1.4",
    "markitdown[docx, pdf]==0.1.2",
    "psycopg2",
    "pydantic",
    "Pygments",
    "Pillow==11.2.1",
    "python-dateutil",
    "robit>=0.4.8",
    "typing_extensions",
    "twilio"
]

[project.optional-dependencies]
development = [
    "build",
    "django-browser-reload",
    "django-debug-toolbar",
    "django-watchfiles",
    "pip",
    "playwright",
    "pyinstrument",
    "pyrefly",
    "pytest",
    "pytest-django",
    "pytest-playwright",
    "ruff==0.15.4",
    "setuptools",
    "twine"
]

documentation = [
    "mkdocs",
    "markdown-exec[ansi]",
    "mkdocs-include-markdown-plugin",
    "mkdocs-material",
    "mkdocs-table-reader-plugin",
    "mkdocstrings-python",
    "mkdocs-gen-files",
    "mkdocs-literate-nav",
    "mkdocs-section-index",
    "openpyxl"
]

[build-system]
requires = [
    "setuptools>=45",
    "wheel"
]
build-backend = "setuptools.build_meta"

[tool.setuptools.packages.find]
include = [
    "django_spire*"
]
exclude = [
    "*.tests*"
]

[tool.setuptools.package-data]
django_spire = [
    "**/*.py",
    "**/*.html",
    "**/*.py.template",
    "**/*.html.template",
    "**/*.css",
    "**/*.js",
    "**/*.png",
    "**/*.gif",
    "**/*.jpg",
    "**/*.jpeg",
    "**/*.ttf",
]

[tool.setuptools.dynamic]
version = { attr = "django_spire.consts.__VERSION__" }

[tool.dev_tool]
port = 5745
single-instance = true

[tool.dev_tool.docker]
container-size = "8g"
postgres-version = 14

[tool.dev_tool.coverage]
exclude = [
    # Directories
    "*/.venv/*",
    "*/migrations/*",
    "*/static/*",
    "*/system/*",
    "*/tests/*",
    "*/venv/*",
    # Files
    "__init__.py",
    "apps.py",
    "automation.py",
    "manage.py",
]
failfast = false
nobrowser = false
noerase = false
nohtml = false
settings = "test_project.postgres_settings"
verbosity = 1

[tool.dev_tool.coverage.django]
apps = ["."]
settings = "test_project.postgres_settings"

[tool.dev_tool.coverage.python]
apps = ["tests"]

[tool.dev_tool.unittest]
failfast = false
keepdb = true
verbosity = 1

[tool.dev_tool.unittest.django]
apps = ["."]
settings = "test_project.postgres_settings"

[tool.dev_tool.unittest.python]
apps = ["tests"]

[tool.dev_tool.scripting]
include = [
    ".dev",
    "workspaces",
]

[tool.pytest.ini_options]
django_find_project = false
markers = ["playwright: Playwright browser tests"]
norecursedirs = ["test_playwright"]

[tool.ruff]
extend = "ruff.toml"
