[project]
name = "apispec"
version = "6.9.0"
description = "A pluggable API specification generator. Currently supports the OpenAPI Specification (f.k.a. the Swagger specification)."
readme = "README.rst"
license = { file = "LICENSE" }
authors = [{ name = "Steven Loria", email = "sloria1@gmail.com" }]
maintainers = [
  { name = "Steven Loria", email = "sloria1@gmail.com" },
  { name = "Jérôme Lafréchoux", email = "jerome@jolimont.fr" },
]
classifiers = [
  "Development Status :: 5 - Production/Stable",
  "Intended Audience :: Developers",
  "License :: OSI Approved :: MIT License",
  "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.14",
]
keywords = [
  "apispec",
  "swagger",
  "openapi",
  "specification",
  "oas",
  "documentation",
  "spec",
  "rest",
  "api",
]
requires-python = ">=3.10"
dependencies = ["packaging>=21.3"]

[project.urls]
Changelog = "https://apispec.readthedocs.io/en/latest/changelog.html"
Funding = "https://opencollective.com/marshmallow"
Issues = "https://github.com/marshmallow-code/apispec/issues"
Source = "https://github.com/marshmallow-code/apispec"
Tidelift = "https://tidelift.com/subscription/pkg/pypi-apispec?utm_source=pypi-apispec&utm_medium=pypi"

[project.optional-dependencies]
yaml = ["PyYAML>=3.10"]
marshmallow = ["marshmallow>=3.18.0"]
docs = [
  "apispec[marshmallow]",
  "pyyaml==6.0.3",
  "sphinx==8.2.3",
  "sphinx-issues==5.0.1",
  "sphinx-rtd-theme==3.0.2",
]
tests = ["apispec[yaml,marshmallow]", "openapi-spec-validator==0.7.2", "pytest"]
dev = ["apispec[tests]", "tox", "pre-commit>=3.5,<5.0"]

[build-system]
requires = ["flit_core<4"]
build-backend = "flit_core.buildapi"

[tool.flit.sdist]
include = [
  "docs/",
  "tests/",
  "CHANGELOG.rst",
  "CONTRIBUTING.rst",
  "SECURITY.md",
  "tox.ini",
]
exclude = ["docs/_build/"]

[tool.ruff]
src = ["src"]
fix = true
show-fixes = true
output-format = "full"

[tool.ruff.format]
docstring-code-format = true

[tool.ruff.lint]
ignore = ["E203", "E266", "E501", "E731"]
select = [
  "B",  # flake8-bugbear
  "E",  # pycodestyle error
  "F",  # pyflakes
  "I",  # isort
  "UP", # pyupgrade
  "W",  # pycodestyle warning
]

[tool.mypy]
ignore_missing_imports = true
warn_unreachable = true
warn_unused_ignores = true
warn_redundant_casts = true
no_implicit_optional = true
