| [project] |
| name = "MarkupSafe" |
| version = "3.1.0.dev" |
| description = "Safely add untrusted strings to HTML/XML markup." |
| readme = "README.md" |
| license = "BSD-3-Clause" |
| license-files = ["LICENSE.txt"] |
| maintainers = [{name = "Pallets", email = "contact@palletsprojects.com"}] |
| classifiers = [ |
| "Development Status :: 5 - Production/Stable", |
| "Environment :: Web Environment", |
| "Intended Audience :: Developers", |
| "Operating System :: OS Independent", |
| "Programming Language :: Python", |
| "Topic :: Internet :: WWW/HTTP :: Dynamic Content", |
| "Topic :: Text Processing :: Markup :: HTML", |
| "Typing :: Typed", |
| ] |
| requires-python = ">=3.10" |
| |
| [project.urls] |
| Donate = "https://palletsprojects.com/donate" |
| Documentation = "https://markupsafe.palletsprojects.com/" |
| Changes = "https://markupsafe.palletsprojects.com/page/changes/" |
| Source = "https://github.com/pallets/markupsafe/" |
| Chat = "https://discord.gg/pallets" |
| |
| [dependency-groups] |
| dev = [ |
| "ruff", |
| "tox", |
| "tox-uv", |
| ] |
| docs = [ |
| "pallets-sphinx-themes", |
| "sphinx", |
| "sphinxcontrib-log-cabinet", |
| ] |
| docs-auto = [ |
| "sphinx-autobuild", |
| ] |
| gha-update = [ |
| "gha-update ; python_full_version >= '3.12'", |
| ] |
| pre-commit = [ |
| "pre-commit", |
| "pre-commit-uv", |
| ] |
| tests = [ |
| "pytest", |
| "pytest-run-parallel; python_full_version >= '3.13'", |
| ] |
| typing = [ |
| "mypy", |
| "pyright", |
| "pytest", |
| ] |
| |
| [build-system] |
| requires = ["setuptools>=77"] |
| build-backend = "setuptools.build_meta" |
| |
| [tool.uv] |
| default-groups = ["dev", "pre-commit", "tests", "typing"] |
| |
| [tool.pytest.ini_options] |
| testpaths = ["tests"] |
| filterwarnings = [ |
| "error", |
| ] |
| markers = [ |
| # Needed when pytest-run-parallel is not installed |
| "thread_unsafe: mark test as not safe to run in multiple threads", |
| ] |
| [tool.coverage.run] |
| branch = true |
| source = ["markupsafe", "tests"] |
| |
| [tool.coverage.paths] |
| source = ["src", "*/site-packages"] |
| |
| [tool.coverage.report] |
| exclude_also = [ |
| "if t.TYPE_CHECKING", |
| "raise NotImplementedError", |
| ": \\.{3}", |
| ] |
| |
| [tool.mypy] |
| python_version = "3.10" |
| files = ["src", "tests"] |
| show_error_codes = true |
| pretty = true |
| strict = true |
| |
| [tool.pyright] |
| pythonVersion = "3.10" |
| include = ["src", "tests"] |
| typeCheckingMode = "standard" |
| |
| [tool.ruff] |
| src = ["src"] |
| fix = true |
| show-fixes = true |
| output-format = "full" |
| |
| [tool.ruff.lint] |
| select = [ |
| "B", # flake8-bugbear |
| "E", # pycodestyle error |
| "F", # pyflakes |
| "I", # isort |
| "UP", # pyupgrade |
| "W", # pycodestyle warning |
| ] |
| ignore = [ |
| "UP038", # keep isinstance tuple |
| ] |
| |
| [tool.ruff.lint.isort] |
| force-single-line = true |
| order-by-type = false |
| |
| [tool.gha-update] |
| tag-only = [ |
| "slsa-framework/slsa-github-generator", |
| ] |
| |
| [tool.tox] |
| env_list = [ |
| "py3.14", "py3.14t", "parallel", |
| "py3.13", "py3.13t", "py3.12", "py3.11", "py3.10", |
| "pypy3.11", |
| "style", |
| "typing", |
| "docs", |
| ] |
| |
| [tool.tox.env_run_base] |
| description = "pytest on latest dependency versions" |
| runner = "uv-venv-lock-runner" |
| package = "wheel" |
| wheel_build_env = ".pkg" |
| constrain_package_deps = true |
| use_frozen_constraints = true |
| dependency_groups = ["tests"] |
| commands = [[ |
| "pytest", "-v", "--tb=short", "--basetemp={env_tmp_dir}", |
| {replace = "posargs", default = [], extend = true}, |
| ]] |
| |
| [tool.tox.env.parallel] |
| description = "check for free threading issues" |
| base_python = ["3.14t"] |
| commands = [[ |
| "pytest", "-v", "--tb=short", "--basetemp=env_tmp_dir", |
| "--parallel-threads=8", |
| {replace = "posargs", default = [], extend = true}, |
| ]] |
| |
| [tool.tox.env.style] |
| description = "run all pre-commit hooks on all files" |
| dependency_groups = ["pre-commit"] |
| skip_install = true |
| commands = [["pre-commit", "run", "--all-files"]] |
| |
| [tool.tox.env.typing] |
| description = "run static type checkers" |
| dependency_groups = ["typing"] |
| commands = [ |
| ["mypy"], |
| ] |
| |
| [tool.tox.env.docs] |
| description = "build docs" |
| dependency_groups = ["docs"] |
| commands = [["sphinx-build", "-E", "-W", "-b", "dirhtml", "docs", "docs/_build/dirhtml"]] |
| |
| [tool.tox.env.docs-auto] |
| description = "continuously rebuild docs and start a local server" |
| dependency_groups = ["docs", "docs-auto"] |
| commands = [["sphinx-autobuild", "-W", "-b", "dirhtml", "--watch", "src", "docs", "docs/_build/dirhtml"]] |
| |
| [tool.tox.env.update-actions] |
| description = "update GitHub Actions pins" |
| labels = ["update"] |
| dependency_groups = ["gha-update"] |
| skip_install = true |
| commands = [["gha-update"]] |
| |
| [tool.tox.env.update-pre_commit] |
| description = "update pre-commit pins" |
| labels = ["update"] |
| dependency_groups = ["pre-commit"] |
| skip_install = true |
| commands = [["pre-commit", "autoupdate", "--freeze", "-j4"]] |
| |
| [tool.tox.env.update-requirements] |
| description = "update uv lock" |
| labels = ["update"] |
| dependency_groups = [] |
| no_default_groups = true |
| skip_install = true |
| commands = [["uv", "lock", {replace = "posargs", default = ["-U"], extend = true}]] |
| |
| [tool.cibuildwheel] |
| enable = "cpython-freethreading" |
| build-frontend = "build[uv]" |
| |
| [[tool.cibuildwheel.overrides]] |
| select = "*-musllinux_riscv64" |
| # uv is not available |
| build-frontend = "build" |
| |
| [tool.cibuildwheel.linux] |
| archs = ["x86_64", "aarch64", "riscv64"] |
| |
| [tool.cibuildwheel.macos] |
| archs = ["x86_64", "arm64"] |
| |
| [tool.cibuildwheel.windows] |
| archs = ["auto", "ARM64"] |