[build-system] build-backend = "setuptools.build_meta" requires = [ "setuptools>=42", ] [project] name = "responder" description = "A familiar HTTP Service Framework for Python." readme = "README.md" license = { text = "Apache 2.0" } authors = [ { name = "Kenneth Reitz", email = "me@kennethreitz.org" }, ] requires-python = ">=3.10" classifiers = [ "Development Status :: 5 - Production/Stable", "Environment :: Web Environment", "Intended Audience :: Developers", "License :: OSI Approved :: Apache Software License", "Operating System :: OS Independent", "Programming Language :: Python", "Programming Language :: Python :: 3 :: Only", "Programming Language :: Python :: 3.10", "Programming Language :: Python :: 3.11", "Programming Language :: Python :: 3.12", "Programming Language :: Python :: 3.13", "Programming Language :: Python :: 3.14", "Programming Language :: Python :: Free Threading", "Programming Language :: Python :: Implementation :: CPython", "Programming Language :: Python :: Implementation :: PyPy", "Topic :: Internet :: WWW/HTTP", ] dynamic = [ "version" ] dependencies = [ "a2wsgi", "apispec>=1", "chardet", "docopt-ng", "graphene>=3", "graphql-core>=3.1", "marshmallow", "msgpack", "pueblo[sfa-full]>=0.0.11", "pydantic>=2", "python-multipart", "starlette[full]>=1", "uvicorn[standard]", ] optional-dependencies.develop = [ "pyproject-fmt", "ruff", "validate-pyproject", ] optional-dependencies.docs = [ "alabaster<1.1", "myst-parser", "sphinx>=5,<9", "sphinx-autobuild", "sphinx-copybutton", "sphinx-design-elements", ] optional-dependencies.release = [ "build", "twine" ] optional-dependencies.test = [ "flask", "mypy", "pytest", "pytest-cov", "pytest-mock", "pytest-rerunfailures", ] urls.Documentation = "https://responder.kennethreitz.org" urls.Homepage = "https://github.com/kennethreitz/responder" urls.Issues = "https://github.com/kennethreitz/responder/issues" urls.Repository = "https://github.com/kennethreitz/responder" scripts.responder = "responder.ext.cli:cli" [tool.setuptools] dynamic.version = { attr = "responder.__version__.__version__" } package-data.responder = [ "py.typed", "ext/openapi/docs/*.html" ] packages.find.exclude = [ "tests" ] [tool.ruff] line-length = 90 extend-exclude = [ "docs/source/conf.py", ] lint.select = [ # Builtins "A", # Bugbear "B", # comprehensions "C4", # Pycodestyle "E", # eradicate "ERA", # Pyflakes "F", # isort "I", # pandas-vet "PD", # return "RET", # Bandit "S", # print "T20", "W", # flake8-2020 "YTT", ] lint.extend-ignore = [ "S101", # Allow use of `assert`. ] lint.per-file-ignores."responder/util/cmd.py" = [ "A005" ] # Module shadows a Python standard-library module lint.per-file-ignores."tests/*" = [ "ERA001", # Found commented-out code. "S101", # Allow use of `assert`, and `print`. ] [tool.mypy] packages = [ "responder", ] exclude = [] check_untyped_defs = true explicit_package_bases = true ignore_missing_imports = true implicit_optional = true install_types = true namespace_packages = true non_interactive = true [tool.pytest] ini_options.addopts = """ -rfEXs -p pytester --strict-markers --verbosity=3 --cov --cov-report=term-missing --cov-report=xml """ ini_options.filterwarnings = [ "error::UserWarning", ] ini_options.log_level = "DEBUG" ini_options.log_cli_level = "DEBUG" ini_options.log_format = "%(asctime)-15s [%(name)-36s] %(levelname)-8s: %(message)s" ini_options.minversion = "2.0" ini_options.testpaths = [ "responder", "tests", ] ini_options.markers = [] ini_options.xfail_strict = true [tool.coverage] run.branch = false run.omit = [ "*.html", "tests/*", ] report.exclude_lines = [ "# pragma: no cover", "raise NotImplemented", ] report.fail_under = 0 report.show_missing = true