[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", "Programming Language :: Python :: 3.10", "Programming Language :: Python :: 3.11", "Programming Language :: Python :: 3.12", "Programming Language :: Python :: 3.13", "Programming Language :: Python :: Implementation :: CPython", "Topic :: Internet :: WWW/HTTP", ] dynamic = ["version"] dependencies = [ "a2wsgi", "apispec>=1.0.0", "chardet", "docopt-ng", "graphene>=3", "graphql-core>=3.1", "marshmallow", "msgpack", "pueblo[sfa-full]>=0.0.11", "pydantic>=2", "python-multipart", "starlette[full]>=1.0", "uvicorn[standard]", ] [project.optional-dependencies] develop = [ "pyproject-fmt", "ruff", "validate-pyproject", ] docs = [ "alabaster<1.1", "myst-parser", "sphinx>=5,<9", "sphinx-autobuild", "sphinx-copybutton", "sphinx-design-elements", ] release = ["build", "twine"] test = [ "flask", "mypy", "pytest", "pytest-cov", "pytest-mock", "pytest-rerunfailures", ] [project.scripts] responder = "responder.ext.cli:cli" [project.urls] Homepage = "https://github.com/kennethreitz/responder" Documentation = "https://responder.kennethreitz.org" Repository = "https://github.com/kennethreitz/responder" Issues = "https://github.com/kennethreitz/responder/issues" [tool.setuptools.dynamic] version = {attr = "responder.__version__.__version__"} [tool.setuptools.package-data] responder = ["py.typed"] [tool.setuptools.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.pytest.ini_options] addopts = """ -rfEXs -p pytester --strict-markers --verbosity=3 --cov --cov-report=term-missing --cov-report=xml """ filterwarnings = [ "error::UserWarning", ] log_level = "DEBUG" log_cli_level = "DEBUG" log_format = "%(asctime)-15s [%(name)-36s] %(levelname)-8s: %(message)s" minversion = "2.0" testpaths = [ "responder", "tests", ] markers = [ ] xfail_strict = true [tool.coverage.run] branch = false omit = [ "*.html", "tests/*", ] [tool.coverage.report] fail_under = 0 show_missing = true exclude_lines = [ "# pragma: no cover", "raise NotImplemented", ] [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