pytest 7.4.2__tar.gz → 7.4.4__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-7.4.2 → pytest-7.4.4}/.github/workflows/deploy.yml +5 -3
- {pytest-7.4.2 → pytest-7.4.4}/.github/workflows/test.yml +1 -1
- {pytest-7.4.2 → pytest-7.4.4}/.readthedocs.yml +4 -0
- {pytest-7.4.2 → pytest-7.4.4}/AUTHORS +5 -0
- {pytest-7.4.2/src/pytest.egg-info → pytest-7.4.4}/PKG-INFO +1 -1
- {pytest-7.4.2 → pytest-7.4.4}/RELEASING.rst +2 -1
- {pytest-7.4.2 → pytest-7.4.4}/changelog/README.rst +1 -1
- {pytest-7.4.2 → pytest-7.4.4}/doc/en/announce/index.rst +2 -0
- pytest-7.4.4/doc/en/announce/release-7.4.3.rst +19 -0
- pytest-7.4.4/doc/en/announce/release-7.4.4.rst +20 -0
- {pytest-7.4.2 → pytest-7.4.4}/doc/en/changelog.rst +40 -0
- {pytest-7.4.2 → pytest-7.4.4}/doc/en/deprecations.rst +1 -1
- {pytest-7.4.2 → pytest-7.4.4}/doc/en/example/markers.rst +1 -1
- {pytest-7.4.2 → pytest-7.4.4}/doc/en/example/simple.rst +1 -1
- {pytest-7.4.2 → pytest-7.4.4}/doc/en/getting-started.rst +1 -1
- {pytest-7.4.2 → pytest-7.4.4}/doc/en/how-to/output.rst +1 -1
- {pytest-7.4.2 → pytest-7.4.4}/doc/en/reference/customize.rst +1 -1
- {pytest-7.4.2 → pytest-7.4.4}/doc/en/reference/reference.rst +3 -1
- {pytest-7.4.2 → pytest-7.4.4}/scripts/prepare-release-pr.py +15 -3
- pytest-7.4.4/src/_pytest/_version.py +16 -0
- {pytest-7.4.2 → pytest-7.4.4}/src/_pytest/assertion/rewrite.py +50 -18
- {pytest-7.4.2 → pytest-7.4.4}/src/_pytest/assertion/util.py +1 -1
- {pytest-7.4.2 → pytest-7.4.4}/src/_pytest/compat.py +17 -8
- {pytest-7.4.2 → pytest-7.4.4}/src/_pytest/faulthandler.py +15 -8
- {pytest-7.4.2 → pytest-7.4.4}/src/_pytest/junitxml.py +1 -1
- {pytest-7.4.2 → pytest-7.4.4}/src/_pytest/mark/structures.py +3 -1
- {pytest-7.4.2 → pytest-7.4.4}/src/_pytest/nodes.py +1 -1
- {pytest-7.4.2 → pytest-7.4.4}/src/_pytest/outcomes.py +1 -1
- {pytest-7.4.2 → pytest-7.4.4}/src/_pytest/pathlib.py +3 -2
- {pytest-7.4.2 → pytest-7.4.4}/src/_pytest/pytester.py +1 -1
- {pytest-7.4.2 → pytest-7.4.4/src/pytest.egg-info}/PKG-INFO +1 -1
- {pytest-7.4.2 → pytest-7.4.4}/src/pytest.egg-info/SOURCES.txt +2 -0
- {pytest-7.4.2 → pytest-7.4.4}/testing/_py/test_local.py +3 -0
- {pytest-7.4.2 → pytest-7.4.4}/testing/conftest.py +9 -0
- {pytest-7.4.2 → pytest-7.4.4}/testing/logging/test_fixture.py +33 -23
- {pytest-7.4.2 → pytest-7.4.4}/testing/python/metafunc.py +1 -1
- {pytest-7.4.2 → pytest-7.4.4}/testing/test_assertrewrite.py +55 -0
- {pytest-7.4.2 → pytest-7.4.4}/testing/test_collection.py +23 -0
- {pytest-7.4.2 → pytest-7.4.4}/testing/test_mark.py +36 -1
- {pytest-7.4.2 → pytest-7.4.4}/testing/test_parseopt.py +2 -1
- {pytest-7.4.2 → pytest-7.4.4}/testing/test_pathlib.py +21 -0
- pytest-7.4.2/src/_pytest/_version.py +0 -4
- {pytest-7.4.2 → pytest-7.4.4}/.coveragerc +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/.gitattributes +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/.gitblameignore +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/.github/FUNDING.yml +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/.github/ISSUE_TEMPLATE/1_bug_report.md +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/.github/ISSUE_TEMPLATE/2_feature_request.md +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/.github/ISSUE_TEMPLATE/config.yml +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/.github/config.yml +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/.github/dependabot.yml +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/.github/labels.toml +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/.github/workflows/backport.yml +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/.github/workflows/prepare-release-pr.yml +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/.github/workflows/stale.yml +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/.github/workflows/update-plugin-list.yml +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/.gitignore +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/.pre-commit-config.yaml +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/CHANGELOG.rst +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/CITATION +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/CODE_OF_CONDUCT.md +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/CONTRIBUTING.rst +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/LICENSE +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/OPENCOLLECTIVE.rst +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/README.rst +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/TIDELIFT.rst +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/bench/bench.py +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/bench/bench_argcomplete.py +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/bench/empty.py +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/bench/manyparam.py +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/bench/skip.py +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/bench/unit_test.py +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/bench/xunit.py +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/changelog/_template.rst +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/codecov.yml +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/doc/en/Makefile +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/doc/en/_templates/globaltoc.html +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/doc/en/_templates/layout.html +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/doc/en/_templates/links.html +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/doc/en/_templates/relations.html +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/doc/en/_templates/sidebarintro.html +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/doc/en/_templates/slim_searchbox.html +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/doc/en/adopt.rst +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/doc/en/announce/release-2.0.0.rst +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/doc/en/announce/release-2.0.1.rst +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/doc/en/announce/release-2.0.2.rst +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/doc/en/announce/release-2.0.3.rst +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/doc/en/announce/release-2.1.0.rst +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/doc/en/announce/release-2.1.1.rst +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/doc/en/announce/release-2.1.2.rst +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/doc/en/announce/release-2.1.3.rst +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/doc/en/announce/release-2.2.0.rst +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/doc/en/announce/release-2.2.1.rst +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/doc/en/announce/release-2.2.2.rst +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/doc/en/announce/release-2.2.4.rst +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/doc/en/announce/release-2.3.0.rst +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/doc/en/announce/release-2.3.1.rst +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/doc/en/announce/release-2.3.2.rst +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/doc/en/announce/release-2.3.3.rst +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/doc/en/announce/release-2.3.4.rst +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/doc/en/announce/release-2.3.5.rst +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/doc/en/announce/release-2.4.0.rst +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/doc/en/announce/release-2.4.1.rst +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/doc/en/announce/release-2.4.2.rst +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/doc/en/announce/release-2.5.0.rst +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/doc/en/announce/release-2.5.1.rst +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/doc/en/announce/release-2.5.2.rst +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/doc/en/announce/release-2.6.0.rst +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/doc/en/announce/release-2.6.1.rst +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/doc/en/announce/release-2.6.2.rst +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/doc/en/announce/release-2.6.3.rst +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/doc/en/announce/release-2.7.0.rst +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/doc/en/announce/release-2.7.1.rst +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/doc/en/announce/release-2.7.2.rst +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/doc/en/announce/release-2.8.2.rst +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/doc/en/announce/release-2.8.3.rst +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/doc/en/announce/release-2.8.4.rst +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/doc/en/announce/release-2.8.5.rst +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/doc/en/announce/release-2.8.6.rst +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/doc/en/announce/release-2.8.7.rst +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/doc/en/announce/release-2.9.0.rst +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/doc/en/announce/release-2.9.1.rst +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/doc/en/announce/release-2.9.2.rst +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/doc/en/announce/release-3.0.0.rst +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/doc/en/announce/release-3.0.1.rst +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/doc/en/announce/release-3.0.2.rst +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/doc/en/announce/release-3.0.3.rst +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/doc/en/announce/release-3.0.4.rst +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/doc/en/announce/release-3.0.5.rst +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/doc/en/announce/release-3.0.6.rst +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/doc/en/announce/release-3.0.7.rst +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/doc/en/announce/release-3.1.0.rst +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/doc/en/announce/release-3.1.1.rst +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/doc/en/announce/release-3.1.2.rst +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/doc/en/announce/release-3.1.3.rst +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/doc/en/announce/release-3.10.0.rst +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/doc/en/announce/release-3.10.1.rst +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/doc/en/announce/release-3.2.0.rst +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/doc/en/announce/release-3.2.1.rst +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/doc/en/announce/release-3.2.2.rst +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/doc/en/announce/release-3.2.3.rst +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/doc/en/announce/release-3.2.4.rst +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/doc/en/announce/release-3.2.5.rst +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/doc/en/announce/release-3.3.0.rst +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/doc/en/announce/release-3.3.1.rst +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/doc/en/announce/release-3.3.2.rst +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/doc/en/announce/release-3.4.0.rst +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/doc/en/announce/release-3.4.1.rst +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/doc/en/announce/release-3.4.2.rst +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/doc/en/announce/release-3.5.0.rst +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/doc/en/announce/release-3.5.1.rst +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/doc/en/announce/release-3.6.0.rst +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/doc/en/announce/release-3.6.1.rst +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/doc/en/announce/release-3.6.2.rst +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/doc/en/announce/release-3.6.3.rst +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/doc/en/announce/release-3.6.4.rst +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/doc/en/announce/release-3.7.0.rst +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/doc/en/announce/release-3.7.1.rst +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/doc/en/announce/release-3.7.2.rst +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/doc/en/announce/release-3.7.3.rst +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/doc/en/announce/release-3.7.4.rst +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/doc/en/announce/release-3.8.0.rst +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/doc/en/announce/release-3.8.1.rst +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/doc/en/announce/release-3.8.2.rst +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/doc/en/announce/release-3.9.0.rst +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/doc/en/announce/release-3.9.1.rst +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/doc/en/announce/release-3.9.2.rst +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/doc/en/announce/release-3.9.3.rst +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/doc/en/announce/release-4.0.0.rst +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/doc/en/announce/release-4.0.1.rst +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/doc/en/announce/release-4.0.2.rst +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/doc/en/announce/release-4.1.0.rst +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/doc/en/announce/release-4.1.1.rst +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/doc/en/announce/release-4.2.0.rst +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/doc/en/announce/release-4.2.1.rst +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/doc/en/announce/release-4.3.0.rst +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/doc/en/announce/release-4.3.1.rst +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/doc/en/announce/release-4.4.0.rst +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/doc/en/announce/release-4.4.1.rst +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/doc/en/announce/release-4.4.2.rst +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/doc/en/announce/release-4.5.0.rst +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/doc/en/announce/release-4.6.0.rst +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/doc/en/announce/release-4.6.1.rst +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/doc/en/announce/release-4.6.2.rst +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/doc/en/announce/release-4.6.3.rst +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/doc/en/announce/release-4.6.4.rst +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/doc/en/announce/release-4.6.5.rst +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/doc/en/announce/release-4.6.6.rst +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/doc/en/announce/release-4.6.7.rst +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/doc/en/announce/release-4.6.8.rst +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/doc/en/announce/release-4.6.9.rst +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/doc/en/announce/release-5.0.0.rst +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/doc/en/announce/release-5.0.1.rst +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/doc/en/announce/release-5.1.0.rst +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/doc/en/announce/release-5.1.1.rst +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/doc/en/announce/release-5.1.2.rst +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/doc/en/announce/release-5.1.3.rst +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/doc/en/announce/release-5.2.0.rst +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/doc/en/announce/release-5.2.1.rst +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/doc/en/announce/release-5.2.2.rst +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/doc/en/announce/release-5.2.3.rst +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/doc/en/announce/release-5.2.4.rst +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/doc/en/announce/release-5.3.0.rst +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/doc/en/announce/release-5.3.1.rst +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/doc/en/announce/release-5.3.2.rst +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/doc/en/announce/release-5.3.3.rst +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/doc/en/announce/release-5.3.4.rst +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/doc/en/announce/release-5.3.5.rst +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/doc/en/announce/release-5.4.0.rst +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/doc/en/announce/release-5.4.1.rst +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/doc/en/announce/release-5.4.2.rst +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/doc/en/announce/release-5.4.3.rst +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/doc/en/announce/release-6.0.0.rst +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/doc/en/announce/release-6.0.0rc1.rst +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/doc/en/announce/release-6.0.1.rst +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/doc/en/announce/release-6.0.2.rst +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/doc/en/announce/release-6.1.0.rst +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/doc/en/announce/release-6.1.1.rst +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/doc/en/announce/release-6.1.2.rst +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/doc/en/announce/release-6.2.0.rst +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/doc/en/announce/release-6.2.1.rst +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/doc/en/announce/release-6.2.2.rst +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/doc/en/announce/release-6.2.3.rst +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/doc/en/announce/release-6.2.4.rst +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/doc/en/announce/release-6.2.5.rst +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/doc/en/announce/release-7.0.0.rst +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/doc/en/announce/release-7.0.0rc1.rst +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/doc/en/announce/release-7.0.1.rst +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/doc/en/announce/release-7.1.0.rst +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/doc/en/announce/release-7.1.1.rst +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/doc/en/announce/release-7.1.2.rst +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/doc/en/announce/release-7.1.3.rst +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/doc/en/announce/release-7.2.0.rst +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/doc/en/announce/release-7.2.1.rst +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/doc/en/announce/release-7.2.2.rst +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/doc/en/announce/release-7.3.0.rst +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/doc/en/announce/release-7.3.1.rst +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/doc/en/announce/release-7.3.2.rst +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/doc/en/announce/release-7.4.0.rst +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/doc/en/announce/release-7.4.1.rst +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/doc/en/announce/release-7.4.2.rst +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/doc/en/announce/sprint2016.rst +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/doc/en/backwards-compatibility.rst +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/doc/en/builtin.rst +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/doc/en/conf.py +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/doc/en/conftest.py +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/doc/en/contact.rst +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/doc/en/contents.rst +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/doc/en/contributing.rst +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/doc/en/development_guide.rst +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/doc/en/example/assertion/failure_demo.py +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/doc/en/example/assertion/global_testmodule_config/conftest.py +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/doc/en/example/assertion/global_testmodule_config/test_hello_world.py +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/doc/en/example/assertion/test_failures.py +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/doc/en/example/assertion/test_setup_flow_example.py +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/doc/en/example/attic.rst +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/doc/en/example/conftest.py +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/doc/en/example/fixtures/fixture_availability.svg +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/doc/en/example/fixtures/fixture_availability_plugins.svg +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/doc/en/example/fixtures/test_fixtures_order_autouse.py +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/doc/en/example/fixtures/test_fixtures_order_autouse.svg +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/doc/en/example/fixtures/test_fixtures_order_autouse_flat.svg +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/doc/en/example/fixtures/test_fixtures_order_autouse_multiple_scopes.py +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/doc/en/example/fixtures/test_fixtures_order_autouse_multiple_scopes.svg +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/doc/en/example/fixtures/test_fixtures_order_autouse_temp_effects.py +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/doc/en/example/fixtures/test_fixtures_order_autouse_temp_effects.svg +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/doc/en/example/fixtures/test_fixtures_order_dependencies.py +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/doc/en/example/fixtures/test_fixtures_order_dependencies.svg +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/doc/en/example/fixtures/test_fixtures_order_dependencies_flat.svg +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/doc/en/example/fixtures/test_fixtures_order_dependencies_unclear.svg +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/doc/en/example/fixtures/test_fixtures_order_scope.py +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/doc/en/example/fixtures/test_fixtures_order_scope.svg +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/doc/en/example/fixtures/test_fixtures_request_different_scope.py +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/doc/en/example/fixtures/test_fixtures_request_different_scope.svg +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/doc/en/example/index.rst +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/doc/en/example/multipython.py +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/doc/en/example/nonpython/__init__.py +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/doc/en/example/nonpython/conftest.py +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/doc/en/example/nonpython/test_simple.yaml +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/doc/en/example/nonpython.rst +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/doc/en/example/parametrize.rst +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/doc/en/example/pythoncollection.py +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/doc/en/example/pythoncollection.rst +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/doc/en/example/reportingdemo.rst +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/doc/en/example/special.rst +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/doc/en/example/xfail_demo.py +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/doc/en/explanation/anatomy.rst +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/doc/en/explanation/fixtures.rst +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/doc/en/explanation/flaky.rst +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/doc/en/explanation/goodpractices.rst +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/doc/en/explanation/index.rst +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/doc/en/explanation/pythonpath.rst +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/doc/en/funcarg_compare.rst +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/doc/en/funcargs.rst +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/doc/en/historical-notes.rst +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/doc/en/history.rst +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/doc/en/how-to/assert.rst +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/doc/en/how-to/bash-completion.rst +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/doc/en/how-to/cache.rst +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/doc/en/how-to/capture-stdout-stderr.rst +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/doc/en/how-to/capture-warnings.rst +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/doc/en/how-to/doctest.rst +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/doc/en/how-to/existingtestsuite.rst +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/doc/en/how-to/failures.rst +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/doc/en/how-to/fixtures.rst +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/doc/en/how-to/index.rst +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/doc/en/how-to/logging.rst +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/doc/en/how-to/mark.rst +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/doc/en/how-to/monkeypatch.rst +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/doc/en/how-to/nose.rst +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/doc/en/how-to/parametrize.rst +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/doc/en/how-to/plugins.rst +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/doc/en/how-to/skipping.rst +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/doc/en/how-to/tmp_path.rst +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/doc/en/how-to/unittest.rst +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/doc/en/how-to/usage.rst +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/doc/en/how-to/writing_hook_functions.rst +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/doc/en/how-to/writing_plugins.rst +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/doc/en/how-to/xunit_setup.rst +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/doc/en/img/cramer2.png +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/doc/en/img/favicon.png +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/doc/en/img/freiburg2.jpg +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/doc/en/img/gaynor3.png +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/doc/en/img/keleshev.png +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/doc/en/img/pullrequest.png +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/doc/en/img/pylib.png +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/doc/en/img/pytest1.png +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/doc/en/img/pytest_logo_curves.svg +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/doc/en/img/theuni.png +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/doc/en/index.rst +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/doc/en/license.rst +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/doc/en/naming20.rst +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/doc/en/proposals/parametrize_with_fixtures.rst +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/doc/en/pytest.ini +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/doc/en/recwarn.rst +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/doc/en/reference/exit-codes.rst +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/doc/en/reference/fixtures.rst +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/doc/en/reference/index.rst +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/doc/en/reference/plugin_list.rst +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/doc/en/requirements.txt +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/doc/en/sponsor.rst +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/doc/en/talks.rst +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/doc/en/tidelift.rst +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/doc/en/yieldfixture.rst +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/extra/get_issues.py +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/pyproject.toml +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/scripts/publish-gh-release-notes.py +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/scripts/release.major.rst +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/scripts/release.minor.rst +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/scripts/release.patch.rst +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/scripts/release.pre.rst +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/scripts/release.py +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/scripts/towncrier-draft-to-file.py +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/scripts/update-plugin-list.py +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/setup.cfg +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/setup.py +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/src/_pytest/__init__.py +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/src/_pytest/_argcomplete.py +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/src/_pytest/_code/__init__.py +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/src/_pytest/_code/code.py +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/src/_pytest/_code/source.py +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/src/_pytest/_io/__init__.py +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/src/_pytest/_io/saferepr.py +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/src/_pytest/_io/terminalwriter.py +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/src/_pytest/_io/wcwidth.py +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/src/_pytest/_py/__init__.py +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/src/_pytest/_py/error.py +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/src/_pytest/_py/path.py +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/src/_pytest/assertion/__init__.py +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/src/_pytest/assertion/truncate.py +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/src/_pytest/cacheprovider.py +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/src/_pytest/capture.py +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/src/_pytest/config/__init__.py +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/src/_pytest/config/argparsing.py +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/src/_pytest/config/compat.py +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/src/_pytest/config/exceptions.py +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/src/_pytest/config/findpaths.py +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/src/_pytest/debugging.py +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/src/_pytest/deprecated.py +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/src/_pytest/doctest.py +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/src/_pytest/fixtures.py +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/src/_pytest/freeze_support.py +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/src/_pytest/helpconfig.py +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/src/_pytest/hookspec.py +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/src/_pytest/legacypath.py +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/src/_pytest/logging.py +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/src/_pytest/main.py +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/src/_pytest/mark/__init__.py +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/src/_pytest/mark/expression.py +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/src/_pytest/monkeypatch.py +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/src/_pytest/nose.py +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/src/_pytest/pastebin.py +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/src/_pytest/py.typed +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/src/_pytest/pytester_assertions.py +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/src/_pytest/python.py +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/src/_pytest/python_api.py +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/src/_pytest/python_path.py +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/src/_pytest/recwarn.py +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/src/_pytest/reports.py +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/src/_pytest/runner.py +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/src/_pytest/scope.py +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/src/_pytest/setuponly.py +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/src/_pytest/setupplan.py +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/src/_pytest/skipping.py +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/src/_pytest/stash.py +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/src/_pytest/stepwise.py +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/src/_pytest/terminal.py +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/src/_pytest/threadexception.py +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/src/_pytest/timing.py +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/src/_pytest/tmpdir.py +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/src/_pytest/unittest.py +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/src/_pytest/unraisableexception.py +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/src/_pytest/warning_types.py +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/src/_pytest/warnings.py +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/src/py.py +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/src/pytest/__init__.py +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/src/pytest/__main__.py +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/src/pytest/py.typed +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/src/pytest.egg-info/dependency_links.txt +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/src/pytest.egg-info/entry_points.txt +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/src/pytest.egg-info/not-zip-safe +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/src/pytest.egg-info/requires.txt +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/src/pytest.egg-info/top_level.txt +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/testing/acceptance_test.py +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/testing/code/test_code.py +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/testing/code/test_excinfo.py +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/testing/code/test_source.py +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/testing/deprecated_test.py +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/testing/example_scripts/README.rst +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/testing/example_scripts/__init__.py +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/testing/example_scripts/acceptance/fixture_mock_integration.py +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/testing/example_scripts/collect/collect_init_tests/pytest.ini +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/testing/example_scripts/collect/collect_init_tests/tests/__init__.py +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/testing/example_scripts/collect/collect_init_tests/tests/test_foo.py +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/testing/example_scripts/collect/package_infinite_recursion/__init__.pyi +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/testing/example_scripts/collect/package_infinite_recursion/conftest.py +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/testing/example_scripts/collect/package_infinite_recursion/tests/__init__.py +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/testing/example_scripts/collect/package_infinite_recursion/tests/test_basic.py +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/testing/example_scripts/collect/package_init_given_as_arg/pkg/__init__.py +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/testing/example_scripts/collect/package_init_given_as_arg/pkg/test_foo.py +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/testing/example_scripts/config/collect_pytest_prefix/__init__.pyi +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/testing/example_scripts/config/collect_pytest_prefix/conftest.py +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/testing/example_scripts/config/collect_pytest_prefix/test_foo.py +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/testing/example_scripts/conftest_usageerror/__init__.pyi +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/testing/example_scripts/conftest_usageerror/conftest.py +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/testing/example_scripts/dataclasses/test_compare_dataclasses.py +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/testing/example_scripts/dataclasses/test_compare_dataclasses_field_comparison_off.py +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/testing/example_scripts/dataclasses/test_compare_dataclasses_verbose.py +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/testing/example_scripts/dataclasses/test_compare_dataclasses_with_custom_eq.py +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/testing/example_scripts/dataclasses/test_compare_initvar.py +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/testing/example_scripts/dataclasses/test_compare_recursive_dataclasses.py +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/testing/example_scripts/dataclasses/test_compare_two_different_dataclasses.py +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/testing/example_scripts/doctest/main_py/__main__.py +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/testing/example_scripts/doctest/main_py/test_normal_module.py +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/testing/example_scripts/fixtures/custom_item/__init__.pyi +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/testing/example_scripts/fixtures/custom_item/conftest.py +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/testing/example_scripts/fixtures/custom_item/foo/__init__.py +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/testing/example_scripts/fixtures/custom_item/foo/test_foo.py +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/testing/example_scripts/fixtures/fill_fixtures/test_conftest_funcargs_only_available_in_subdir/sub1/__init__.py +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/testing/example_scripts/fixtures/fill_fixtures/test_conftest_funcargs_only_available_in_subdir/sub1/conftest.py +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/testing/example_scripts/fixtures/fill_fixtures/test_conftest_funcargs_only_available_in_subdir/sub1/test_in_sub1.py +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/testing/example_scripts/fixtures/fill_fixtures/test_conftest_funcargs_only_available_in_subdir/sub2/__init__.py +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/testing/example_scripts/fixtures/fill_fixtures/test_conftest_funcargs_only_available_in_subdir/sub2/conftest.py +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/testing/example_scripts/fixtures/fill_fixtures/test_conftest_funcargs_only_available_in_subdir/sub2/test_in_sub2.py +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/testing/example_scripts/fixtures/fill_fixtures/test_detect_recursive_dependency_error.py +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/testing/example_scripts/fixtures/fill_fixtures/test_extend_fixture_conftest_conftest/__init__.pyi +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/testing/example_scripts/fixtures/fill_fixtures/test_extend_fixture_conftest_conftest/conftest.py +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/testing/example_scripts/fixtures/fill_fixtures/test_extend_fixture_conftest_conftest/pkg/__init__.py +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/testing/example_scripts/fixtures/fill_fixtures/test_extend_fixture_conftest_conftest/pkg/conftest.py +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/testing/example_scripts/fixtures/fill_fixtures/test_extend_fixture_conftest_conftest/pkg/test_spam.py +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/testing/example_scripts/fixtures/fill_fixtures/test_extend_fixture_conftest_module/__init__.pyi +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/testing/example_scripts/fixtures/fill_fixtures/test_extend_fixture_conftest_module/conftest.py +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/testing/example_scripts/fixtures/fill_fixtures/test_extend_fixture_conftest_module/test_extend_fixture_conftest_module.py +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/testing/example_scripts/fixtures/fill_fixtures/test_extend_fixture_module_class.py +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/testing/example_scripts/fixtures/fill_fixtures/test_funcarg_basic.py +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/testing/example_scripts/fixtures/fill_fixtures/test_funcarg_lookup_classlevel.py +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/testing/example_scripts/fixtures/fill_fixtures/test_funcarg_lookup_modulelevel.py +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/testing/example_scripts/fixtures/fill_fixtures/test_funcarg_lookupfails.py +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/testing/example_scripts/fixtures/test_fixture_named_request.py +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/testing/example_scripts/fixtures/test_getfixturevalue_dynamic.py +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/testing/example_scripts/issue88_initial_file_multinodes/__init__.pyi +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/testing/example_scripts/issue88_initial_file_multinodes/conftest.py +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/testing/example_scripts/issue88_initial_file_multinodes/test_hello.py +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/testing/example_scripts/issue_519.py +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/testing/example_scripts/junit-10.xsd +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/testing/example_scripts/marks/marks_considered_keywords/__init__.pyi +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/testing/example_scripts/marks/marks_considered_keywords/conftest.py +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/testing/example_scripts/marks/marks_considered_keywords/test_marks_as_keywords.py +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/testing/example_scripts/perf_examples/collect_stats/.gitignore +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/testing/example_scripts/perf_examples/collect_stats/generate_folders.py +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/testing/example_scripts/perf_examples/collect_stats/template_test.py +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/testing/example_scripts/pytest.ini +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/testing/example_scripts/tmpdir/tmp_path_fixture.py +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/testing/example_scripts/unittest/test_parametrized_fixture_error_message.py +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/testing/example_scripts/unittest/test_setup_skip.py +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/testing/example_scripts/unittest/test_setup_skip_class.py +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/testing/example_scripts/unittest/test_setup_skip_module.py +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/testing/example_scripts/unittest/test_unittest_asyncio.py +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/testing/example_scripts/unittest/test_unittest_asynctest.py +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/testing/example_scripts/unittest/test_unittest_plain_async.py +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/testing/example_scripts/warnings/test_group_warnings_by_message.py +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/testing/example_scripts/warnings/test_group_warnings_by_message_summary/test_1.py +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/testing/example_scripts/warnings/test_group_warnings_by_message_summary/test_2.py +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/testing/examples/test_issue519.py +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/testing/freeze/.gitignore +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/testing/freeze/create_executable.py +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/testing/freeze/runtests_script.py +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/testing/freeze/tests/test_doctest.txt +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/testing/freeze/tests/test_trivial.py +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/testing/freeze/tox_run.py +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/testing/io/test_saferepr.py +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/testing/io/test_terminalwriter.py +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/testing/io/test_wcwidth.py +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/testing/logging/test_formatter.py +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/testing/logging/test_reporting.py +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/testing/plugins_integration/.gitignore +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/testing/plugins_integration/README.rst +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/testing/plugins_integration/bdd_wallet.feature +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/testing/plugins_integration/bdd_wallet.py +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/testing/plugins_integration/django_settings.py +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/testing/plugins_integration/pytest.ini +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/testing/plugins_integration/pytest_anyio_integration.py +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/testing/plugins_integration/pytest_asyncio_integration.py +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/testing/plugins_integration/pytest_mock_integration.py +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/testing/plugins_integration/pytest_trio_integration.py +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/testing/plugins_integration/pytest_twisted_integration.py +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/testing/plugins_integration/requirements.txt +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/testing/plugins_integration/simple_integration.py +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/testing/python/approx.py +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/testing/python/collect.py +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/testing/python/fixtures.py +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/testing/python/integration.py +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/testing/python/raises.py +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/testing/python/show_fixtures_per_test.py +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/testing/test_argcomplete.py +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/testing/test_assertion.py +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/testing/test_cacheprovider.py +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/testing/test_capture.py +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/testing/test_compat.py +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/testing/test_config.py +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/testing/test_conftest.py +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/testing/test_debugging.py +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/testing/test_doctest.py +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/testing/test_entry_points.py +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/testing/test_error_diffs.py +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/testing/test_faulthandler.py +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/testing/test_findpaths.py +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/testing/test_helpconfig.py +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/testing/test_junitxml.py +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/testing/test_legacypath.py +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/testing/test_link_resolve.py +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/testing/test_main.py +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/testing/test_mark_expression.py +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/testing/test_meta.py +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/testing/test_monkeypatch.py +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/testing/test_nodes.py +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/testing/test_nose.py +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/testing/test_pastebin.py +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/testing/test_pluginmanager.py +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/testing/test_pytester.py +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/testing/test_python_path.py +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/testing/test_recwarn.py +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/testing/test_reports.py +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/testing/test_runner.py +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/testing/test_runner_xunit.py +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/testing/test_scope.py +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/testing/test_session.py +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/testing/test_setuponly.py +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/testing/test_setupplan.py +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/testing/test_skipping.py +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/testing/test_stash.py +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/testing/test_stepwise.py +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/testing/test_terminal.py +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/testing/test_threadexception.py +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/testing/test_tmpdir.py +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/testing/test_unittest.py +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/testing/test_unraisableexception.py +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/testing/test_warning_types.py +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/testing/test_warnings.py +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/testing/typing_checks.py +0 -0
- {pytest-7.4.2 → pytest-7.4.4}/tox.ini +0 -0
|
@@ -26,7 +26,7 @@ jobs:
|
|
|
26
26
|
persist-credentials: false
|
|
27
27
|
|
|
28
28
|
- name: Build and Check Package
|
|
29
|
-
uses: hynek/build-and-inspect-python-package@v1.5
|
|
29
|
+
uses: hynek/build-and-inspect-python-package@v1.5.3
|
|
30
30
|
|
|
31
31
|
deploy:
|
|
32
32
|
if: github.repository == 'pytest-dev/pytest'
|
|
@@ -36,8 +36,10 @@ jobs:
|
|
|
36
36
|
timeout-minutes: 30
|
|
37
37
|
permissions:
|
|
38
38
|
id-token: write
|
|
39
|
+
contents: write
|
|
39
40
|
steps:
|
|
40
41
|
- uses: actions/checkout@v3
|
|
42
|
+
|
|
41
43
|
- name: Download Package
|
|
42
44
|
uses: actions/download-artifact@v3
|
|
43
45
|
with:
|
|
@@ -51,8 +53,8 @@ jobs:
|
|
|
51
53
|
run: |
|
|
52
54
|
git config user.name "pytest bot"
|
|
53
55
|
git config user.email "pytestbot@gmail.com"
|
|
54
|
-
git tag --annotate --message=v${{ github.event.inputs.version }}
|
|
55
|
-
git push origin
|
|
56
|
+
git tag --annotate --message=v${{ github.event.inputs.version }} ${{ github.event.inputs.version }} ${{ github.sha }}
|
|
57
|
+
git push origin ${{ github.event.inputs.version }}
|
|
56
58
|
|
|
57
59
|
release-notes:
|
|
58
60
|
|
|
@@ -47,6 +47,7 @@ Ariel Pillemer
|
|
|
47
47
|
Armin Rigo
|
|
48
48
|
Aron Coyle
|
|
49
49
|
Aron Curzon
|
|
50
|
+
Arthur Richard
|
|
50
51
|
Ashish Kurmi
|
|
51
52
|
Aviral Verma
|
|
52
53
|
Aviv Palivoda
|
|
@@ -231,6 +232,7 @@ Maho
|
|
|
231
232
|
Maik Figura
|
|
232
233
|
Mandeep Bhutani
|
|
233
234
|
Manuel Krebber
|
|
235
|
+
Marc Mueller
|
|
234
236
|
Marc Schlaich
|
|
235
237
|
Marcelo Duarte Trevisani
|
|
236
238
|
Marcin Bachry
|
|
@@ -322,6 +324,7 @@ Ronny Pfannschmidt
|
|
|
322
324
|
Ross Lawley
|
|
323
325
|
Ruaridh Williamson
|
|
324
326
|
Russel Winder
|
|
327
|
+
Ryan Puddephatt
|
|
325
328
|
Ryan Wooden
|
|
326
329
|
Saiprasad Kale
|
|
327
330
|
Samuel Colvin
|
|
@@ -336,6 +339,7 @@ Serhii Mozghovyi
|
|
|
336
339
|
Seth Junot
|
|
337
340
|
Shantanu Jain
|
|
338
341
|
Shubham Adep
|
|
342
|
+
Simon Blanchard
|
|
339
343
|
Simon Gomizelj
|
|
340
344
|
Simon Holesch
|
|
341
345
|
Simon Kerr
|
|
@@ -373,6 +377,7 @@ Tomer Keren
|
|
|
373
377
|
Tony Narlock
|
|
374
378
|
Tor Colvin
|
|
375
379
|
Trevor Bekolay
|
|
380
|
+
Tushar Sadhwani
|
|
376
381
|
Tyler Goodlet
|
|
377
382
|
Tyler Smart
|
|
378
383
|
Tzu-ping Chung
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: pytest
|
|
3
|
-
Version: 7.4.
|
|
3
|
+
Version: 7.4.4
|
|
4
4
|
Summary: pytest: simple powerful testing with Python
|
|
5
5
|
Home-page: https://docs.pytest.org/en/latest/
|
|
6
6
|
Author: Holger Krekel, Bruno Oliveira, Ronny Pfannschmidt, Floris Bruynooghe, Brianna Laugher, Florian Bruhin and others
|
|
@@ -134,7 +134,8 @@ Releasing
|
|
|
134
134
|
Both automatic and manual processes described above follow the same steps from this point onward.
|
|
135
135
|
|
|
136
136
|
#. After all tests pass and the PR has been approved, trigger the ``deploy`` job
|
|
137
|
-
in https://github.com/pytest-dev/pytest/actions/workflows/deploy.yml.
|
|
137
|
+
in https://github.com/pytest-dev/pytest/actions/workflows/deploy.yml, using the ``release-MAJOR.MINOR.PATCH`` branch
|
|
138
|
+
as source.
|
|
138
139
|
|
|
139
140
|
This job will require approval from ``pytest-dev/core``, after which it will publish to PyPI
|
|
140
141
|
and tag the repository.
|
|
@@ -14,7 +14,7 @@ Each file should be named like ``<ISSUE>.<TYPE>.rst``, where
|
|
|
14
14
|
``<ISSUE>`` is an issue number, and ``<TYPE>`` is one of:
|
|
15
15
|
|
|
16
16
|
* ``feature``: new user facing features, like new command-line options and new behavior.
|
|
17
|
-
* ``improvement``: improvement of existing functionality, usually without requiring user intervention (for example, new fields being written in ``--
|
|
17
|
+
* ``improvement``: improvement of existing functionality, usually without requiring user intervention (for example, new fields being written in ``--junit-xml``, improved colors in terminal, etc).
|
|
18
18
|
* ``bugfix``: fixes a bug.
|
|
19
19
|
* ``doc``: documentation improvement, like rewording an entire session or adding missing docs.
|
|
20
20
|
* ``deprecation``: feature deprecation.
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
pytest-7.4.3
|
|
2
|
+
=======================================
|
|
3
|
+
|
|
4
|
+
pytest 7.4.3 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
|
+
* Marc Mueller
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
Happy testing,
|
|
19
|
+
The pytest Development Team
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
pytest-7.4.4
|
|
2
|
+
=======================================
|
|
3
|
+
|
|
4
|
+
pytest 7.4.4 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
|
+
* Ran Benita
|
|
16
|
+
* Zac Hatfield-Dodds
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
Happy testing,
|
|
20
|
+
The pytest Development Team
|
|
@@ -28,6 +28,46 @@ with advance notice in the **Deprecations** section of releases.
|
|
|
28
28
|
|
|
29
29
|
.. towncrier release notes start
|
|
30
30
|
|
|
31
|
+
pytest 7.4.4 (2023-12-31)
|
|
32
|
+
=========================
|
|
33
|
+
|
|
34
|
+
Bug Fixes
|
|
35
|
+
---------
|
|
36
|
+
|
|
37
|
+
- `#11140 <https://github.com/pytest-dev/pytest/issues/11140>`_: Fix non-string constants at the top of file being detected as docstrings on Python>=3.8.
|
|
38
|
+
|
|
39
|
+
|
|
40
|
+
- `#11572 <https://github.com/pytest-dev/pytest/issues/11572>`_: Handle an edge case where :data:`sys.stderr` and :data:`sys.__stderr__` might already be closed when :ref:`faulthandler` is tearing down.
|
|
41
|
+
|
|
42
|
+
|
|
43
|
+
- `#11710 <https://github.com/pytest-dev/pytest/issues/11710>`_: Fixed tracebacks from collection errors not getting pruned.
|
|
44
|
+
|
|
45
|
+
|
|
46
|
+
- `#7966 <https://github.com/pytest-dev/pytest/issues/7966>`_: Removed unhelpful error message from assertion rewrite mechanism when exceptions are raised in ``__iter__`` methods. Now they are treated un-iterable instead.
|
|
47
|
+
|
|
48
|
+
|
|
49
|
+
|
|
50
|
+
Improved Documentation
|
|
51
|
+
----------------------
|
|
52
|
+
|
|
53
|
+
- `#11091 <https://github.com/pytest-dev/pytest/issues/11091>`_: Updated documentation to refer to hyphenated options: replaced ``--junitxml`` with ``--junit-xml`` and ``--collectonly`` with ``--collect-only``.
|
|
54
|
+
|
|
55
|
+
|
|
56
|
+
pytest 7.4.3 (2023-10-24)
|
|
57
|
+
=========================
|
|
58
|
+
|
|
59
|
+
Bug Fixes
|
|
60
|
+
---------
|
|
61
|
+
|
|
62
|
+
- `#10447 <https://github.com/pytest-dev/pytest/issues/10447>`_: Markers are now considered in the reverse mro order to ensure base class markers are considered first -- this resolves a regression.
|
|
63
|
+
|
|
64
|
+
|
|
65
|
+
- `#11239 <https://github.com/pytest-dev/pytest/issues/11239>`_: Fixed ``:=`` in asserts impacting unrelated test cases.
|
|
66
|
+
|
|
67
|
+
|
|
68
|
+
- `#11439 <https://github.com/pytest-dev/pytest/issues/11439>`_: Handled an edge case where :data:`sys.stderr` might already be closed when :ref:`faulthandler` is tearing down.
|
|
69
|
+
|
|
70
|
+
|
|
31
71
|
pytest 7.4.2 (2023-09-07)
|
|
32
72
|
=========================
|
|
33
73
|
|
|
@@ -596,7 +596,7 @@ By using ``legacy`` you will keep using the legacy/xunit1 format when upgrading
|
|
|
596
596
|
pytest 6.0, where the default format will be ``xunit2``.
|
|
597
597
|
|
|
598
598
|
In order to let users know about the transition, pytest will issue a warning in case
|
|
599
|
-
the ``--
|
|
599
|
+
the ``--junit-xml`` option is given in the command line but ``junit_family`` is not explicitly
|
|
600
600
|
configured in ``pytest.ini``.
|
|
601
601
|
|
|
602
602
|
Services known to support the ``xunit2`` format:
|
|
@@ -136,7 +136,7 @@ Or select multiple nodes:
|
|
|
136
136
|
|
|
137
137
|
Node IDs for failing tests are displayed in the test summary info
|
|
138
138
|
when running pytest with the ``-rf`` option. You can also
|
|
139
|
-
construct Node IDs from the output of ``pytest --
|
|
139
|
+
construct Node IDs from the output of ``pytest --collect-only``.
|
|
140
140
|
|
|
141
141
|
Using ``-k expr`` to select tests based on their name
|
|
142
142
|
-------------------------------------------------------
|
|
@@ -90,7 +90,7 @@ and can also be used to hold pytest configuration if they have a ``[pytest]`` se
|
|
|
90
90
|
setup.cfg
|
|
91
91
|
~~~~~~~~~
|
|
92
92
|
|
|
93
|
-
``setup.cfg`` files are general purpose configuration files, used originally by
|
|
93
|
+
``setup.cfg`` files are general purpose configuration files, used originally by ``distutils`` (now deprecated) and `setuptools <https://setuptools.pypa.io/en/latest/userguide/declarative_config.html>`__, and can also be used to hold pytest configuration
|
|
94
94
|
if they have a ``[tool:pytest]`` section.
|
|
95
95
|
|
|
96
96
|
.. code-block:: ini
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
:tocdepth: 3
|
|
2
|
+
|
|
1
3
|
.. _`api-reference`:
|
|
2
4
|
|
|
3
5
|
API Reference
|
|
@@ -77,7 +79,7 @@ pytest.xfail
|
|
|
77
79
|
pytest.exit
|
|
78
80
|
~~~~~~~~~~~
|
|
79
81
|
|
|
80
|
-
.. autofunction:: pytest.exit(reason, [returncode=
|
|
82
|
+
.. autofunction:: pytest.exit(reason, [returncode=None, msg=None])
|
|
81
83
|
|
|
82
84
|
pytest.main
|
|
83
85
|
~~~~~~~~~~~
|
|
@@ -31,10 +31,22 @@ class InvalidFeatureRelease(Exception):
|
|
|
31
31
|
SLUG = "pytest-dev/pytest"
|
|
32
32
|
|
|
33
33
|
PR_BODY = """\
|
|
34
|
-
Created
|
|
34
|
+
Created by the [prepare release pr]\
|
|
35
|
+
(https://github.com/pytest-dev/pytest/actions/workflows/prepare-release-pr.yml) workflow.
|
|
35
36
|
|
|
36
|
-
Once all builds pass and it has been **approved** by one or more maintainers, the
|
|
37
|
-
|
|
37
|
+
Once all builds pass and it has been **approved** by one or more maintainers, start the \
|
|
38
|
+
[deploy](https://github.com/pytest-dev/pytest/actions/workflows/deploy.yml) workflow, using these parameters:
|
|
39
|
+
|
|
40
|
+
* `Use workflow from`: `release-{version}`.
|
|
41
|
+
* `Release version`: `{version}`.
|
|
42
|
+
|
|
43
|
+
Or execute on the command line:
|
|
44
|
+
|
|
45
|
+
```console
|
|
46
|
+
gh workflow run deploy.yml -r release-{version} -f version={version}
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
After the workflow has been approved by a core maintainer, the package will be uploaded to PyPI automatically.
|
|
38
50
|
"""
|
|
39
51
|
|
|
40
52
|
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
# file generated by setuptools_scm
|
|
2
|
+
# don't change, don't track in version control
|
|
3
|
+
TYPE_CHECKING = False
|
|
4
|
+
if TYPE_CHECKING:
|
|
5
|
+
from typing import Tuple, Union
|
|
6
|
+
VERSION_TUPLE = Tuple[Union[int, str], ...]
|
|
7
|
+
else:
|
|
8
|
+
VERSION_TUPLE = object
|
|
9
|
+
|
|
10
|
+
version: str
|
|
11
|
+
__version__: str
|
|
12
|
+
__version_tuple__: VERSION_TUPLE
|
|
13
|
+
version_tuple: VERSION_TUPLE
|
|
14
|
+
|
|
15
|
+
__version__ = version = '7.4.4'
|
|
16
|
+
__version_tuple__ = version_tuple = (7, 4, 4)
|
|
@@ -13,6 +13,7 @@ import struct
|
|
|
13
13
|
import sys
|
|
14
14
|
import tokenize
|
|
15
15
|
import types
|
|
16
|
+
from collections import defaultdict
|
|
16
17
|
from pathlib import Path
|
|
17
18
|
from pathlib import PurePath
|
|
18
19
|
from typing import Callable
|
|
@@ -56,6 +57,10 @@ else:
|
|
|
56
57
|
astNum = ast.Num
|
|
57
58
|
|
|
58
59
|
|
|
60
|
+
class Sentinel:
|
|
61
|
+
pass
|
|
62
|
+
|
|
63
|
+
|
|
59
64
|
assertstate_key = StashKey["AssertionState"]()
|
|
60
65
|
|
|
61
66
|
# pytest caches rewritten pycs in pycache dirs
|
|
@@ -63,6 +68,9 @@ PYTEST_TAG = f"{sys.implementation.cache_tag}-pytest-{version}"
|
|
|
63
68
|
PYC_EXT = ".py" + (__debug__ and "c" or "o")
|
|
64
69
|
PYC_TAIL = "." + PYTEST_TAG + PYC_EXT
|
|
65
70
|
|
|
71
|
+
# Special marker that denotes we have just left a scope definition
|
|
72
|
+
_SCOPE_END_MARKER = Sentinel()
|
|
73
|
+
|
|
66
74
|
|
|
67
75
|
class AssertionRewritingHook(importlib.abc.MetaPathFinder, importlib.abc.Loader):
|
|
68
76
|
"""PEP302/PEP451 import hook which rewrites asserts."""
|
|
@@ -596,6 +604,13 @@ def _get_assertion_exprs(src: bytes) -> Dict[int, str]:
|
|
|
596
604
|
return ret
|
|
597
605
|
|
|
598
606
|
|
|
607
|
+
def _get_ast_constant_value(value: astStr) -> object:
|
|
608
|
+
if sys.version_info >= (3, 8):
|
|
609
|
+
return value.value
|
|
610
|
+
else:
|
|
611
|
+
return value.s
|
|
612
|
+
|
|
613
|
+
|
|
599
614
|
class AssertionRewriter(ast.NodeVisitor):
|
|
600
615
|
"""Assertion rewriting implementation.
|
|
601
616
|
|
|
@@ -645,6 +660,8 @@ class AssertionRewriter(ast.NodeVisitor):
|
|
|
645
660
|
.push_format_context() and .pop_format_context() which allows
|
|
646
661
|
to build another %-formatted string while already building one.
|
|
647
662
|
|
|
663
|
+
:scope: A tuple containing the current scope used for variables_overwrite.
|
|
664
|
+
|
|
648
665
|
:variables_overwrite: A dict filled with references to variables
|
|
649
666
|
that change value within an assert. This happens when a variable is
|
|
650
667
|
reassigned with the walrus operator
|
|
@@ -666,7 +683,10 @@ class AssertionRewriter(ast.NodeVisitor):
|
|
|
666
683
|
else:
|
|
667
684
|
self.enable_assertion_pass_hook = False
|
|
668
685
|
self.source = source
|
|
669
|
-
self.
|
|
686
|
+
self.scope: tuple[ast.AST, ...] = ()
|
|
687
|
+
self.variables_overwrite: defaultdict[
|
|
688
|
+
tuple[ast.AST, ...], Dict[str, str]
|
|
689
|
+
] = defaultdict(dict)
|
|
670
690
|
|
|
671
691
|
def run(self, mod: ast.Module) -> None:
|
|
672
692
|
"""Find all assert statements in *mod* and rewrite them."""
|
|
@@ -687,11 +707,10 @@ class AssertionRewriter(ast.NodeVisitor):
|
|
|
687
707
|
expect_docstring
|
|
688
708
|
and isinstance(item, ast.Expr)
|
|
689
709
|
and isinstance(item.value, astStr)
|
|
710
|
+
and isinstance(_get_ast_constant_value(item.value), str)
|
|
690
711
|
):
|
|
691
|
-
|
|
692
|
-
|
|
693
|
-
else:
|
|
694
|
-
doc = item.value.s
|
|
712
|
+
doc = _get_ast_constant_value(item.value)
|
|
713
|
+
assert isinstance(doc, str)
|
|
695
714
|
if self.is_rewrite_disabled(doc):
|
|
696
715
|
return
|
|
697
716
|
expect_docstring = False
|
|
@@ -732,9 +751,17 @@ class AssertionRewriter(ast.NodeVisitor):
|
|
|
732
751
|
mod.body[pos:pos] = imports
|
|
733
752
|
|
|
734
753
|
# Collect asserts.
|
|
735
|
-
|
|
754
|
+
self.scope = (mod,)
|
|
755
|
+
nodes: List[Union[ast.AST, Sentinel]] = [mod]
|
|
736
756
|
while nodes:
|
|
737
757
|
node = nodes.pop()
|
|
758
|
+
if isinstance(node, (ast.FunctionDef, ast.AsyncFunctionDef, ast.ClassDef)):
|
|
759
|
+
self.scope = tuple((*self.scope, node))
|
|
760
|
+
nodes.append(_SCOPE_END_MARKER)
|
|
761
|
+
if node == _SCOPE_END_MARKER:
|
|
762
|
+
self.scope = self.scope[:-1]
|
|
763
|
+
continue
|
|
764
|
+
assert isinstance(node, ast.AST)
|
|
738
765
|
for name, field in ast.iter_fields(node):
|
|
739
766
|
if isinstance(field, list):
|
|
740
767
|
new: List[ast.AST] = []
|
|
@@ -1005,7 +1032,7 @@ class AssertionRewriter(ast.NodeVisitor):
|
|
|
1005
1032
|
]
|
|
1006
1033
|
):
|
|
1007
1034
|
pytest_temp = self.variable()
|
|
1008
|
-
self.variables_overwrite[
|
|
1035
|
+
self.variables_overwrite[self.scope][
|
|
1009
1036
|
v.left.target.id
|
|
1010
1037
|
] = v.left # type:ignore[assignment]
|
|
1011
1038
|
v.left.target.id = pytest_temp
|
|
@@ -1048,17 +1075,20 @@ class AssertionRewriter(ast.NodeVisitor):
|
|
|
1048
1075
|
new_args = []
|
|
1049
1076
|
new_kwargs = []
|
|
1050
1077
|
for arg in call.args:
|
|
1051
|
-
if isinstance(arg, ast.Name) and arg.id in self.variables_overwrite
|
|
1052
|
-
|
|
1078
|
+
if isinstance(arg, ast.Name) and arg.id in self.variables_overwrite.get(
|
|
1079
|
+
self.scope, {}
|
|
1080
|
+
):
|
|
1081
|
+
arg = self.variables_overwrite[self.scope][
|
|
1082
|
+
arg.id
|
|
1083
|
+
] # type:ignore[assignment]
|
|
1053
1084
|
res, expl = self.visit(arg)
|
|
1054
1085
|
arg_expls.append(expl)
|
|
1055
1086
|
new_args.append(res)
|
|
1056
1087
|
for keyword in call.keywords:
|
|
1057
|
-
if (
|
|
1058
|
-
|
|
1059
|
-
|
|
1060
|
-
|
|
1061
|
-
keyword.value = self.variables_overwrite[
|
|
1088
|
+
if isinstance(
|
|
1089
|
+
keyword.value, ast.Name
|
|
1090
|
+
) and keyword.value.id in self.variables_overwrite.get(self.scope, {}):
|
|
1091
|
+
keyword.value = self.variables_overwrite[self.scope][
|
|
1062
1092
|
keyword.value.id
|
|
1063
1093
|
] # type:ignore[assignment]
|
|
1064
1094
|
res, expl = self.visit(keyword.value)
|
|
@@ -1094,12 +1124,14 @@ class AssertionRewriter(ast.NodeVisitor):
|
|
|
1094
1124
|
def visit_Compare(self, comp: ast.Compare) -> Tuple[ast.expr, str]:
|
|
1095
1125
|
self.push_format_context()
|
|
1096
1126
|
# We first check if we have overwritten a variable in the previous assert
|
|
1097
|
-
if isinstance(
|
|
1098
|
-
comp.left
|
|
1127
|
+
if isinstance(
|
|
1128
|
+
comp.left, ast.Name
|
|
1129
|
+
) and comp.left.id in self.variables_overwrite.get(self.scope, {}):
|
|
1130
|
+
comp.left = self.variables_overwrite[self.scope][
|
|
1099
1131
|
comp.left.id
|
|
1100
1132
|
] # type:ignore[assignment]
|
|
1101
1133
|
if isinstance(comp.left, namedExpr):
|
|
1102
|
-
self.variables_overwrite[
|
|
1134
|
+
self.variables_overwrite[self.scope][
|
|
1103
1135
|
comp.left.target.id
|
|
1104
1136
|
] = comp.left # type:ignore[assignment]
|
|
1105
1137
|
left_res, left_expl = self.visit(comp.left)
|
|
@@ -1119,7 +1151,7 @@ class AssertionRewriter(ast.NodeVisitor):
|
|
|
1119
1151
|
and next_operand.target.id == left_res.id
|
|
1120
1152
|
):
|
|
1121
1153
|
next_operand.target.id = self.variable()
|
|
1122
|
-
self.variables_overwrite[
|
|
1154
|
+
self.variables_overwrite[self.scope][
|
|
1123
1155
|
left_res.id
|
|
1124
1156
|
] = next_operand # type:ignore[assignment]
|
|
1125
1157
|
next_res, next_expl = self.visit(next_operand)
|
|
@@ -380,15 +380,24 @@ else:
|
|
|
380
380
|
|
|
381
381
|
|
|
382
382
|
def get_user_id() -> int | None:
|
|
383
|
-
"""Return the current user id
|
|
384
|
-
|
|
385
|
-
|
|
386
|
-
if
|
|
383
|
+
"""Return the current process's real user id or None if it could not be
|
|
384
|
+
determined.
|
|
385
|
+
|
|
386
|
+
:return: The user id or None if it could not be determined.
|
|
387
|
+
"""
|
|
388
|
+
# mypy follows the version and platform checking expectation of PEP 484:
|
|
389
|
+
# https://mypy.readthedocs.io/en/stable/common_issues.html?highlight=platform#python-version-and-system-platform-checks
|
|
390
|
+
# Containment checks are too complex for mypy v1.5.0 and cause failure.
|
|
391
|
+
if sys.platform == "win32" or sys.platform == "emscripten":
|
|
392
|
+
# win32 does not have a getuid() function.
|
|
393
|
+
# Emscripten has a return 0 stub.
|
|
387
394
|
return None
|
|
388
|
-
|
|
389
|
-
|
|
390
|
-
|
|
391
|
-
|
|
395
|
+
else:
|
|
396
|
+
# On other platforms, a return value of -1 is assumed to indicate that
|
|
397
|
+
# the current process's real user id could not be determined.
|
|
398
|
+
ERROR = -1
|
|
399
|
+
uid = os.getuid()
|
|
400
|
+
return uid if uid != ERROR else None
|
|
392
401
|
|
|
393
402
|
|
|
394
403
|
# Perform exhaustiveness checking.
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import io
|
|
2
1
|
import os
|
|
3
2
|
import sys
|
|
4
3
|
from typing import Generator
|
|
@@ -10,8 +9,8 @@ from _pytest.nodes import Item
|
|
|
10
9
|
from _pytest.stash import StashKey
|
|
11
10
|
|
|
12
11
|
|
|
12
|
+
fault_handler_original_stderr_fd_key = StashKey[int]()
|
|
13
13
|
fault_handler_stderr_fd_key = StashKey[int]()
|
|
14
|
-
fault_handler_originally_enabled_key = StashKey[bool]()
|
|
15
14
|
|
|
16
15
|
|
|
17
16
|
def pytest_addoption(parser: Parser) -> None:
|
|
@@ -25,8 +24,15 @@ def pytest_addoption(parser: Parser) -> None:
|
|
|
25
24
|
def pytest_configure(config: Config) -> None:
|
|
26
25
|
import faulthandler
|
|
27
26
|
|
|
28
|
-
|
|
29
|
-
|
|
27
|
+
# at teardown we want to restore the original faulthandler fileno
|
|
28
|
+
# but faulthandler has no api to return the original fileno
|
|
29
|
+
# so here we stash the stderr fileno to be used at teardown
|
|
30
|
+
# sys.stderr and sys.__stderr__ may be closed or patched during the session
|
|
31
|
+
# so we can't rely on their values being good at that point (#11572).
|
|
32
|
+
stderr_fileno = get_stderr_fileno()
|
|
33
|
+
if faulthandler.is_enabled():
|
|
34
|
+
config.stash[fault_handler_original_stderr_fd_key] = stderr_fileno
|
|
35
|
+
config.stash[fault_handler_stderr_fd_key] = os.dup(stderr_fileno)
|
|
30
36
|
faulthandler.enable(file=config.stash[fault_handler_stderr_fd_key])
|
|
31
37
|
|
|
32
38
|
|
|
@@ -38,9 +44,10 @@ def pytest_unconfigure(config: Config) -> None:
|
|
|
38
44
|
if fault_handler_stderr_fd_key in config.stash:
|
|
39
45
|
os.close(config.stash[fault_handler_stderr_fd_key])
|
|
40
46
|
del config.stash[fault_handler_stderr_fd_key]
|
|
41
|
-
if
|
|
42
|
-
|
|
43
|
-
faulthandler.enable(
|
|
47
|
+
# Re-enable the faulthandler if it was originally enabled.
|
|
48
|
+
if fault_handler_original_stderr_fd_key in config.stash:
|
|
49
|
+
faulthandler.enable(config.stash[fault_handler_original_stderr_fd_key])
|
|
50
|
+
del config.stash[fault_handler_original_stderr_fd_key]
|
|
44
51
|
|
|
45
52
|
|
|
46
53
|
def get_stderr_fileno() -> int:
|
|
@@ -51,7 +58,7 @@ def get_stderr_fileno() -> int:
|
|
|
51
58
|
if fileno == -1:
|
|
52
59
|
raise AttributeError()
|
|
53
60
|
return fileno
|
|
54
|
-
except (AttributeError,
|
|
61
|
+
except (AttributeError, ValueError):
|
|
55
62
|
# pytest-xdist monkeypatches sys.stderr with an object that is not an actual file.
|
|
56
63
|
# https://docs.python.org/3/library/faulthandler.html#issue-with-file-descriptors
|
|
57
64
|
# This is potentially dangerous, but the best we can do.
|
|
@@ -369,7 +369,7 @@ def record_testsuite_property(request: FixtureRequest) -> Callable[[str, object]
|
|
|
369
369
|
__tracebackhide__ = True
|
|
370
370
|
|
|
371
371
|
def record_func(name: str, value: object) -> None:
|
|
372
|
-
"""No-op function in case --
|
|
372
|
+
"""No-op function in case --junit-xml was not passed in the command-line."""
|
|
373
373
|
__tracebackhide__ = True
|
|
374
374
|
_check_record_param_type("name", name)
|
|
375
375
|
|
|
@@ -373,7 +373,9 @@ def get_unpacked_marks(
|
|
|
373
373
|
if not consider_mro:
|
|
374
374
|
mark_lists = [obj.__dict__.get("pytestmark", [])]
|
|
375
375
|
else:
|
|
376
|
-
mark_lists = [
|
|
376
|
+
mark_lists = [
|
|
377
|
+
x.__dict__.get("pytestmark", []) for x in reversed(obj.__mro__)
|
|
378
|
+
]
|
|
377
379
|
mark_list = []
|
|
378
380
|
for item in mark_lists:
|
|
379
381
|
if isinstance(item, list):
|
|
@@ -567,7 +567,7 @@ class Collector(Node):
|
|
|
567
567
|
ntraceback = traceback.cut(path=self.path)
|
|
568
568
|
if ntraceback == traceback:
|
|
569
569
|
ntraceback = ntraceback.cut(excludepath=tracebackcutdir)
|
|
570
|
-
return
|
|
570
|
+
return ntraceback.filter(excinfo)
|
|
571
571
|
return excinfo.traceback
|
|
572
572
|
|
|
573
573
|
|
|
@@ -123,7 +123,7 @@ def exit(
|
|
|
123
123
|
only because `msg` is deprecated.
|
|
124
124
|
|
|
125
125
|
:param returncode:
|
|
126
|
-
Return code to be used when exiting pytest.
|
|
126
|
+
Return code to be used when exiting pytest. None means the same as ``0`` (no error), same as :func:`sys.exit`.
|
|
127
127
|
|
|
128
128
|
:param msg:
|
|
129
129
|
Same as ``reason``, but deprecated. Will be removed in a future version, use ``reason`` instead.
|
|
@@ -623,8 +623,9 @@ def module_name_from_path(path: Path, root: Path) -> str:
|
|
|
623
623
|
# Use the parts for the relative path to the root path.
|
|
624
624
|
path_parts = relative_path.parts
|
|
625
625
|
|
|
626
|
-
# Module name for packages do not contain the __init__ file
|
|
627
|
-
|
|
626
|
+
# Module name for packages do not contain the __init__ file, unless
|
|
627
|
+
# the `__init__.py` file is at the root.
|
|
628
|
+
if len(path_parts) >= 2 and path_parts[-1] == "__init__":
|
|
628
629
|
path_parts = path_parts[:-1]
|
|
629
630
|
|
|
630
631
|
return ".".join(path_parts)
|