pytest 8.1.0__tar.gz → 8.1.2__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {pytest-8.1.0 → pytest-8.1.2}/AUTHORS +1 -0
- {pytest-8.1.0/src/pytest.egg-info → pytest-8.1.2}/PKG-INFO +1 -1
- {pytest-8.1.0 → pytest-8.1.2}/doc/en/announce/index.rst +2 -0
- pytest-8.1.2/doc/en/announce/release-8.1.1.rst +18 -0
- pytest-8.1.2/doc/en/announce/release-8.1.2.rst +18 -0
- {pytest-8.1.0 → pytest-8.1.2}/doc/en/builtin.rst +2 -2
- {pytest-8.1.0 → pytest-8.1.2}/doc/en/changelog.rst +40 -2
- {pytest-8.1.0 → pytest-8.1.2}/doc/en/conf.py +2 -1
- {pytest-8.1.0 → pytest-8.1.2}/doc/en/deprecations.rst +66 -68
- {pytest-8.1.0 → pytest-8.1.2}/doc/en/example/parametrize.rst +3 -3
- {pytest-8.1.0 → pytest-8.1.2}/doc/en/example/pythoncollection.rst +2 -2
- {pytest-8.1.0 → pytest-8.1.2}/doc/en/explanation/flaky.rst +2 -3
- {pytest-8.1.0 → pytest-8.1.2}/doc/en/getting-started.rst +1 -1
- {pytest-8.1.0 → pytest-8.1.2}/doc/en/how-to/doctest.rst +1 -0
- {pytest-8.1.0 → pytest-8.1.2}/doc/en/how-to/fixtures.rst +1 -1
- {pytest-8.1.0 → pytest-8.1.2}/doc/en/how-to/writing_hook_functions.rst +1 -1
- {pytest-8.1.0 → pytest-8.1.2}/doc/en/index.rst +3 -2
- {pytest-8.1.0 → pytest-8.1.2}/src/_pytest/_code/code.py +2 -0
- {pytest-8.1.0 → pytest-8.1.2}/src/_pytest/_version.py +2 -2
- {pytest-8.1.0 → pytest-8.1.2}/src/_pytest/compat.py +17 -0
- {pytest-8.1.0 → pytest-8.1.2}/src/_pytest/config/__init__.py +3 -1
- pytest-8.1.2/src/_pytest/config/compat.py +85 -0
- {pytest-8.1.0 → pytest-8.1.2}/src/_pytest/deprecated.py +15 -0
- {pytest-8.1.0 → pytest-8.1.2}/src/_pytest/hookspec.py +21 -22
- {pytest-8.1.0 → pytest-8.1.2}/src/_pytest/legacypath.py +3 -17
- {pytest-8.1.0 → pytest-8.1.2}/src/_pytest/main.py +3 -1
- {pytest-8.1.0 → pytest-8.1.2}/src/_pytest/nodes.py +41 -5
- {pytest-8.1.0 → pytest-8.1.2}/src/_pytest/pathlib.py +4 -0
- {pytest-8.1.0 → pytest-8.1.2}/src/_pytest/python.py +3 -0
- {pytest-8.1.0 → pytest-8.1.2}/src/_pytest/python_api.py +9 -5
- {pytest-8.1.0 → pytest-8.1.2}/src/_pytest/stash.py +4 -0
- {pytest-8.1.0 → pytest-8.1.2/src/pytest.egg-info}/PKG-INFO +1 -1
- {pytest-8.1.0 → pytest-8.1.2}/src/pytest.egg-info/SOURCES.txt +3 -0
- {pytest-8.1.0 → pytest-8.1.2}/testing/deprecated_test.py +55 -0
- {pytest-8.1.0 → pytest-8.1.2}/testing/python/approx.py +18 -0
- {pytest-8.1.0 → pytest-8.1.2}/testing/test_legacypath.py +2 -2
- {pytest-8.1.0 → pytest-8.1.2}/testing/test_nodes.py +6 -3
- {pytest-8.1.0 → pytest-8.1.2}/testing/test_pathlib.py +71 -0
- {pytest-8.1.0 → pytest-8.1.2}/.coveragerc +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/.git-blame-ignore-revs +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/.gitattributes +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/.github/FUNDING.yml +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/.github/ISSUE_TEMPLATE/1_bug_report.md +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/.github/ISSUE_TEMPLATE/2_feature_request.md +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/.github/ISSUE_TEMPLATE/config.yml +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/.github/config.yml +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/.github/dependabot.yml +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/.github/labels.toml +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/.github/workflows/backport.yml +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/.github/workflows/deploy.yml +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/.github/workflows/prepare-release-pr.yml +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/.github/workflows/stale.yml +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/.github/workflows/test.yml +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/.github/workflows/update-plugin-list.yml +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/.gitignore +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/.pre-commit-config.yaml +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/.readthedocs.yml +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/CHANGELOG.rst +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/CITATION +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/CODE_OF_CONDUCT.md +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/CONTRIBUTING.rst +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/LICENSE +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/OPENCOLLECTIVE.rst +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/README.rst +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/RELEASING.rst +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/TIDELIFT.rst +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/bench/bench.py +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/bench/bench_argcomplete.py +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/bench/empty.py +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/bench/manyparam.py +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/bench/skip.py +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/bench/unit_test.py +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/bench/xunit.py +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/changelog/README.rst +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/changelog/_template.rst +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/codecov.yml +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/doc/en/Makefile +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/doc/en/_templates/globaltoc.html +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/doc/en/_templates/layout.html +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/doc/en/_templates/links.html +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/doc/en/_templates/relations.html +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/doc/en/_templates/sidebarintro.html +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/doc/en/_templates/slim_searchbox.html +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/doc/en/adopt.rst +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/doc/en/announce/release-2.0.0.rst +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/doc/en/announce/release-2.0.1.rst +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/doc/en/announce/release-2.0.2.rst +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/doc/en/announce/release-2.0.3.rst +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/doc/en/announce/release-2.1.0.rst +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/doc/en/announce/release-2.1.1.rst +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/doc/en/announce/release-2.1.2.rst +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/doc/en/announce/release-2.1.3.rst +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/doc/en/announce/release-2.2.0.rst +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/doc/en/announce/release-2.2.1.rst +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/doc/en/announce/release-2.2.2.rst +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/doc/en/announce/release-2.2.4.rst +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/doc/en/announce/release-2.3.0.rst +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/doc/en/announce/release-2.3.1.rst +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/doc/en/announce/release-2.3.2.rst +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/doc/en/announce/release-2.3.3.rst +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/doc/en/announce/release-2.3.4.rst +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/doc/en/announce/release-2.3.5.rst +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/doc/en/announce/release-2.4.0.rst +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/doc/en/announce/release-2.4.1.rst +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/doc/en/announce/release-2.4.2.rst +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/doc/en/announce/release-2.5.0.rst +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/doc/en/announce/release-2.5.1.rst +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/doc/en/announce/release-2.5.2.rst +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/doc/en/announce/release-2.6.0.rst +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/doc/en/announce/release-2.6.1.rst +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/doc/en/announce/release-2.6.2.rst +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/doc/en/announce/release-2.6.3.rst +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/doc/en/announce/release-2.7.0.rst +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/doc/en/announce/release-2.7.1.rst +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/doc/en/announce/release-2.7.2.rst +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/doc/en/announce/release-2.8.2.rst +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/doc/en/announce/release-2.8.3.rst +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/doc/en/announce/release-2.8.4.rst +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/doc/en/announce/release-2.8.5.rst +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/doc/en/announce/release-2.8.6.rst +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/doc/en/announce/release-2.8.7.rst +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/doc/en/announce/release-2.9.0.rst +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/doc/en/announce/release-2.9.1.rst +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/doc/en/announce/release-2.9.2.rst +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/doc/en/announce/release-3.0.0.rst +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/doc/en/announce/release-3.0.1.rst +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/doc/en/announce/release-3.0.2.rst +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/doc/en/announce/release-3.0.3.rst +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/doc/en/announce/release-3.0.4.rst +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/doc/en/announce/release-3.0.5.rst +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/doc/en/announce/release-3.0.6.rst +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/doc/en/announce/release-3.0.7.rst +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/doc/en/announce/release-3.1.0.rst +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/doc/en/announce/release-3.1.1.rst +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/doc/en/announce/release-3.1.2.rst +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/doc/en/announce/release-3.1.3.rst +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/doc/en/announce/release-3.10.0.rst +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/doc/en/announce/release-3.10.1.rst +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/doc/en/announce/release-3.2.0.rst +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/doc/en/announce/release-3.2.1.rst +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/doc/en/announce/release-3.2.2.rst +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/doc/en/announce/release-3.2.3.rst +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/doc/en/announce/release-3.2.4.rst +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/doc/en/announce/release-3.2.5.rst +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/doc/en/announce/release-3.3.0.rst +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/doc/en/announce/release-3.3.1.rst +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/doc/en/announce/release-3.3.2.rst +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/doc/en/announce/release-3.4.0.rst +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/doc/en/announce/release-3.4.1.rst +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/doc/en/announce/release-3.4.2.rst +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/doc/en/announce/release-3.5.0.rst +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/doc/en/announce/release-3.5.1.rst +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/doc/en/announce/release-3.6.0.rst +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/doc/en/announce/release-3.6.1.rst +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/doc/en/announce/release-3.6.2.rst +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/doc/en/announce/release-3.6.3.rst +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/doc/en/announce/release-3.6.4.rst +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/doc/en/announce/release-3.7.0.rst +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/doc/en/announce/release-3.7.1.rst +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/doc/en/announce/release-3.7.2.rst +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/doc/en/announce/release-3.7.3.rst +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/doc/en/announce/release-3.7.4.rst +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/doc/en/announce/release-3.8.0.rst +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/doc/en/announce/release-3.8.1.rst +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/doc/en/announce/release-3.8.2.rst +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/doc/en/announce/release-3.9.0.rst +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/doc/en/announce/release-3.9.1.rst +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/doc/en/announce/release-3.9.2.rst +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/doc/en/announce/release-3.9.3.rst +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/doc/en/announce/release-4.0.0.rst +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/doc/en/announce/release-4.0.1.rst +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/doc/en/announce/release-4.0.2.rst +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/doc/en/announce/release-4.1.0.rst +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/doc/en/announce/release-4.1.1.rst +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/doc/en/announce/release-4.2.0.rst +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/doc/en/announce/release-4.2.1.rst +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/doc/en/announce/release-4.3.0.rst +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/doc/en/announce/release-4.3.1.rst +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/doc/en/announce/release-4.4.0.rst +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/doc/en/announce/release-4.4.1.rst +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/doc/en/announce/release-4.4.2.rst +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/doc/en/announce/release-4.5.0.rst +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/doc/en/announce/release-4.6.0.rst +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/doc/en/announce/release-4.6.1.rst +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/doc/en/announce/release-4.6.2.rst +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/doc/en/announce/release-4.6.3.rst +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/doc/en/announce/release-4.6.4.rst +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/doc/en/announce/release-4.6.5.rst +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/doc/en/announce/release-4.6.6.rst +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/doc/en/announce/release-4.6.7.rst +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/doc/en/announce/release-4.6.8.rst +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/doc/en/announce/release-4.6.9.rst +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/doc/en/announce/release-5.0.0.rst +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/doc/en/announce/release-5.0.1.rst +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/doc/en/announce/release-5.1.0.rst +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/doc/en/announce/release-5.1.1.rst +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/doc/en/announce/release-5.1.2.rst +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/doc/en/announce/release-5.1.3.rst +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/doc/en/announce/release-5.2.0.rst +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/doc/en/announce/release-5.2.1.rst +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/doc/en/announce/release-5.2.2.rst +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/doc/en/announce/release-5.2.3.rst +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/doc/en/announce/release-5.2.4.rst +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/doc/en/announce/release-5.3.0.rst +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/doc/en/announce/release-5.3.1.rst +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/doc/en/announce/release-5.3.2.rst +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/doc/en/announce/release-5.3.3.rst +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/doc/en/announce/release-5.3.4.rst +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/doc/en/announce/release-5.3.5.rst +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/doc/en/announce/release-5.4.0.rst +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/doc/en/announce/release-5.4.1.rst +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/doc/en/announce/release-5.4.2.rst +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/doc/en/announce/release-5.4.3.rst +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/doc/en/announce/release-6.0.0.rst +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/doc/en/announce/release-6.0.0rc1.rst +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/doc/en/announce/release-6.0.1.rst +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/doc/en/announce/release-6.0.2.rst +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/doc/en/announce/release-6.1.0.rst +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/doc/en/announce/release-6.1.1.rst +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/doc/en/announce/release-6.1.2.rst +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/doc/en/announce/release-6.2.0.rst +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/doc/en/announce/release-6.2.1.rst +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/doc/en/announce/release-6.2.2.rst +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/doc/en/announce/release-6.2.3.rst +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/doc/en/announce/release-6.2.4.rst +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/doc/en/announce/release-6.2.5.rst +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/doc/en/announce/release-7.0.0.rst +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/doc/en/announce/release-7.0.0rc1.rst +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/doc/en/announce/release-7.0.1.rst +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/doc/en/announce/release-7.1.0.rst +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/doc/en/announce/release-7.1.1.rst +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/doc/en/announce/release-7.1.2.rst +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/doc/en/announce/release-7.1.3.rst +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/doc/en/announce/release-7.2.0.rst +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/doc/en/announce/release-7.2.1.rst +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/doc/en/announce/release-7.2.2.rst +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/doc/en/announce/release-7.3.0.rst +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/doc/en/announce/release-7.3.1.rst +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/doc/en/announce/release-7.3.2.rst +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/doc/en/announce/release-7.4.0.rst +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/doc/en/announce/release-7.4.1.rst +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/doc/en/announce/release-7.4.2.rst +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/doc/en/announce/release-7.4.3.rst +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/doc/en/announce/release-7.4.4.rst +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/doc/en/announce/release-8.0.0.rst +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/doc/en/announce/release-8.0.0rc1.rst +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/doc/en/announce/release-8.0.0rc2.rst +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/doc/en/announce/release-8.0.1.rst +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/doc/en/announce/release-8.0.2.rst +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/doc/en/announce/release-8.1.0.rst +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/doc/en/announce/sprint2016.rst +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/doc/en/backwards-compatibility.rst +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/doc/en/conftest.py +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/doc/en/contact.rst +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/doc/en/contents.rst +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/doc/en/contributing.rst +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/doc/en/development_guide.rst +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/doc/en/example/assertion/failure_demo.py +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/doc/en/example/assertion/global_testmodule_config/conftest.py +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/doc/en/example/assertion/global_testmodule_config/test_hello_world.py +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/doc/en/example/assertion/test_failures.py +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/doc/en/example/assertion/test_setup_flow_example.py +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/doc/en/example/attic.rst +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/doc/en/example/conftest.py +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/doc/en/example/customdirectory/conftest.py +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/doc/en/example/customdirectory/pytest.ini +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/doc/en/example/customdirectory/tests/manifest.json +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/doc/en/example/customdirectory/tests/test_first.py +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/doc/en/example/customdirectory/tests/test_second.py +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/doc/en/example/customdirectory/tests/test_third.py +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/doc/en/example/customdirectory.rst +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/doc/en/example/fixtures/fixture_availability.svg +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/doc/en/example/fixtures/fixture_availability_plugins.svg +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/doc/en/example/fixtures/test_fixtures_order_autouse.py +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/doc/en/example/fixtures/test_fixtures_order_autouse.svg +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/doc/en/example/fixtures/test_fixtures_order_autouse_flat.svg +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/doc/en/example/fixtures/test_fixtures_order_autouse_multiple_scopes.py +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/doc/en/example/fixtures/test_fixtures_order_autouse_multiple_scopes.svg +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/doc/en/example/fixtures/test_fixtures_order_autouse_temp_effects.py +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/doc/en/example/fixtures/test_fixtures_order_autouse_temp_effects.svg +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/doc/en/example/fixtures/test_fixtures_order_dependencies.py +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/doc/en/example/fixtures/test_fixtures_order_dependencies.svg +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/doc/en/example/fixtures/test_fixtures_order_dependencies_flat.svg +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/doc/en/example/fixtures/test_fixtures_order_dependencies_unclear.svg +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/doc/en/example/fixtures/test_fixtures_order_scope.py +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/doc/en/example/fixtures/test_fixtures_order_scope.svg +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/doc/en/example/fixtures/test_fixtures_request_different_scope.py +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/doc/en/example/fixtures/test_fixtures_request_different_scope.svg +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/doc/en/example/index.rst +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/doc/en/example/markers.rst +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/doc/en/example/multipython.py +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/doc/en/example/nonpython/__init__.py +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/doc/en/example/nonpython/conftest.py +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/doc/en/example/nonpython/test_simple.yaml +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/doc/en/example/nonpython.rst +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/doc/en/example/pythoncollection.py +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/doc/en/example/reportingdemo.rst +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/doc/en/example/simple.rst +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/doc/en/example/special.rst +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/doc/en/example/xfail_demo.py +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/doc/en/explanation/anatomy.rst +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/doc/en/explanation/fixtures.rst +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/doc/en/explanation/goodpractices.rst +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/doc/en/explanation/index.rst +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/doc/en/explanation/pythonpath.rst +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/doc/en/funcarg_compare.rst +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/doc/en/funcargs.rst +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/doc/en/historical-notes.rst +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/doc/en/history.rst +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/doc/en/how-to/assert.rst +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/doc/en/how-to/bash-completion.rst +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/doc/en/how-to/cache.rst +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/doc/en/how-to/capture-stdout-stderr.rst +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/doc/en/how-to/capture-warnings.rst +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/doc/en/how-to/existingtestsuite.rst +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/doc/en/how-to/failures.rst +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/doc/en/how-to/index.rst +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/doc/en/how-to/logging.rst +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/doc/en/how-to/mark.rst +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/doc/en/how-to/monkeypatch.rst +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/doc/en/how-to/output.rst +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/doc/en/how-to/parametrize.rst +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/doc/en/how-to/plugins.rst +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/doc/en/how-to/skipping.rst +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/doc/en/how-to/tmp_path.rst +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/doc/en/how-to/unittest.rst +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/doc/en/how-to/usage.rst +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/doc/en/how-to/writing_plugins.rst +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/doc/en/how-to/xunit_setup.rst +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/doc/en/img/cramer2.png +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/doc/en/img/favicon.png +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/doc/en/img/freiburg2.jpg +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/doc/en/img/gaynor3.png +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/doc/en/img/keleshev.png +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/doc/en/img/pullrequest.png +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/doc/en/img/pylib.png +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/doc/en/img/pytest1.png +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/doc/en/img/pytest_logo_curves.svg +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/doc/en/img/theuni.png +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/doc/en/license.rst +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/doc/en/naming20.rst +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/doc/en/proposals/parametrize_with_fixtures.rst +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/doc/en/pytest.ini +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/doc/en/recwarn.rst +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/doc/en/reference/customize.rst +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/doc/en/reference/exit-codes.rst +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/doc/en/reference/fixtures.rst +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/doc/en/reference/index.rst +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/doc/en/reference/plugin_list.rst +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/doc/en/reference/reference.rst +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/doc/en/requirements.txt +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/doc/en/sponsor.rst +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/doc/en/talks.rst +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/doc/en/tidelift.rst +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/doc/en/yieldfixture.rst +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/extra/get_issues.py +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/pyproject.toml +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/scripts/.gitignore +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/scripts/generate-gh-release-notes.py +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/scripts/prepare-release-pr.py +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/scripts/release.major.rst +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/scripts/release.minor.rst +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/scripts/release.patch.rst +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/scripts/release.pre.rst +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/scripts/release.py +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/scripts/towncrier-draft-to-file.py +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/scripts/update-plugin-list.py +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/setup.cfg +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/src/_pytest/__init__.py +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/src/_pytest/_argcomplete.py +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/src/_pytest/_code/__init__.py +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/src/_pytest/_code/source.py +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/src/_pytest/_io/__init__.py +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/src/_pytest/_io/pprint.py +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/src/_pytest/_io/saferepr.py +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/src/_pytest/_io/terminalwriter.py +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/src/_pytest/_io/wcwidth.py +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/src/_pytest/_py/__init__.py +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/src/_pytest/_py/error.py +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/src/_pytest/_py/path.py +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/src/_pytest/assertion/__init__.py +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/src/_pytest/assertion/rewrite.py +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/src/_pytest/assertion/truncate.py +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/src/_pytest/assertion/util.py +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/src/_pytest/cacheprovider.py +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/src/_pytest/capture.py +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/src/_pytest/config/argparsing.py +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/src/_pytest/config/exceptions.py +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/src/_pytest/config/findpaths.py +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/src/_pytest/debugging.py +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/src/_pytest/doctest.py +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/src/_pytest/faulthandler.py +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/src/_pytest/fixtures.py +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/src/_pytest/freeze_support.py +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/src/_pytest/helpconfig.py +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/src/_pytest/junitxml.py +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/src/_pytest/logging.py +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/src/_pytest/mark/__init__.py +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/src/_pytest/mark/expression.py +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/src/_pytest/mark/structures.py +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/src/_pytest/monkeypatch.py +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/src/_pytest/outcomes.py +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/src/_pytest/pastebin.py +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/src/_pytest/py.typed +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/src/_pytest/pytester.py +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/src/_pytest/pytester_assertions.py +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/src/_pytest/python_path.py +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/src/_pytest/recwarn.py +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/src/_pytest/reports.py +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/src/_pytest/runner.py +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/src/_pytest/scope.py +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/src/_pytest/setuponly.py +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/src/_pytest/setupplan.py +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/src/_pytest/skipping.py +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/src/_pytest/stepwise.py +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/src/_pytest/terminal.py +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/src/_pytest/threadexception.py +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/src/_pytest/timing.py +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/src/_pytest/tmpdir.py +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/src/_pytest/unittest.py +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/src/_pytest/unraisableexception.py +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/src/_pytest/warning_types.py +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/src/_pytest/warnings.py +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/src/py.py +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/src/pytest/__init__.py +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/src/pytest/__main__.py +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/src/pytest/py.typed +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/src/pytest.egg-info/dependency_links.txt +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/src/pytest.egg-info/entry_points.txt +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/src/pytest.egg-info/requires.txt +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/src/pytest.egg-info/top_level.txt +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/testing/_py/test_local.py +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/testing/acceptance_test.py +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/testing/code/test_code.py +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/testing/code/test_excinfo.py +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/testing/code/test_source.py +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/testing/conftest.py +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/testing/example_scripts/README.rst +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/testing/example_scripts/__init__.py +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/testing/example_scripts/acceptance/fixture_mock_integration.py +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/testing/example_scripts/collect/collect_init_tests/pytest.ini +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/testing/example_scripts/collect/collect_init_tests/tests/__init__.py +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/testing/example_scripts/collect/collect_init_tests/tests/test_foo.py +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/testing/example_scripts/collect/package_infinite_recursion/__init__.pyi +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/testing/example_scripts/collect/package_infinite_recursion/conftest.py +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/testing/example_scripts/collect/package_infinite_recursion/tests/__init__.py +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/testing/example_scripts/collect/package_infinite_recursion/tests/test_basic.py +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/testing/example_scripts/collect/package_init_given_as_arg/pkg/__init__.py +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/testing/example_scripts/collect/package_init_given_as_arg/pkg/test_foo.py +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/testing/example_scripts/config/collect_pytest_prefix/__init__.pyi +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/testing/example_scripts/config/collect_pytest_prefix/conftest.py +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/testing/example_scripts/config/collect_pytest_prefix/test_foo.py +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/testing/example_scripts/conftest_usageerror/__init__.pyi +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/testing/example_scripts/conftest_usageerror/conftest.py +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/testing/example_scripts/customdirectory/conftest.py +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/testing/example_scripts/customdirectory/pytest.ini +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/testing/example_scripts/customdirectory/tests/manifest.json +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/testing/example_scripts/customdirectory/tests/test_first.py +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/testing/example_scripts/customdirectory/tests/test_second.py +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/testing/example_scripts/customdirectory/tests/test_third.py +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/testing/example_scripts/dataclasses/test_compare_dataclasses.py +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/testing/example_scripts/dataclasses/test_compare_dataclasses_field_comparison_off.py +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/testing/example_scripts/dataclasses/test_compare_dataclasses_verbose.py +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/testing/example_scripts/dataclasses/test_compare_dataclasses_with_custom_eq.py +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/testing/example_scripts/dataclasses/test_compare_initvar.py +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/testing/example_scripts/dataclasses/test_compare_recursive_dataclasses.py +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/testing/example_scripts/dataclasses/test_compare_two_different_dataclasses.py +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/testing/example_scripts/doctest/main_py/__main__.py +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/testing/example_scripts/doctest/main_py/test_normal_module.py +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/testing/example_scripts/fixtures/custom_item/__init__.pyi +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/testing/example_scripts/fixtures/custom_item/conftest.py +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/testing/example_scripts/fixtures/custom_item/foo/__init__.py +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/testing/example_scripts/fixtures/custom_item/foo/test_foo.py +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/testing/example_scripts/fixtures/fill_fixtures/test_conftest_funcargs_only_available_in_subdir/sub1/__init__.py +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/testing/example_scripts/fixtures/fill_fixtures/test_conftest_funcargs_only_available_in_subdir/sub1/conftest.py +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/testing/example_scripts/fixtures/fill_fixtures/test_conftest_funcargs_only_available_in_subdir/sub1/test_in_sub1.py +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/testing/example_scripts/fixtures/fill_fixtures/test_conftest_funcargs_only_available_in_subdir/sub2/__init__.py +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/testing/example_scripts/fixtures/fill_fixtures/test_conftest_funcargs_only_available_in_subdir/sub2/conftest.py +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/testing/example_scripts/fixtures/fill_fixtures/test_conftest_funcargs_only_available_in_subdir/sub2/test_in_sub2.py +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/testing/example_scripts/fixtures/fill_fixtures/test_detect_recursive_dependency_error.py +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/testing/example_scripts/fixtures/fill_fixtures/test_extend_fixture_conftest_conftest/__init__.pyi +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/testing/example_scripts/fixtures/fill_fixtures/test_extend_fixture_conftest_conftest/conftest.py +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/testing/example_scripts/fixtures/fill_fixtures/test_extend_fixture_conftest_conftest/pkg/__init__.py +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/testing/example_scripts/fixtures/fill_fixtures/test_extend_fixture_conftest_conftest/pkg/conftest.py +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/testing/example_scripts/fixtures/fill_fixtures/test_extend_fixture_conftest_conftest/pkg/test_spam.py +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/testing/example_scripts/fixtures/fill_fixtures/test_extend_fixture_conftest_module/__init__.pyi +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/testing/example_scripts/fixtures/fill_fixtures/test_extend_fixture_conftest_module/conftest.py +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/testing/example_scripts/fixtures/fill_fixtures/test_extend_fixture_conftest_module/test_extend_fixture_conftest_module.py +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/testing/example_scripts/fixtures/fill_fixtures/test_extend_fixture_module_class.py +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/testing/example_scripts/fixtures/fill_fixtures/test_funcarg_basic.py +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/testing/example_scripts/fixtures/fill_fixtures/test_funcarg_lookup_classlevel.py +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/testing/example_scripts/fixtures/fill_fixtures/test_funcarg_lookup_modulelevel.py +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/testing/example_scripts/fixtures/fill_fixtures/test_funcarg_lookupfails.py +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/testing/example_scripts/fixtures/test_fixture_named_request.py +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/testing/example_scripts/fixtures/test_getfixturevalue_dynamic.py +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/testing/example_scripts/issue88_initial_file_multinodes/__init__.pyi +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/testing/example_scripts/issue88_initial_file_multinodes/conftest.py +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/testing/example_scripts/issue88_initial_file_multinodes/test_hello.py +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/testing/example_scripts/issue_519.py +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/testing/example_scripts/junit-10.xsd +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/testing/example_scripts/marks/marks_considered_keywords/__init__.pyi +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/testing/example_scripts/marks/marks_considered_keywords/conftest.py +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/testing/example_scripts/marks/marks_considered_keywords/test_marks_as_keywords.py +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/testing/example_scripts/perf_examples/collect_stats/.gitignore +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/testing/example_scripts/perf_examples/collect_stats/generate_folders.py +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/testing/example_scripts/perf_examples/collect_stats/template_test.py +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/testing/example_scripts/pytest.ini +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/testing/example_scripts/tmpdir/tmp_path_fixture.py +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/testing/example_scripts/unittest/test_parametrized_fixture_error_message.py +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/testing/example_scripts/unittest/test_setup_skip.py +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/testing/example_scripts/unittest/test_setup_skip_class.py +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/testing/example_scripts/unittest/test_setup_skip_module.py +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/testing/example_scripts/unittest/test_unittest_asyncio.py +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/testing/example_scripts/unittest/test_unittest_asynctest.py +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/testing/example_scripts/unittest/test_unittest_plain_async.py +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/testing/example_scripts/warnings/test_group_warnings_by_message.py +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/testing/example_scripts/warnings/test_group_warnings_by_message_summary/test_1.py +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/testing/example_scripts/warnings/test_group_warnings_by_message_summary/test_2.py +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/testing/examples/test_issue519.py +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/testing/freeze/.gitignore +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/testing/freeze/create_executable.py +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/testing/freeze/runtests_script.py +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/testing/freeze/tests/test_doctest.txt +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/testing/freeze/tests/test_trivial.py +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/testing/freeze/tox_run.py +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/testing/io/test_pprint.py +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/testing/io/test_saferepr.py +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/testing/io/test_terminalwriter.py +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/testing/io/test_wcwidth.py +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/testing/logging/test_fixture.py +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/testing/logging/test_formatter.py +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/testing/logging/test_reporting.py +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/testing/plugins_integration/.gitignore +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/testing/plugins_integration/README.rst +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/testing/plugins_integration/bdd_wallet.feature +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/testing/plugins_integration/bdd_wallet.py +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/testing/plugins_integration/django_settings.py +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/testing/plugins_integration/pytest.ini +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/testing/plugins_integration/pytest_anyio_integration.py +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/testing/plugins_integration/pytest_asyncio_integration.py +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/testing/plugins_integration/pytest_mock_integration.py +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/testing/plugins_integration/pytest_trio_integration.py +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/testing/plugins_integration/pytest_twisted_integration.py +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/testing/plugins_integration/requirements.txt +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/testing/plugins_integration/simple_integration.py +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/testing/python/collect.py +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/testing/python/fixtures.py +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/testing/python/integration.py +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/testing/python/metafunc.py +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/testing/python/raises.py +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/testing/python/show_fixtures_per_test.py +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/testing/test_argcomplete.py +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/testing/test_assertion.py +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/testing/test_assertrewrite.py +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/testing/test_cacheprovider.py +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/testing/test_capture.py +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/testing/test_collection.py +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/testing/test_compat.py +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/testing/test_config.py +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/testing/test_conftest.py +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/testing/test_debugging.py +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/testing/test_doctest.py +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/testing/test_entry_points.py +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/testing/test_error_diffs.py +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/testing/test_faulthandler.py +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/testing/test_findpaths.py +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/testing/test_helpconfig.py +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/testing/test_junitxml.py +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/testing/test_link_resolve.py +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/testing/test_main.py +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/testing/test_mark.py +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/testing/test_mark_expression.py +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/testing/test_meta.py +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/testing/test_monkeypatch.py +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/testing/test_parseopt.py +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/testing/test_pastebin.py +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/testing/test_pluginmanager.py +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/testing/test_pytester.py +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/testing/test_python_path.py +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/testing/test_recwarn.py +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/testing/test_reports.py +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/testing/test_runner.py +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/testing/test_runner_xunit.py +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/testing/test_scope.py +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/testing/test_session.py +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/testing/test_setuponly.py +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/testing/test_setupplan.py +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/testing/test_skipping.py +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/testing/test_stash.py +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/testing/test_stepwise.py +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/testing/test_terminal.py +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/testing/test_threadexception.py +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/testing/test_tmpdir.py +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/testing/test_unittest.py +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/testing/test_unraisableexception.py +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/testing/test_warning_types.py +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/testing/test_warnings.py +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/testing/typing_checks.py +0 -0
- {pytest-8.1.0 → pytest-8.1.2}/tox.ini +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: pytest
|
|
3
|
-
Version: 8.1.
|
|
3
|
+
Version: 8.1.2
|
|
4
4
|
Summary: pytest: simple powerful testing with Python
|
|
5
5
|
Author: Holger Krekel, Bruno Oliveira, Ronny Pfannschmidt, Floris Bruynooghe, Brianna Laugher, Florian Bruhin, Others (See AUTHORS)
|
|
6
6
|
License: MIT
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
pytest-8.1.1
|
|
2
|
+
=======================================
|
|
3
|
+
|
|
4
|
+
pytest 8.1.1 has just been released to PyPI.
|
|
5
|
+
|
|
6
|
+
This is a bug-fix release, being a drop-in replacement. To upgrade::
|
|
7
|
+
|
|
8
|
+
pip install --upgrade pytest
|
|
9
|
+
|
|
10
|
+
The full changelog is available at https://docs.pytest.org/en/stable/changelog.html.
|
|
11
|
+
|
|
12
|
+
Thanks to all of the contributors to this release:
|
|
13
|
+
|
|
14
|
+
* Ran Benita
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
Happy testing,
|
|
18
|
+
The pytest Development Team
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
pytest-8.1.2
|
|
2
|
+
=======================================
|
|
3
|
+
|
|
4
|
+
pytest 8.1.2 has just been released to PyPI.
|
|
5
|
+
|
|
6
|
+
This is a bug-fix release, being a drop-in replacement. To upgrade::
|
|
7
|
+
|
|
8
|
+
pip install --upgrade pytest
|
|
9
|
+
|
|
10
|
+
The full changelog is available at https://docs.pytest.org/en/stable/changelog.html.
|
|
11
|
+
|
|
12
|
+
Thanks to all of the contributors to this release:
|
|
13
|
+
|
|
14
|
+
* Bruno Oliveira
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
Happy testing,
|
|
18
|
+
The pytest Development Team
|
|
@@ -170,10 +170,10 @@ For information about fixtures, see :ref:`fixtures`. To see a complete list of a
|
|
|
170
170
|
`pytest-xdist <https://github.com/pytest-dev/pytest-xdist>`__ plugin. See
|
|
171
171
|
:issue:`7767` for details.
|
|
172
172
|
|
|
173
|
-
tmpdir_factory [session scope] -- .../_pytest/legacypath.py:
|
|
173
|
+
tmpdir_factory [session scope] -- .../_pytest/legacypath.py:303
|
|
174
174
|
Return a :class:`pytest.TempdirFactory` instance for the test session.
|
|
175
175
|
|
|
176
|
-
tmpdir -- .../_pytest/legacypath.py:
|
|
176
|
+
tmpdir -- .../_pytest/legacypath.py:310
|
|
177
177
|
Return a temporary directory path object which is unique to each test
|
|
178
178
|
function invocation, created as a sub directory of the base temporary
|
|
179
179
|
directory.
|
|
@@ -28,9 +28,23 @@ with advance notice in the **Deprecations** section of releases.
|
|
|
28
28
|
|
|
29
29
|
.. towncrier release notes start
|
|
30
30
|
|
|
31
|
-
pytest 8.1.
|
|
31
|
+
pytest 8.1.2 (2024-04-26)
|
|
32
32
|
=========================
|
|
33
33
|
|
|
34
|
+
Bug Fixes
|
|
35
|
+
---------
|
|
36
|
+
|
|
37
|
+
- `#12114 <https://github.com/pytest-dev/pytest/issues/12114>`_: Fixed error in :func:`pytest.approx` when used with `numpy` arrays and comparing with other types.
|
|
38
|
+
|
|
39
|
+
|
|
40
|
+
pytest 8.1.1 (2024-03-08)
|
|
41
|
+
=========================
|
|
42
|
+
|
|
43
|
+
.. note::
|
|
44
|
+
|
|
45
|
+
This release is not a usual bug fix release -- it contains features and improvements, being a follow up
|
|
46
|
+
to ``8.1.0``, which has been yanked from PyPI.
|
|
47
|
+
|
|
34
48
|
Features
|
|
35
49
|
--------
|
|
36
50
|
|
|
@@ -86,6 +100,9 @@ Improvements
|
|
|
86
100
|
Bug Fixes
|
|
87
101
|
---------
|
|
88
102
|
|
|
103
|
+
- `#11475 <https://github.com/pytest-dev/pytest/issues/11475>`_: Fixed regression where ``--importmode=importlib`` would import non-test modules more than once.
|
|
104
|
+
|
|
105
|
+
|
|
89
106
|
- `#11904 <https://github.com/pytest-dev/pytest/issues/11904>`_: Fixed a regression in pytest 8.0.0 that would cause test collection to fail due to permission errors when using ``--pyargs``.
|
|
90
107
|
|
|
91
108
|
This change improves the collection tree for tests specified using ``--pyargs``, see :pull:`12043` for a comparison with pytest 8.0 and <8.
|
|
@@ -100,7 +117,6 @@ Bug Fixes
|
|
|
100
117
|
- `#12039 <https://github.com/pytest-dev/pytest/issues/12039>`_: Fixed a regression in ``8.0.2`` where tests created using :fixture:`tmp_path` have been collected multiple times in CI under Windows.
|
|
101
118
|
|
|
102
119
|
|
|
103
|
-
|
|
104
120
|
Improved Documentation
|
|
105
121
|
----------------------
|
|
106
122
|
|
|
@@ -120,6 +136,28 @@ Trivial/Internal Changes
|
|
|
120
136
|
If you really need to, copy the function from the previous pytest release.
|
|
121
137
|
|
|
122
138
|
|
|
139
|
+
- `#12069 <https://github.com/pytest-dev/pytest/issues/12069>`_: Delayed the deprecation of the following features to ``9.0.0``:
|
|
140
|
+
|
|
141
|
+
* :ref:`node-ctor-fspath-deprecation`.
|
|
142
|
+
* :ref:`legacy-path-hooks-deprecated`.
|
|
143
|
+
|
|
144
|
+
It was discovered after ``8.1.0`` was released that the warnings about the impeding removal were not being displayed, so the team decided to revert the removal.
|
|
145
|
+
|
|
146
|
+
This is the reason for ``8.1.0`` being yanked.
|
|
147
|
+
|
|
148
|
+
|
|
149
|
+
pytest 8.1.0 (YANKED)
|
|
150
|
+
=====================
|
|
151
|
+
|
|
152
|
+
|
|
153
|
+
.. note::
|
|
154
|
+
|
|
155
|
+
This release has been **yanked**: it broke some plugins without the proper warning period, due to
|
|
156
|
+
some warnings not showing up as expected.
|
|
157
|
+
|
|
158
|
+
See `#12069 <https://github.com/pytest-dev/pytest/issues/12069>`__.
|
|
159
|
+
|
|
160
|
+
|
|
123
161
|
pytest 8.0.2 (2024-02-24)
|
|
124
162
|
=========================
|
|
125
163
|
|
|
@@ -200,6 +200,7 @@ nitpick_ignore = [
|
|
|
200
200
|
("py:class", "_tracing.TagTracerSub"),
|
|
201
201
|
("py:class", "warnings.WarningMessage"),
|
|
202
202
|
# Undocumented type aliases
|
|
203
|
+
("py:class", "LEGACY_PATH"),
|
|
203
204
|
("py:class", "_PluggyPlugin"),
|
|
204
205
|
# TypeVars
|
|
205
206
|
("py:class", "_pytest._code.code.E"),
|
|
@@ -394,7 +395,7 @@ epub_copyright = "2013, holger krekel et alii"
|
|
|
394
395
|
# The format is a list of tuples containing the path and title.
|
|
395
396
|
# epub_pre_files = []
|
|
396
397
|
|
|
397
|
-
# HTML files
|
|
398
|
+
# HTML files that should be inserted after the pages created by sphinx.
|
|
398
399
|
# The format is a list of tuples containing the path and title.
|
|
399
400
|
# epub_post_files = []
|
|
400
401
|
|
|
@@ -19,7 +19,45 @@ Below is a complete list of all pytest features which are considered deprecated.
|
|
|
19
19
|
:class:`~pytest.PytestWarning` or subclasses, which can be filtered using :ref:`standard warning filters <warnings>`.
|
|
20
20
|
|
|
21
21
|
|
|
22
|
-
..
|
|
22
|
+
.. _node-ctor-fspath-deprecation:
|
|
23
|
+
|
|
24
|
+
``fspath`` argument for Node constructors replaced with ``pathlib.Path``
|
|
25
|
+
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
26
|
+
|
|
27
|
+
.. deprecated:: 7.0
|
|
28
|
+
|
|
29
|
+
In order to support the transition from ``py.path.local`` to :mod:`pathlib`,
|
|
30
|
+
the ``fspath`` argument to :class:`~_pytest.nodes.Node` constructors like
|
|
31
|
+
:func:`pytest.Function.from_parent()` and :func:`pytest.Class.from_parent()`
|
|
32
|
+
is now deprecated.
|
|
33
|
+
|
|
34
|
+
Plugins which construct nodes should pass the ``path`` argument, of type
|
|
35
|
+
:class:`pathlib.Path`, instead of the ``fspath`` argument.
|
|
36
|
+
|
|
37
|
+
Plugins which implement custom items and collectors are encouraged to replace
|
|
38
|
+
``fspath`` parameters (``py.path.local``) with ``path`` parameters
|
|
39
|
+
(``pathlib.Path``), and drop any other usage of the ``py`` library if possible.
|
|
40
|
+
|
|
41
|
+
If possible, plugins with custom items should use :ref:`cooperative
|
|
42
|
+
constructors <uncooperative-constructors-deprecated>` to avoid hardcoding
|
|
43
|
+
arguments they only pass on to the superclass.
|
|
44
|
+
|
|
45
|
+
.. note::
|
|
46
|
+
The name of the :class:`~_pytest.nodes.Node` arguments and attributes (the
|
|
47
|
+
new attribute being ``path``) is **the opposite** of the situation for
|
|
48
|
+
hooks, :ref:`outlined below <legacy-path-hooks-deprecated>` (the old
|
|
49
|
+
argument being ``path``).
|
|
50
|
+
|
|
51
|
+
This is an unfortunate artifact due to historical reasons, which should be
|
|
52
|
+
resolved in future versions as we slowly get rid of the :pypi:`py`
|
|
53
|
+
dependency (see :issue:`9283` for a longer discussion).
|
|
54
|
+
|
|
55
|
+
Due to the ongoing migration of methods like :meth:`~pytest.Item.reportinfo`
|
|
56
|
+
which still is expected to return a ``py.path.local`` object, nodes still have
|
|
57
|
+
both ``fspath`` (``py.path.local``) and ``path`` (``pathlib.Path``) attributes,
|
|
58
|
+
no matter what argument was used in the constructor. We expect to deprecate the
|
|
59
|
+
``fspath`` attribute in a future release.
|
|
60
|
+
|
|
23
61
|
|
|
24
62
|
Configuring hook specs/impls using markers
|
|
25
63
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
@@ -62,6 +100,33 @@ Changed ``hookwrapper`` attributes:
|
|
|
62
100
|
* ``historic``
|
|
63
101
|
|
|
64
102
|
|
|
103
|
+
.. _legacy-path-hooks-deprecated:
|
|
104
|
+
|
|
105
|
+
``py.path.local`` arguments for hooks replaced with ``pathlib.Path``
|
|
106
|
+
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
107
|
+
|
|
108
|
+
.. deprecated:: 7.0
|
|
109
|
+
|
|
110
|
+
In order to support the transition from ``py.path.local`` to :mod:`pathlib`, the following hooks now receive additional arguments:
|
|
111
|
+
|
|
112
|
+
* :hook:`pytest_ignore_collect(collection_path: pathlib.Path) <pytest_ignore_collect>` as equivalent to ``path``
|
|
113
|
+
* :hook:`pytest_collect_file(file_path: pathlib.Path) <pytest_collect_file>` as equivalent to ``path``
|
|
114
|
+
* :hook:`pytest_pycollect_makemodule(module_path: pathlib.Path) <pytest_pycollect_makemodule>` as equivalent to ``path``
|
|
115
|
+
* :hook:`pytest_report_header(start_path: pathlib.Path) <pytest_report_header>` as equivalent to ``startdir``
|
|
116
|
+
* :hook:`pytest_report_collectionfinish(start_path: pathlib.Path) <pytest_report_collectionfinish>` as equivalent to ``startdir``
|
|
117
|
+
|
|
118
|
+
The accompanying ``py.path.local`` based paths have been deprecated: plugins which manually invoke those hooks should only pass the new ``pathlib.Path`` arguments, and users should change their hook implementations to use the new ``pathlib.Path`` arguments.
|
|
119
|
+
|
|
120
|
+
.. note::
|
|
121
|
+
The name of the :class:`~_pytest.nodes.Node` arguments and attributes,
|
|
122
|
+
:ref:`outlined above <node-ctor-fspath-deprecation>` (the new attribute
|
|
123
|
+
being ``path``) is **the opposite** of the situation for hooks (the old
|
|
124
|
+
argument being ``path``).
|
|
125
|
+
|
|
126
|
+
This is an unfortunate artifact due to historical reasons, which should be
|
|
127
|
+
resolved in future versions as we slowly get rid of the :pypi:`py`
|
|
128
|
+
dependency (see :issue:`9283` for a longer discussion).
|
|
129
|
+
|
|
65
130
|
Directly constructing internal classes
|
|
66
131
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
67
132
|
|
|
@@ -208,73 +273,6 @@ an appropriate period of deprecation has passed.
|
|
|
208
273
|
|
|
209
274
|
Some breaking changes which could not be deprecated are also listed.
|
|
210
275
|
|
|
211
|
-
.. _node-ctor-fspath-deprecation:
|
|
212
|
-
|
|
213
|
-
``fspath`` argument for Node constructors replaced with ``pathlib.Path``
|
|
214
|
-
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
215
|
-
|
|
216
|
-
.. deprecated:: 7.0
|
|
217
|
-
|
|
218
|
-
In order to support the transition from ``py.path.local`` to :mod:`pathlib`,
|
|
219
|
-
the ``fspath`` argument to :class:`~_pytest.nodes.Node` constructors like
|
|
220
|
-
:func:`pytest.Function.from_parent()` and :func:`pytest.Class.from_parent()`
|
|
221
|
-
is now deprecated.
|
|
222
|
-
|
|
223
|
-
Plugins which construct nodes should pass the ``path`` argument, of type
|
|
224
|
-
:class:`pathlib.Path`, instead of the ``fspath`` argument.
|
|
225
|
-
|
|
226
|
-
Plugins which implement custom items and collectors are encouraged to replace
|
|
227
|
-
``fspath`` parameters (``py.path.local``) with ``path`` parameters
|
|
228
|
-
(``pathlib.Path``), and drop any other usage of the ``py`` library if possible.
|
|
229
|
-
|
|
230
|
-
If possible, plugins with custom items should use :ref:`cooperative
|
|
231
|
-
constructors <uncooperative-constructors-deprecated>` to avoid hardcoding
|
|
232
|
-
arguments they only pass on to the superclass.
|
|
233
|
-
|
|
234
|
-
.. note::
|
|
235
|
-
The name of the :class:`~_pytest.nodes.Node` arguments and attributes (the
|
|
236
|
-
new attribute being ``path``) is **the opposite** of the situation for
|
|
237
|
-
hooks, :ref:`outlined below <legacy-path-hooks-deprecated>` (the old
|
|
238
|
-
argument being ``path``).
|
|
239
|
-
|
|
240
|
-
This is an unfortunate artifact due to historical reasons, which should be
|
|
241
|
-
resolved in future versions as we slowly get rid of the :pypi:`py`
|
|
242
|
-
dependency (see :issue:`9283` for a longer discussion).
|
|
243
|
-
|
|
244
|
-
Due to the ongoing migration of methods like :meth:`~pytest.Item.reportinfo`
|
|
245
|
-
which still is expected to return a ``py.path.local`` object, nodes still have
|
|
246
|
-
both ``fspath`` (``py.path.local``) and ``path`` (``pathlib.Path``) attributes,
|
|
247
|
-
no matter what argument was used in the constructor. We expect to deprecate the
|
|
248
|
-
``fspath`` attribute in a future release.
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
``py.path.local`` arguments for hooks replaced with ``pathlib.Path``
|
|
252
|
-
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
253
|
-
|
|
254
|
-
.. deprecated:: 7.0
|
|
255
|
-
.. versionremoved:: 8.0
|
|
256
|
-
|
|
257
|
-
In order to support the transition from ``py.path.local`` to :mod:`pathlib`, the following hooks now receive additional arguments:
|
|
258
|
-
|
|
259
|
-
* :hook:`pytest_ignore_collect(collection_path: pathlib.Path) <pytest_ignore_collect>` as equivalent to ``path``
|
|
260
|
-
* :hook:`pytest_collect_file(file_path: pathlib.Path) <pytest_collect_file>` as equivalent to ``path``
|
|
261
|
-
* :hook:`pytest_pycollect_makemodule(module_path: pathlib.Path) <pytest_pycollect_makemodule>` as equivalent to ``path``
|
|
262
|
-
* :hook:`pytest_report_header(start_path: pathlib.Path) <pytest_report_header>` as equivalent to ``startdir``
|
|
263
|
-
* :hook:`pytest_report_collectionfinish(start_path: pathlib.Path) <pytest_report_collectionfinish>` as equivalent to ``startdir``
|
|
264
|
-
|
|
265
|
-
The accompanying ``py.path.local`` based paths have been deprecated: plugins which manually invoke those hooks should only pass the new ``pathlib.Path`` arguments, and users should change their hook implementations to use the new ``pathlib.Path`` arguments.
|
|
266
|
-
|
|
267
|
-
.. note::
|
|
268
|
-
The name of the :class:`~_pytest.nodes.Node` arguments and attributes,
|
|
269
|
-
:ref:`outlined above <node-ctor-fspath-deprecation>` (the new attribute
|
|
270
|
-
being ``path``) is **the opposite** of the situation for hooks (the old
|
|
271
|
-
argument being ``path``).
|
|
272
|
-
|
|
273
|
-
This is an unfortunate artifact due to historical reasons, which should be
|
|
274
|
-
resolved in future versions as we slowly get rid of the :pypi:`py`
|
|
275
|
-
dependency (see :issue:`9283` for a longer discussion).
|
|
276
|
-
|
|
277
|
-
|
|
278
276
|
.. _nose-deprecation:
|
|
279
277
|
|
|
280
278
|
Support for tests written for nose
|
|
@@ -162,7 +162,7 @@ objects, they are still using the default pytest representation:
|
|
|
162
162
|
rootdir: /home/sweet/project
|
|
163
163
|
collected 8 items
|
|
164
164
|
|
|
165
|
-
<Dir parametrize.rst-
|
|
165
|
+
<Dir parametrize.rst-197>
|
|
166
166
|
<Module test_time.py>
|
|
167
167
|
<Function test_timedistance_v0[a0-b0-expected0]>
|
|
168
168
|
<Function test_timedistance_v0[a1-b1-expected1]>
|
|
@@ -239,7 +239,7 @@ If you just collect tests you'll also nicely see 'advanced' and 'basic' as varia
|
|
|
239
239
|
rootdir: /home/sweet/project
|
|
240
240
|
collected 4 items
|
|
241
241
|
|
|
242
|
-
<Dir parametrize.rst-
|
|
242
|
+
<Dir parametrize.rst-197>
|
|
243
243
|
<Module test_scenarios.py>
|
|
244
244
|
<Class TestSampleWithScenarios>
|
|
245
245
|
<Function test_demo1[basic]>
|
|
@@ -318,7 +318,7 @@ Let's first see how it looks like at collection time:
|
|
|
318
318
|
rootdir: /home/sweet/project
|
|
319
319
|
collected 2 items
|
|
320
320
|
|
|
321
|
-
<Dir parametrize.rst-
|
|
321
|
+
<Dir parametrize.rst-197>
|
|
322
322
|
<Module test_backends.py>
|
|
323
323
|
<Function test_db_initialized[d1]>
|
|
324
324
|
<Function test_db_initialized[d2]>
|
|
@@ -152,7 +152,7 @@ The test collection would look like this:
|
|
|
152
152
|
configfile: pytest.ini
|
|
153
153
|
collected 2 items
|
|
154
154
|
|
|
155
|
-
<Dir pythoncollection.rst-
|
|
155
|
+
<Dir pythoncollection.rst-198>
|
|
156
156
|
<Module check_myapp.py>
|
|
157
157
|
<Class CheckMyApp>
|
|
158
158
|
<Function simple_check>
|
|
@@ -215,7 +215,7 @@ You can always peek at the collection tree without running tests like this:
|
|
|
215
215
|
configfile: pytest.ini
|
|
216
216
|
collected 3 items
|
|
217
217
|
|
|
218
|
-
<Dir pythoncollection.rst-
|
|
218
|
+
<Dir pythoncollection.rst-198>
|
|
219
219
|
<Dir CWD>
|
|
220
220
|
<Module pythoncollection.py>
|
|
221
221
|
<Function test_function>
|
|
@@ -52,10 +52,9 @@ Plugins
|
|
|
52
52
|
|
|
53
53
|
Rerunning any failed tests can mitigate the negative effects of flaky tests by giving them additional chances to pass, so that the overall build does not fail. Several pytest plugins support this:
|
|
54
54
|
|
|
55
|
-
* `flaky <https://github.com/box/flaky>`_
|
|
56
|
-
* `pytest-flakefinder <https://github.com/dropbox/pytest-flakefinder>`_ - `blog post <https://blogs.dropbox.com/tech/2016/03/open-sourcing-pytest-tools/>`_
|
|
57
55
|
* `pytest-rerunfailures <https://github.com/pytest-dev/pytest-rerunfailures>`_
|
|
58
56
|
* `pytest-replay <https://github.com/ESSS/pytest-replay>`_: This plugin helps to reproduce locally crashes or flaky tests observed during CI runs.
|
|
57
|
+
* `pytest-flakefinder <https://github.com/dropbox/pytest-flakefinder>`_ - `blog post <https://blogs.dropbox.com/tech/2016/03/open-sourcing-pytest-tools/>`_
|
|
59
58
|
|
|
60
59
|
Plugins to deliberately randomize tests can help expose tests with state problems:
|
|
61
60
|
|
|
@@ -106,7 +105,7 @@ This is a limited list, please submit an issue or pull request to expand it!
|
|
|
106
105
|
* Gao, Zebao, Yalan Liang, Myra B. Cohen, Atif M. Memon, and Zhen Wang. "Making system user interactive tests repeatable: When and what should we control?." In *Software Engineering (ICSE), 2015 IEEE/ACM 37th IEEE International Conference on*, vol. 1, pp. 55-65. IEEE, 2015. `PDF <http://www.cs.umd.edu/~atif/pubs/gao-icse15.pdf>`__
|
|
107
106
|
* Palomba, Fabio, and Andy Zaidman. "Does refactoring of test smells induce fixing flaky tests?." In *Software Maintenance and Evolution (ICSME), 2017 IEEE International Conference on*, pp. 1-12. IEEE, 2017. `PDF in Google Drive <https://drive.google.com/file/d/10HdcCQiuQVgW3yYUJD-TSTq1NbYEprl0/view>`__
|
|
108
107
|
* Bell, Jonathan, Owolabi Legunsen, Michael Hilton, Lamyaa Eloussi, Tifany Yung, and Darko Marinov. "DeFlaker: Automatically detecting flaky tests." In *Proceedings of the 2018 International Conference on Software Engineering*. 2018. `PDF <https://www.jonbell.net/icse18-deflaker.pdf>`__
|
|
109
|
-
|
|
108
|
+
* Dutta, Saikat and Shi, August and Choudhary, Rutvik and Zhang, Zhekun and Jain, Aryaman and Misailovic, Sasa. "Detecting flaky tests in probabilistic and machine learning applications." In *Proceedings of the 29th ACM SIGSOFT International Symposium on Software Testing and Analysis (ISSTA)*, pp. 211-224. ACM, 2020. `PDF <https://www.cs.cornell.edu/~saikatd/papers/flash-issta20.pdf>`__
|
|
110
109
|
|
|
111
110
|
Resources
|
|
112
111
|
^^^^^^^^^
|
|
@@ -1418,7 +1418,7 @@ Running the above tests results in the following test IDs being used:
|
|
|
1418
1418
|
rootdir: /home/sweet/project
|
|
1419
1419
|
collected 12 items
|
|
1420
1420
|
|
|
1421
|
-
<Dir fixtures.rst-
|
|
1421
|
+
<Dir fixtures.rst-216>
|
|
1422
1422
|
<Module test_anothersmtp.py>
|
|
1423
1423
|
<Function test_showhelo[smtp.gmail.com]>
|
|
1424
1424
|
<Function test_showhelo[mail.python.org]>
|
|
@@ -100,7 +100,7 @@ object, the wrapper may modify that result, but it's probably better to avoid it
|
|
|
100
100
|
|
|
101
101
|
If the hook implementation failed with an exception, the wrapper can handle that
|
|
102
102
|
exception using a ``try-catch-finally`` around the ``yield``, by propagating it,
|
|
103
|
-
|
|
103
|
+
suppressing it, or raising a different exception entirely.
|
|
104
104
|
|
|
105
105
|
For more information, consult the
|
|
106
106
|
:ref:`pluggy documentation about hook wrappers <pluggy:hookwrappers>`.
|
|
@@ -5,7 +5,8 @@
|
|
|
5
5
|
- `Professional Testing with Python <https://python-academy.com/courses/python_course_testing.html>`_, via `Python Academy <https://www.python-academy.com/>`_ (3 day in-depth training):
|
|
6
6
|
* **June 11th to 13th 2024**, Remote
|
|
7
7
|
* **March 4th to 6th 2025**, Leipzig, Germany / Remote
|
|
8
|
-
- `pytest development sprint <https://github.com/pytest-dev/pytest/discussions/11655>`_, June
|
|
8
|
+
- `pytest development sprint <https://github.com/pytest-dev/pytest/discussions/11655>`_, **June 17th -- 22nd 2024**
|
|
9
|
+
- pytest tips and tricks for a better testsuite, `Europython 2024 <https://ep2024.europython.eu/>`_, **July 8th -- 14th 2024** (3h), Prague
|
|
9
10
|
|
|
10
11
|
Also see :doc:`previous talks and blogposts <talks>`.
|
|
11
12
|
|
|
@@ -87,7 +88,7 @@ Features
|
|
|
87
88
|
Documentation
|
|
88
89
|
-------------
|
|
89
90
|
|
|
90
|
-
* :ref:`Get started <get-started>` - install pytest and grasp its basics just twenty minutes
|
|
91
|
+
* :ref:`Get started <get-started>` - install pytest and grasp its basics in just twenty minutes
|
|
91
92
|
* :ref:`How-to guides <how-to>` - step-by-step guides, covering a vast range of use-cases and needs
|
|
92
93
|
* :ref:`Reference guides <reference>` - includes the complete pytest API reference, lists of plugins and more
|
|
93
94
|
* :ref:`Explanation <explanation>` - background, discussion of key topics, answers to higher-level questions
|
|
@@ -788,6 +788,8 @@ class ExceptionInfo(Generic[E]):
|
|
|
788
788
|
If `None`, will search for a matching exception at any nesting depth.
|
|
789
789
|
If >= 1, will only match an exception if it's at the specified depth (depth = 1 being
|
|
790
790
|
the exceptions contained within the topmost exception group).
|
|
791
|
+
|
|
792
|
+
.. versionadded:: 8.0
|
|
791
793
|
"""
|
|
792
794
|
msg = "Captured exception is not an instance of `BaseExceptionGroup`"
|
|
793
795
|
assert isinstance(self.value, BaseExceptionGroup), msg
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
# mypy: allow-untyped-defs
|
|
2
2
|
"""Python version compatibility code."""
|
|
3
|
+
|
|
3
4
|
from __future__ import annotations
|
|
4
5
|
|
|
5
6
|
import dataclasses
|
|
@@ -16,6 +17,22 @@ from typing import Callable
|
|
|
16
17
|
from typing import Final
|
|
17
18
|
from typing import NoReturn
|
|
18
19
|
|
|
20
|
+
import py
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
#: constant to prepare valuing pylib path replacements/lazy proxies later on
|
|
24
|
+
# intended for removal in pytest 8.0 or 9.0
|
|
25
|
+
|
|
26
|
+
# fmt: off
|
|
27
|
+
# intentional space to create a fake difference for the verification
|
|
28
|
+
LEGACY_PATH = py.path. local
|
|
29
|
+
# fmt: on
|
|
30
|
+
|
|
31
|
+
|
|
32
|
+
def legacy_path(path: str | os.PathLike[str]) -> LEGACY_PATH:
|
|
33
|
+
"""Internal wrapper to prepare lazy proxies for legacy_path instances"""
|
|
34
|
+
return LEGACY_PATH(path)
|
|
35
|
+
|
|
19
36
|
|
|
20
37
|
# fmt: off
|
|
21
38
|
# Singleton type for NOTSET, as described in:
|
|
@@ -38,12 +38,14 @@ from typing import TYPE_CHECKING
|
|
|
38
38
|
from typing import Union
|
|
39
39
|
import warnings
|
|
40
40
|
|
|
41
|
+
import pluggy
|
|
41
42
|
from pluggy import HookimplMarker
|
|
42
43
|
from pluggy import HookimplOpts
|
|
43
44
|
from pluggy import HookspecMarker
|
|
44
45
|
from pluggy import HookspecOpts
|
|
45
46
|
from pluggy import PluginManager
|
|
46
47
|
|
|
48
|
+
from .compat import PathAwareHookProxy
|
|
47
49
|
from .exceptions import PrintHelp as PrintHelp
|
|
48
50
|
from .exceptions import UsageError as UsageError
|
|
49
51
|
from .findpaths import determine_setup
|
|
@@ -1068,7 +1070,7 @@ class Config:
|
|
|
1068
1070
|
self._store = self.stash
|
|
1069
1071
|
|
|
1070
1072
|
self.trace = self.pluginmanager.trace.root.get("config")
|
|
1071
|
-
self.hook = self.pluginmanager.hook # type: ignore[assignment]
|
|
1073
|
+
self.hook: pluggy.HookRelay = PathAwareHookProxy(self.pluginmanager.hook) # type: ignore[assignment]
|
|
1072
1074
|
self._inicache: Dict[str, Any] = {}
|
|
1073
1075
|
self._override_ini: Sequence[str] = ()
|
|
1074
1076
|
self._opt2dest: Dict[str, str] = {}
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
import functools
|
|
4
|
+
from pathlib import Path
|
|
5
|
+
from typing import Any
|
|
6
|
+
from typing import Mapping
|
|
7
|
+
import warnings
|
|
8
|
+
|
|
9
|
+
import pluggy
|
|
10
|
+
|
|
11
|
+
from ..compat import LEGACY_PATH
|
|
12
|
+
from ..compat import legacy_path
|
|
13
|
+
from ..deprecated import HOOK_LEGACY_PATH_ARG
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
# hookname: (Path, LEGACY_PATH)
|
|
17
|
+
imply_paths_hooks: Mapping[str, tuple[str, str]] = {
|
|
18
|
+
"pytest_ignore_collect": ("collection_path", "path"),
|
|
19
|
+
"pytest_collect_file": ("file_path", "path"),
|
|
20
|
+
"pytest_pycollect_makemodule": ("module_path", "path"),
|
|
21
|
+
"pytest_report_header": ("start_path", "startdir"),
|
|
22
|
+
"pytest_report_collectionfinish": ("start_path", "startdir"),
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
def _check_path(path: Path, fspath: LEGACY_PATH) -> None:
|
|
27
|
+
if Path(fspath) != path:
|
|
28
|
+
raise ValueError(
|
|
29
|
+
f"Path({fspath!r}) != {path!r}\n"
|
|
30
|
+
"if both path and fspath are given they need to be equal"
|
|
31
|
+
)
|
|
32
|
+
|
|
33
|
+
|
|
34
|
+
class PathAwareHookProxy:
|
|
35
|
+
"""
|
|
36
|
+
this helper wraps around hook callers
|
|
37
|
+
until pluggy supports fixingcalls, this one will do
|
|
38
|
+
|
|
39
|
+
it currently doesn't return full hook caller proxies for fixed hooks,
|
|
40
|
+
this may have to be changed later depending on bugs
|
|
41
|
+
"""
|
|
42
|
+
|
|
43
|
+
def __init__(self, hook_relay: pluggy.HookRelay) -> None:
|
|
44
|
+
self._hook_relay = hook_relay
|
|
45
|
+
|
|
46
|
+
def __dir__(self) -> list[str]:
|
|
47
|
+
return dir(self._hook_relay)
|
|
48
|
+
|
|
49
|
+
def __getattr__(self, key: str) -> pluggy.HookCaller:
|
|
50
|
+
hook: pluggy.HookCaller = getattr(self._hook_relay, key)
|
|
51
|
+
if key not in imply_paths_hooks:
|
|
52
|
+
self.__dict__[key] = hook
|
|
53
|
+
return hook
|
|
54
|
+
else:
|
|
55
|
+
path_var, fspath_var = imply_paths_hooks[key]
|
|
56
|
+
|
|
57
|
+
@functools.wraps(hook)
|
|
58
|
+
def fixed_hook(**kw: Any) -> Any:
|
|
59
|
+
path_value: Path | None = kw.pop(path_var, None)
|
|
60
|
+
fspath_value: LEGACY_PATH | None = kw.pop(fspath_var, None)
|
|
61
|
+
if fspath_value is not None:
|
|
62
|
+
warnings.warn(
|
|
63
|
+
HOOK_LEGACY_PATH_ARG.format(
|
|
64
|
+
pylib_path_arg=fspath_var, pathlib_path_arg=path_var
|
|
65
|
+
),
|
|
66
|
+
stacklevel=2,
|
|
67
|
+
)
|
|
68
|
+
if path_value is not None:
|
|
69
|
+
if fspath_value is not None:
|
|
70
|
+
_check_path(path_value, fspath_value)
|
|
71
|
+
else:
|
|
72
|
+
fspath_value = legacy_path(path_value)
|
|
73
|
+
else:
|
|
74
|
+
assert fspath_value is not None
|
|
75
|
+
path_value = Path(fspath_value)
|
|
76
|
+
|
|
77
|
+
kw[path_var] = path_value
|
|
78
|
+
kw[fspath_var] = fspath_value
|
|
79
|
+
return hook(**kw)
|
|
80
|
+
|
|
81
|
+
fixed_hook.name = hook.name # type: ignore[attr-defined]
|
|
82
|
+
fixed_hook.spec = hook.spec # type: ignore[attr-defined]
|
|
83
|
+
fixed_hook.__name__ = key
|
|
84
|
+
self.__dict__[key] = fixed_hook
|
|
85
|
+
return fixed_hook # type: ignore[return-value]
|
|
@@ -36,6 +36,21 @@ YIELD_FIXTURE = PytestDeprecationWarning(
|
|
|
36
36
|
PRIVATE = PytestDeprecationWarning("A private pytest class or function was used.")
|
|
37
37
|
|
|
38
38
|
|
|
39
|
+
HOOK_LEGACY_PATH_ARG = UnformattedWarning(
|
|
40
|
+
PytestRemovedIn9Warning,
|
|
41
|
+
"The ({pylib_path_arg}: py.path.local) argument is deprecated, please use ({pathlib_path_arg}: pathlib.Path)\n"
|
|
42
|
+
"see https://docs.pytest.org/en/latest/deprecations.html"
|
|
43
|
+
"#py-path-local-arguments-for-hooks-replaced-with-pathlib-path",
|
|
44
|
+
)
|
|
45
|
+
|
|
46
|
+
NODE_CTOR_FSPATH_ARG = UnformattedWarning(
|
|
47
|
+
PytestRemovedIn9Warning,
|
|
48
|
+
"The (fspath: py.path.local) argument to {node_type_name} is deprecated. "
|
|
49
|
+
"Please use the (path: pathlib.Path) argument instead.\n"
|
|
50
|
+
"See https://docs.pytest.org/en/latest/deprecations.html"
|
|
51
|
+
"#fspath-argument-for-node-constructors-replaced-with-pathlib-path",
|
|
52
|
+
)
|
|
53
|
+
|
|
39
54
|
HOOK_LEGACY_MARKING = UnformattedWarning(
|
|
40
55
|
PytestDeprecationWarning,
|
|
41
56
|
"The hook{type} {fullname} uses old-style configuration options (marks or attributes).\n"
|