[build-system] requires = [ "setuptools>=61.2", "setuptools-scm[toml]>=6.2.3", ] build-backend = "setuptools.build_meta" [project] name = "pytest-xdist" description = "pytest xdist plugin for distributed testing, most importantly across multiple CPUs" readme = "README.rst" license = {file="LICENSE"} authors = [{name = "holger krekel and contributors", email = "pytest-dev@python.org"}, {email = "holger@merlinux.eu"}] classifiers = [ "Development Status :: 5 - Production/Stable", "Framework :: Pytest", "Intended Audience :: Developers", "License :: OSI Approved :: MIT License", "Operating System :: POSIX", "Operating System :: Microsoft :: Windows", "Operating System :: MacOS :: MacOS X", "Topic :: Software Development :: Testing", "Topic :: Software Development :: Quality Assurance", "Topic :: Utilities", "Programming Language :: Python", "Programming Language :: Python :: 3", "Programming Language :: Python :: 3 :: Only", "Programming Language :: Python :: 3.8", "Programming Language :: Python :: 3.9", "Programming Language :: Python :: 3.10", "Programming Language :: Python :: 3.11", "Programming Language :: Python :: 3.12", ] requires-python = ">=3.8" dependencies = [ "execnet>=2.1", "pytest>=7.0.0", ] dynamic = ["version"] [project.urls] Homepage = "https://github.com/pytest-dev/pytest-xdist" Documentation = "https://pytest-xdist.readthedocs.io/en/latest" Changelog = "https://pytest-xdist.readthedocs.io/en/latest/changelog.html" Source = "https://github.com/pytest-dev/pytest-xdist" Tracker = "https://github.com/pytest-dev/pytest-xdist/issues" [project.entry-points.pytest11] xdist = "xdist.plugin" "xdist.looponfail" = "xdist.looponfail" [project.optional-dependencies] testing = ["filelock"] psutil = ["psutil>=3.0"] setproctitle = ["setproctitle"] [tool.setuptools] zip-safe = false platforms = [ "linux", "osx", "win32", ] include-package-data = false [tool.setuptools_scm] write_to = "src/xdist/_version.py" [tool.ruff] src = ["src"] [tool.ruff.format] docstring-code-format = true [tool.ruff.lint] select = [ "B", # bugbear "D", # pydocstyle "E", # pycodestyle "F", # pyflakes "I", # isort "PYI", # flake8-pyi "UP", # pyupgrade "RUF", # ruff "W", # pycodestyle "T10", # flake8-debugger "PIE", # flake8-pie "FA", # flake8-future-annotations "PGH", # pygrep-hooks "PLE", # pylint error "PLW", # pylint warning "PLR1714", # Consider merging multiple comparisons ] ignore = [ # bugbear ignore "B011", # Do not `assert False` (`python -O` removes these calls) "B028", # No explicit `stacklevel` keyword argument found # pydocstyle ignore "D100", # Missing docstring in public module "D101", # Missing docstring in public class "D102", # Missing docstring in public method "D103", # Missing docstring in public function "D104", # Missing docstring in public package "D105", # Missing docstring in magic method "D106", # Missing docstring in public nested class "D107", # Missing docstring in `__init__` "D209", # Multi-line docstring closing quotes should be on a separate line "D205", # 1 blank line required between summary line and description "D400", # First line should end with a period "D401", # First line of docstring should be in imperative mood # ruff ignore "RUF012", # Mutable class attributes should be annotated with `typing.ClassVar` # pylint ignore "PLW0603", # Using the global statement "PLW0120", # remove the else and dedent its contents "PLW2901", # for loop variable overwritten by assignment target "PLR5501", # Use `elif` instead of `else` then `if` ] [tool.ruff.lint.pycodestyle] # In order to be able to format for 88 char in ruff format max-line-length = 120 [tool.ruff.lint.pydocstyle] convention = "pep257" [tool.ruff.lint.isort] force-single-line = true combine-as-imports = true force-sort-within-sections = true order-by-type = false lines-after-imports = 2 [tool.ruff.lint.per-file-ignores] "src/xdist/_version.py" = ["I001"] [tool.mypy] mypy_path = ["src"] files = ["src", "testing"] strict = true warn_unreachable = true [[tool.mypy.overrides]] module = ["xdist._version"] ignore_missing_imports = true [tool.towncrier] package = "xdist" filename = "CHANGELOG.rst" directory = "changelog/" title_format = "pytest-xdist {version} ({project_date})" template = "changelog/_template.rst" [tool.towncrier.fragment.removal] name = "Removals" [tool.towncrier.fragment.deprecation] name = "Deprecations" [tool.towncrier.fragment.feature] name = "Features" [tool.towncrier.fragment.bugfix] name = "Bug Fixes" [tool.towncrier.fragment.vendor] name = "Vendored Libraries" [tool.towncrier.fragment.doc] name = "Improved Documentation" [tool.towncrier.fragment.trivial] name = "Trivial Changes"