[build-system]
requires = ["setuptools>=61.2"]
build-backend = "setuptools.build_meta"

[project]
# see https://packaging.python.org/en/latest/specifications/pyproject-toml/
name = "gunicorn"
authors = [{name = "Benoit Chesneau", email = "benoitc@gunicorn.org"}]
license = "MIT"
license-files = ["LICENSE"]
description = "WSGI HTTP Server for UNIX"
readme = "README.md"
classifiers = [
    "Development Status :: 5 - Production/Stable",
    "Environment :: Other Environment",
    "Intended Audience :: Developers",
    "Operating System :: MacOS :: MacOS X",
    "Operating System :: POSIX",
    "Programming Language :: Python",
    "Programming Language :: Python :: 3",
    "Programming Language :: Python :: 3.10",
    "Programming Language :: Python :: 3.11",
    "Programming Language :: Python :: 3.12",
    "Programming Language :: Python :: 3.13",
    "Programming Language :: Python :: 3 :: Only",
    "Programming Language :: Python :: Implementation :: CPython",
    "Programming Language :: Python :: Implementation :: PyPy",
    "Topic :: Internet",
    "Topic :: Utilities",
    "Topic :: Software Development :: Libraries :: Python Modules",
    "Topic :: Internet :: WWW/HTTP",
    "Topic :: Internet :: WWW/HTTP :: WSGI",
    "Topic :: Internet :: WWW/HTTP :: WSGI :: Server",
    "Topic :: Internet :: WWW/HTTP :: Dynamic Content",
]
requires-python = ">=3.10"
dependencies = [
    "packaging",
]
dynamic = ["version"]

[project.urls]
Homepage = "https://gunicorn.org"
Documentation = "https://gunicorn.org"
"Issue tracker" = "https://github.com/benoitc/gunicorn/issues"
"Source code" = "https://github.com/benoitc/gunicorn"
Changelog = "https://gunicorn.org/news/"

[project.optional-dependencies]
gevent = ["gevent>=24.10.1"]
eventlet = ["eventlet>=0.40.3"]
tornado = ["tornado>=6.5.0"]
gthread = []
setproctitle = ["setproctitle"]
http2 = ["h2>=4.1.0"]
fast = ["gunicorn_h1c>=0.6.5"]
testing = [
    "gevent>=24.10.1",
    "eventlet>=0.40.3",
    "h2>=4.1.0",
    "coverage",
    "pytest",
    "pytest-cov",
    "pytest-asyncio",
    "uvloop>=0.19.0",
    "httpx[http2]",
]

[project.scripts]
# duplicates "python -m gunicorn" handling in __main__.py
gunicorn = "gunicorn.app.wsgiapp:run"
gunicornc = "gunicorn.ctl.cli:main"

# note the quotes around "paste.server_runner" to escape the dot
[project.entry-points."paste.server_runner"]
main = "gunicorn.app.pasterapp:serve"

[tool.pytest.ini_options]
# # can override these: python -m pytest --override-ini="addopts="
norecursedirs = ["examples", "lib", "local", "src", "tests/docker"]
testpaths = ["tests/"]
addopts = "--assert=plain --cov=gunicorn --cov-report=xml"
asyncio_mode = "auto"
asyncio_default_fixture_loop_scope = "function"
filterwarnings = [
    # Eventlet patches select module, which breaks asyncio event loop cleanup
    # This is expected behavior when testing eventlet worker
    "ignore::pytest.PytestUnraisableExceptionWarning",
]

[tool.setuptools]
zip-safe = false
include-package-data = true

[tool.setuptools.packages]
find = {namespaces = false}

[tool.setuptools.dynamic]
version = {attr = "gunicorn.__version__"}
