[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.3"] 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__"}