2018-06-19 16:41:04 +08:00
|
|
|
[build-system]
|
|
|
|
requires = [
|
2020-12-13 18:10:06 +08:00
|
|
|
"setuptools>=45.0",
|
|
|
|
"setuptools-scm[toml]>=6.2.3",
|
2018-06-19 16:41:04 +08:00
|
|
|
]
|
2019-02-09 01:50:33 +08:00
|
|
|
build-backend = "setuptools.build_meta"
|
2018-06-19 16:41:04 +08:00
|
|
|
|
2020-08-01 02:46:02 +08:00
|
|
|
[tool.setuptools_scm]
|
|
|
|
write_to = "src/_pytest/_version.py"
|
|
|
|
|
2020-06-08 21:03:10 +08:00
|
|
|
[tool.pytest.ini_options]
|
|
|
|
minversion = "2.0"
|
|
|
|
addopts = "-rfEX -p pytester --strict-markers"
|
2020-09-20 02:56:52 +08:00
|
|
|
python_files = ["test_*.py", "*_test.py", "testing/python/*.py"]
|
2020-06-08 21:03:10 +08:00
|
|
|
python_classes = ["Test", "Acceptance"]
|
|
|
|
python_functions = ["test"]
|
|
|
|
# NOTE: "doc" is not included here, but gets tested explicitly via "doctesting".
|
|
|
|
testpaths = ["testing"]
|
2023-08-20 05:16:31 +08:00
|
|
|
norecursedirs = [
|
|
|
|
"testing/example_scripts",
|
|
|
|
".*",
|
|
|
|
"build",
|
|
|
|
"dist",
|
|
|
|
]
|
2020-06-08 21:03:10 +08:00
|
|
|
xfail_strict = true
|
|
|
|
filterwarnings = [
|
|
|
|
"error",
|
|
|
|
"default:Using or importing the ABCs:DeprecationWarning:unittest2.*",
|
2020-11-05 22:08:54 +08:00
|
|
|
# produced by older pyparsing<=2.2.0.
|
|
|
|
"default:Using or importing the ABCs:DeprecationWarning:pyparsing.*",
|
2020-06-08 21:03:10 +08:00
|
|
|
"default:the imp module is deprecated in favour of importlib:DeprecationWarning:nose.*",
|
2021-03-27 21:37:34 +08:00
|
|
|
# distutils is deprecated in 3.10, scheduled for removal in 3.12
|
|
|
|
"ignore:The distutils package is deprecated:DeprecationWarning",
|
2020-06-08 21:03:10 +08:00
|
|
|
# produced by pytest-xdist
|
|
|
|
"ignore:.*type argument to addoption.*:DeprecationWarning",
|
2020-10-19 15:02:36 +08:00
|
|
|
# produced on execnet (pytest-xdist)
|
2020-06-08 21:03:10 +08:00
|
|
|
"ignore:.*inspect.getargspec.*deprecated, use inspect.signature.*:DeprecationWarning",
|
|
|
|
# pytest's own futurewarnings
|
|
|
|
"ignore::pytest.PytestExperimentalApiWarning",
|
|
|
|
# Do not cause SyntaxError for invalid escape sequences in py37.
|
|
|
|
# Those are caught/handled by pyupgrade, and not easy to filter with the
|
|
|
|
# module being the filename (with .py removed).
|
|
|
|
"default:invalid escape sequence:DeprecationWarning",
|
2021-10-03 22:01:40 +08:00
|
|
|
# ignore not yet fixed warnings for hook markers
|
|
|
|
"default:.*not marked using pytest.hook.*",
|
|
|
|
"ignore:.*not marked using pytest.hook.*::xdist.*",
|
2020-06-08 21:03:10 +08:00
|
|
|
# ignore use of unregistered marks, because we use many to test the implementation
|
|
|
|
"ignore::_pytest.warning_types.PytestUnknownMarkWarning",
|
2021-04-14 17:31:28 +08:00
|
|
|
# https://github.com/benjaminp/six/issues/341
|
|
|
|
"ignore:_SixMetaPathImporter\\.exec_module\\(\\) not found; falling back to load_module\\(\\):ImportWarning",
|
|
|
|
# https://github.com/benjaminp/six/pull/352
|
|
|
|
"ignore:_SixMetaPathImporter\\.find_spec\\(\\) not found; falling back to find_module\\(\\):ImportWarning",
|
|
|
|
# https://github.com/pypa/setuptools/pull/2517
|
|
|
|
"ignore:VendorImporter\\.find_spec\\(\\) not found; falling back to find_module\\(\\):ImportWarning",
|
|
|
|
# https://github.com/pytest-dev/execnet/pull/127
|
|
|
|
"ignore:isSet\\(\\) is deprecated, use is_set\\(\\) instead:DeprecationWarning",
|
2020-06-08 21:03:10 +08:00
|
|
|
]
|
|
|
|
pytester_example_dir = "testing/example_scripts"
|
|
|
|
markers = [
|
|
|
|
# dummy markers for testing
|
|
|
|
"foo",
|
|
|
|
"bar",
|
|
|
|
"baz",
|
|
|
|
# conftest.py reorders tests moving slow ones to the end of the list
|
|
|
|
"slow",
|
|
|
|
# experimental mark for all tests using pexpect
|
|
|
|
"uses_pexpect",
|
|
|
|
]
|
|
|
|
|
|
|
|
|
2017-05-30 21:54:15 +08:00
|
|
|
[tool.towncrier]
|
|
|
|
package = "pytest"
|
2018-06-05 09:01:23 +08:00
|
|
|
package_dir = "src"
|
2019-11-25 11:06:30 +08:00
|
|
|
filename = "doc/en/changelog.rst"
|
2017-05-30 21:54:15 +08:00
|
|
|
directory = "changelog/"
|
2018-07-27 20:21:18 +08:00
|
|
|
title_format = "pytest {version} ({project_date})"
|
2017-05-30 21:54:15 +08:00
|
|
|
template = "changelog/_template.rst"
|
|
|
|
|
|
|
|
[[tool.towncrier.type]]
|
2019-12-06 19:47:39 +08:00
|
|
|
directory = "breaking"
|
|
|
|
name = "Breaking Changes"
|
2018-09-14 01:02:01 +08:00
|
|
|
showcontent = true
|
|
|
|
|
|
|
|
[[tool.towncrier.type]]
|
|
|
|
directory = "deprecation"
|
|
|
|
name = "Deprecations"
|
2017-05-30 21:54:15 +08:00
|
|
|
showcontent = true
|
|
|
|
|
|
|
|
[[tool.towncrier.type]]
|
|
|
|
directory = "feature"
|
|
|
|
name = "Features"
|
|
|
|
showcontent = true
|
|
|
|
|
2019-08-10 20:26:37 +08:00
|
|
|
[[tool.towncrier.type]]
|
|
|
|
directory = "improvement"
|
|
|
|
name = "Improvements"
|
|
|
|
showcontent = true
|
|
|
|
|
2017-05-30 21:54:15 +08:00
|
|
|
[[tool.towncrier.type]]
|
|
|
|
directory = "bugfix"
|
|
|
|
name = "Bug Fixes"
|
|
|
|
showcontent = true
|
|
|
|
|
|
|
|
[[tool.towncrier.type]]
|
|
|
|
directory = "vendor"
|
|
|
|
name = "Vendored Libraries"
|
|
|
|
showcontent = true
|
|
|
|
|
|
|
|
[[tool.towncrier.type]]
|
|
|
|
directory = "doc"
|
|
|
|
name = "Improved Documentation"
|
|
|
|
showcontent = true
|
|
|
|
|
|
|
|
[[tool.towncrier.type]]
|
|
|
|
directory = "trivial"
|
2017-06-23 23:30:29 +08:00
|
|
|
name = "Trivial/Internal Changes"
|
|
|
|
showcontent = true
|
2020-03-07 09:18:41 +08:00
|
|
|
|
|
|
|
[tool.black]
|
2023-07-04 22:20:51 +08:00
|
|
|
target-version = ['py38']
|
2023-02-13 08:37:40 +08:00
|
|
|
|
|
|
|
# check-wheel-contents is executed by the build-and-inspect-python-package action.
|
|
|
|
[tool.check-wheel-contents]
|
|
|
|
# W009: Wheel contains multiple toplevel library entries
|
|
|
|
ignore = "W009"
|
2024-02-01 04:12:33 +08:00
|
|
|
|
|
|
|
[tool.ruff]
|
|
|
|
src = ["src"]
|
|
|
|
line-length = 88
|
|
|
|
select = [
|
2024-02-04 18:24:47 +08:00
|
|
|
"B", # bugbear
|
2024-02-01 04:12:33 +08:00
|
|
|
"D", # pydocstyle
|
|
|
|
"E", # pycodestyle
|
|
|
|
"F", # pyflakes
|
|
|
|
"I", # isort
|
2020-06-08 21:03:10 +08:00
|
|
|
"UP", # pyupgrade
|
2024-02-02 21:49:15 +08:00
|
|
|
"RUF", # ruff
|
2024-02-01 04:12:33 +08:00
|
|
|
"W", # pycodestyle
|
|
|
|
]
|
|
|
|
ignore = [
|
2024-02-04 18:24:47 +08:00
|
|
|
# bugbear ignore
|
|
|
|
"B004", # Using `hasattr(x, "__call__")` to test if x is callable is unreliable.
|
|
|
|
"B005", # Using `.strip()` with multi-character strings is misleading
|
|
|
|
"B006", # Do not use mutable data structures for argument defaults
|
|
|
|
"B007", # Loop control variable `i` not used within loop body
|
|
|
|
"B009", # Do not call `getattr` with a constant attribute value
|
|
|
|
"B010", # [*] Do not call `setattr` with a constant attribute value.
|
|
|
|
"B011", # Do not `assert False` (`python -O` removes these calls)
|
|
|
|
"B015", # Pointless comparison. Did you mean to assign a value?
|
|
|
|
"B017", # `pytest.raises(Exception)` should be considered evil
|
|
|
|
"B023", # Function definition does not bind loop variable `warning`
|
|
|
|
"B028", # No explicit `stacklevel` keyword argument found
|
2020-06-08 21:03:10 +08:00
|
|
|
# pycodestyle ignore
|
|
|
|
# pytest can do weird low-level things, and we usually know
|
|
|
|
# what we're doing when we use type(..) is ...
|
|
|
|
"E721", # Do not compare types, use `isinstance()`
|
|
|
|
# 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
|
2021-03-27 21:37:34 +08:00
|
|
|
"D104", # Missing docstring in public package
|
2020-06-08 21:03:10 +08:00
|
|
|
"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
|
|
|
|
"D402", # First line should not be the function's signature
|
|
|
|
"D404", # First word of the docstring should not be "This"
|
|
|
|
"D415", # First line should end with a period, question mark, or exclamation point
|
2024-02-02 21:49:15 +08:00
|
|
|
# ruff ignore
|
|
|
|
"RUF012", # Mutable class attributes should be annotated with `typing.ClassVar`
|
2024-02-01 04:12:33 +08:00
|
|
|
]
|
|
|
|
|
|
|
|
[tool.ruff.format]
|
2020-06-08 21:03:10 +08:00
|
|
|
docstring-code-format = true
|
2024-02-01 04:12:33 +08:00
|
|
|
|
2020-06-08 21:03:10 +08:00
|
|
|
[tool.ruff.lint.pycodestyle]
|
|
|
|
# In order to be able to format for 88 char in ruff format
|
2024-02-01 04:12:33 +08:00
|
|
|
max-line-length = 120
|
|
|
|
|
2020-06-08 21:03:10 +08:00
|
|
|
[tool.ruff.lint.pydocstyle]
|
2017-05-30 21:54:15 +08:00
|
|
|
convention = "pep257"
|
2024-02-01 04:12:33 +08:00
|
|
|
|
2020-06-08 21:03:10 +08:00
|
|
|
[tool.ruff.lint.isort]
|
2021-04-14 17:31:28 +08:00
|
|
|
force-single-line = true
|
2024-02-01 04:12:33 +08:00
|
|
|
combine-as-imports = true
|
2023-02-13 08:37:40 +08:00
|
|
|
force-sort-within-sections = true
|
2024-02-01 04:12:33 +08:00
|
|
|
order-by-type = false
|
2020-09-20 02:56:52 +08:00
|
|
|
known-local-folder = ["pytest", "_pytest"]
|
2020-06-08 21:03:10 +08:00
|
|
|
lines-after-imports = 2
|
2024-02-03 03:29:30 +08:00
|
|
|
|
|
|
|
[tool.ruff.lint.per-file-ignores]
|
|
|
|
"src/_pytest/_version.py" = ["I001"]
|
2024-02-04 18:24:47 +08:00
|
|
|
"src/_pytest/_py/**/*.py" = ["B", "PYI"]
|