coverage 7.16.1__tar.gz → 7.16.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.
- {coverage-7.16.1 → coverage-7.16.2}/.github/workflows/codeql-analysis.yml +3 -3
- {coverage-7.16.1 → coverage-7.16.2}/.github/workflows/quality.yml +1 -1
- {coverage-7.16.1 → coverage-7.16.2}/.github/workflows/testsuite.yml +5 -0
- {coverage-7.16.1 → coverage-7.16.2}/.pre-commit-config.yaml +1 -1
- {coverage-7.16.1 → coverage-7.16.2}/CHANGES.rst +22 -0
- {coverage-7.16.1 → coverage-7.16.2}/Makefile +2 -2
- {coverage-7.16.1 → coverage-7.16.2}/PKG-INFO +7 -7
- {coverage-7.16.1 → coverage-7.16.2}/coverage/bytecode.py +6 -0
- {coverage-7.16.1 → coverage-7.16.2}/coverage/context.py +7 -0
- {coverage-7.16.1 → coverage-7.16.2}/coverage/ctracer/tracer.c +13 -0
- {coverage-7.16.1 → coverage-7.16.2}/coverage/debug.py +4 -7
- {coverage-7.16.1 → coverage-7.16.2}/coverage/files.py +4 -4
- {coverage-7.16.1 → coverage-7.16.2}/coverage/parser.py +1 -0
- {coverage-7.16.1 → coverage-7.16.2}/coverage/pytracer.py +16 -0
- {coverage-7.16.1 → coverage-7.16.2}/coverage/report_core.py +1 -0
- {coverage-7.16.1 → coverage-7.16.2}/coverage/types.py +11 -0
- {coverage-7.16.1 → coverage-7.16.2}/coverage/version.py +1 -1
- {coverage-7.16.1 → coverage-7.16.2}/coverage.egg-info/PKG-INFO +7 -7
- {coverage-7.16.1 → coverage-7.16.2}/doc/commands/cmd_combine.rst +25 -3
- {coverage-7.16.1 → coverage-7.16.2}/doc/conf.py +3 -3
- {coverage-7.16.1 → coverage-7.16.2}/doc/requirements.txt +134 -134
- {coverage-7.16.1 → coverage-7.16.2}/howto.txt +4 -9
- {coverage-7.16.1 → coverage-7.16.2}/pyproject.toml +1 -0
- {coverage-7.16.1 → coverage-7.16.2}/requirements/dev.txt +117 -117
- {coverage-7.16.1 → coverage-7.16.2}/requirements/kit.txt +12 -12
- {coverage-7.16.1 → coverage-7.16.2}/requirements/mypy.txt +144 -144
- {coverage-7.16.1 → coverage-7.16.2}/requirements/pip.txt +9 -9
- {coverage-7.16.1 → coverage-7.16.2}/requirements/pytest.in +2 -1
- {coverage-7.16.1 → coverage-7.16.2}/requirements/pytest.txt +83 -83
- {coverage-7.16.1 → coverage-7.16.2}/requirements/tox.txt +12 -12
- {coverage-7.16.1 → coverage-7.16.2}/tests/test_arcs.py +41 -0
- {coverage-7.16.1 → coverage-7.16.2}/tests/test_bytecode.py +2 -2
- {coverage-7.16.1 → coverage-7.16.2}/tests/test_context.py +50 -0
- {coverage-7.16.1 → coverage-7.16.2}/tests/test_debug.py +6 -1
- {coverage-7.16.1 → coverage-7.16.2}/tests/testenv.py +1 -1
- {coverage-7.16.1 → coverage-7.16.2}/.editorconfig +0 -0
- {coverage-7.16.1 → coverage-7.16.2}/.git-blame-ignore-revs +0 -0
- {coverage-7.16.1 → coverage-7.16.2}/.github/CODE_OF_CONDUCT.md +0 -0
- {coverage-7.16.1 → coverage-7.16.2}/.github/FUNDING.yml +0 -0
- {coverage-7.16.1 → coverage-7.16.2}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
- {coverage-7.16.1 → coverage-7.16.2}/.github/ISSUE_TEMPLATE/config.yml +0 -0
- {coverage-7.16.1 → coverage-7.16.2}/.github/ISSUE_TEMPLATE/feature_request.md +0 -0
- {coverage-7.16.1 → coverage-7.16.2}/.github/ISSUE_TEMPLATE/support.md +0 -0
- {coverage-7.16.1 → coverage-7.16.2}/.github/SECURITY.md +0 -0
- {coverage-7.16.1 → coverage-7.16.2}/.github/dependabot.yml +0 -0
- {coverage-7.16.1 → coverage-7.16.2}/.github/workflows/coverage.yml +0 -0
- {coverage-7.16.1 → coverage-7.16.2}/.github/workflows/dependency-review.yml +0 -0
- {coverage-7.16.1 → coverage-7.16.2}/.github/workflows/kit.yml +0 -0
- {coverage-7.16.1 → coverage-7.16.2}/.github/workflows/publish.yml +0 -0
- {coverage-7.16.1 → coverage-7.16.2}/.github/workflows/python-nightly.yml +0 -0
- {coverage-7.16.1 → coverage-7.16.2}/.github/zizmor.yml +0 -0
- {coverage-7.16.1 → coverage-7.16.2}/.gitignore +0 -0
- {coverage-7.16.1 → coverage-7.16.2}/.ignore +0 -0
- {coverage-7.16.1 → coverage-7.16.2}/.readthedocs.yaml +0 -0
- {coverage-7.16.1 → coverage-7.16.2}/CITATION.cff +0 -0
- {coverage-7.16.1 → coverage-7.16.2}/CONTRIBUTORS.txt +0 -0
- {coverage-7.16.1 → coverage-7.16.2}/LICENSE.txt +0 -0
- {coverage-7.16.1 → coverage-7.16.2}/MANIFEST.in +0 -0
- {coverage-7.16.1 → coverage-7.16.2}/NOTICE.txt +0 -0
- {coverage-7.16.1 → coverage-7.16.2}/README.rst +0 -0
- {coverage-7.16.1 → coverage-7.16.2}/__main__.py +0 -0
- {coverage-7.16.1 → coverage-7.16.2}/a1_coverage.pth +0 -0
- {coverage-7.16.1 → coverage-7.16.2}/ci/README.txt +0 -0
- {coverage-7.16.1 → coverage-7.16.2}/ci/comment_on_fixes.py +0 -0
- {coverage-7.16.1 → coverage-7.16.2}/ci/session.py +0 -0
- {coverage-7.16.1 → coverage-7.16.2}/ci/trigger_action.py +0 -0
- {coverage-7.16.1 → coverage-7.16.2}/ci/update_rtfd.py +0 -0
- {coverage-7.16.1 → coverage-7.16.2}/coverage/__init__.py +0 -0
- {coverage-7.16.1 → coverage-7.16.2}/coverage/__main__.py +0 -0
- {coverage-7.16.1 → coverage-7.16.2}/coverage/annotate.py +0 -0
- {coverage-7.16.1 → coverage-7.16.2}/coverage/cmdline.py +0 -0
- {coverage-7.16.1 → coverage-7.16.2}/coverage/collector.py +0 -0
- {coverage-7.16.1 → coverage-7.16.2}/coverage/config.py +0 -0
- {coverage-7.16.1 → coverage-7.16.2}/coverage/control.py +0 -0
- {coverage-7.16.1 → coverage-7.16.2}/coverage/core.py +0 -0
- {coverage-7.16.1 → coverage-7.16.2}/coverage/ctracer/datastack.c +0 -0
- {coverage-7.16.1 → coverage-7.16.2}/coverage/ctracer/datastack.h +0 -0
- {coverage-7.16.1 → coverage-7.16.2}/coverage/ctracer/filedisp.c +0 -0
- {coverage-7.16.1 → coverage-7.16.2}/coverage/ctracer/filedisp.h +0 -0
- {coverage-7.16.1 → coverage-7.16.2}/coverage/ctracer/module.c +0 -0
- {coverage-7.16.1 → coverage-7.16.2}/coverage/ctracer/stats.h +0 -0
- {coverage-7.16.1 → coverage-7.16.2}/coverage/ctracer/tracer.h +0 -0
- {coverage-7.16.1 → coverage-7.16.2}/coverage/ctracer/util.h +0 -0
- {coverage-7.16.1 → coverage-7.16.2}/coverage/data.py +0 -0
- {coverage-7.16.1 → coverage-7.16.2}/coverage/disposition.py +0 -0
- {coverage-7.16.1 → coverage-7.16.2}/coverage/env.py +0 -0
- {coverage-7.16.1 → coverage-7.16.2}/coverage/exceptions.py +0 -0
- {coverage-7.16.1 → coverage-7.16.2}/coverage/execfile.py +0 -0
- {coverage-7.16.1 → coverage-7.16.2}/coverage/html.py +0 -0
- {coverage-7.16.1 → coverage-7.16.2}/coverage/htmlfiles/coverage_html.js +0 -0
- {coverage-7.16.1 → coverage-7.16.2}/coverage/htmlfiles/favicon_32.png +0 -0
- {coverage-7.16.1 → coverage-7.16.2}/coverage/htmlfiles/index.html +0 -0
- {coverage-7.16.1 → coverage-7.16.2}/coverage/htmlfiles/keybd_closed.png +0 -0
- {coverage-7.16.1 → coverage-7.16.2}/coverage/htmlfiles/pyfile.html +0 -0
- {coverage-7.16.1 → coverage-7.16.2}/coverage/htmlfiles/style.css +0 -0
- {coverage-7.16.1 → coverage-7.16.2}/coverage/htmlfiles/style.scss +0 -0
- {coverage-7.16.1 → coverage-7.16.2}/coverage/inorout.py +0 -0
- {coverage-7.16.1 → coverage-7.16.2}/coverage/jsonreport.py +0 -0
- {coverage-7.16.1 → coverage-7.16.2}/coverage/lcovreport.py +0 -0
- {coverage-7.16.1 → coverage-7.16.2}/coverage/misc.py +0 -0
- {coverage-7.16.1 → coverage-7.16.2}/coverage/multiproc.py +0 -0
- {coverage-7.16.1 → coverage-7.16.2}/coverage/numbits.py +0 -0
- {coverage-7.16.1 → coverage-7.16.2}/coverage/patch.py +0 -0
- {coverage-7.16.1 → coverage-7.16.2}/coverage/phystokens.py +0 -0
- {coverage-7.16.1 → coverage-7.16.2}/coverage/plugin.py +0 -0
- {coverage-7.16.1 → coverage-7.16.2}/coverage/plugin_support.py +0 -0
- {coverage-7.16.1 → coverage-7.16.2}/coverage/pth_file.py +0 -0
- {coverage-7.16.1 → coverage-7.16.2}/coverage/py.typed +0 -0
- {coverage-7.16.1 → coverage-7.16.2}/coverage/python.py +0 -0
- {coverage-7.16.1 → coverage-7.16.2}/coverage/regions.py +0 -0
- {coverage-7.16.1 → coverage-7.16.2}/coverage/report.py +0 -0
- {coverage-7.16.1 → coverage-7.16.2}/coverage/results.py +0 -0
- {coverage-7.16.1 → coverage-7.16.2}/coverage/sqldata.py +0 -0
- {coverage-7.16.1 → coverage-7.16.2}/coverage/sqlitedb.py +0 -0
- {coverage-7.16.1 → coverage-7.16.2}/coverage/sysmon.py +0 -0
- {coverage-7.16.1 → coverage-7.16.2}/coverage/templite.py +0 -0
- {coverage-7.16.1 → coverage-7.16.2}/coverage/tomlconfig.py +0 -0
- {coverage-7.16.1 → coverage-7.16.2}/coverage/tracer.pyi +0 -0
- {coverage-7.16.1 → coverage-7.16.2}/coverage/xmlreport.py +0 -0
- {coverage-7.16.1 → coverage-7.16.2}/coverage.egg-info/SOURCES.txt +0 -0
- {coverage-7.16.1 → coverage-7.16.2}/coverage.egg-info/dependency_links.txt +0 -0
- {coverage-7.16.1 → coverage-7.16.2}/coverage.egg-info/entry_points.txt +0 -0
- {coverage-7.16.1 → coverage-7.16.2}/coverage.egg-info/not-zip-safe +0 -0
- {coverage-7.16.1 → coverage-7.16.2}/coverage.egg-info/requires.txt +0 -0
- {coverage-7.16.1 → coverage-7.16.2}/coverage.egg-info/top_level.txt +0 -0
- {coverage-7.16.1 → coverage-7.16.2}/doc/_static/coverage.css +0 -0
- {coverage-7.16.1 → coverage-7.16.2}/doc/api.rst +0 -0
- {coverage-7.16.1 → coverage-7.16.2}/doc/api_coverage.rst +0 -0
- {coverage-7.16.1 → coverage-7.16.2}/doc/api_coveragedata.rst +0 -0
- {coverage-7.16.1 → coverage-7.16.2}/doc/api_exceptions.rst +0 -0
- {coverage-7.16.1 → coverage-7.16.2}/doc/api_module.rst +0 -0
- {coverage-7.16.1 → coverage-7.16.2}/doc/api_plugin.rst +0 -0
- {coverage-7.16.1 → coverage-7.16.2}/doc/branch.rst +0 -0
- {coverage-7.16.1 → coverage-7.16.2}/doc/changes.rst +0 -0
- {coverage-7.16.1 → coverage-7.16.2}/doc/cog_helpers.py +0 -0
- {coverage-7.16.1 → coverage-7.16.2}/doc/commands/cmd_annotate.rst +0 -0
- {coverage-7.16.1 → coverage-7.16.2}/doc/commands/cmd_debug.rst +0 -0
- {coverage-7.16.1 → coverage-7.16.2}/doc/commands/cmd_erase.rst +0 -0
- {coverage-7.16.1 → coverage-7.16.2}/doc/commands/cmd_html.rst +0 -0
- {coverage-7.16.1 → coverage-7.16.2}/doc/commands/cmd_json.rst +0 -0
- {coverage-7.16.1 → coverage-7.16.2}/doc/commands/cmd_lcov.rst +0 -0
- {coverage-7.16.1 → coverage-7.16.2}/doc/commands/cmd_report.rst +0 -0
- {coverage-7.16.1 → coverage-7.16.2}/doc/commands/cmd_reporting.rst +0 -0
- {coverage-7.16.1 → coverage-7.16.2}/doc/commands/cmd_run.rst +0 -0
- {coverage-7.16.1 → coverage-7.16.2}/doc/commands/cmd_xml.rst +0 -0
- {coverage-7.16.1 → coverage-7.16.2}/doc/commands/index.rst +0 -0
- {coverage-7.16.1 → coverage-7.16.2}/doc/config.rst +0 -0
- {coverage-7.16.1 → coverage-7.16.2}/doc/contexts.rst +0 -0
- {coverage-7.16.1 → coverage-7.16.2}/doc/contributing.rst +0 -0
- {coverage-7.16.1 → coverage-7.16.2}/doc/dbschema.rst +0 -0
- {coverage-7.16.1 → coverage-7.16.2}/doc/dict.txt +0 -0
- {coverage-7.16.1 → coverage-7.16.2}/doc/excluding.rst +0 -0
- {coverage-7.16.1 → coverage-7.16.2}/doc/faq.rst +0 -0
- {coverage-7.16.1 → coverage-7.16.2}/doc/howitworks.rst +0 -0
- {coverage-7.16.1 → coverage-7.16.2}/doc/index.rst +0 -0
- {coverage-7.16.1 → coverage-7.16.2}/doc/install.rst +0 -0
- {coverage-7.16.1 → coverage-7.16.2}/doc/media/Tidelift_Logos_RGB_Tidelift_Shorthand_On-White.png +0 -0
- {coverage-7.16.1 → coverage-7.16.2}/doc/media/Tidelift_Logos_RGB_Tidelift_Shorthand_On-White_small.png +0 -0
- {coverage-7.16.1 → coverage-7.16.2}/doc/media/sleepy-snake-600.png +0 -0
- {coverage-7.16.1 → coverage-7.16.2}/doc/media/sleepy-snake-circle-150.png +0 -0
- {coverage-7.16.1 → coverage-7.16.2}/doc/messages.rst +0 -0
- {coverage-7.16.1 → coverage-7.16.2}/doc/migrating.rst +0 -0
- {coverage-7.16.1 → coverage-7.16.2}/doc/other.rst +0 -0
- {coverage-7.16.1 → coverage-7.16.2}/doc/plugins.rst +0 -0
- {coverage-7.16.1 → coverage-7.16.2}/doc/python-coverage.1.txt +0 -0
- {coverage-7.16.1 → coverage-7.16.2}/doc/requirements.in +0 -0
- {coverage-7.16.1 → coverage-7.16.2}/doc/sleepy.rst +0 -0
- {coverage-7.16.1 → coverage-7.16.2}/doc/source.rst +0 -0
- {coverage-7.16.1 → coverage-7.16.2}/doc/subprocess.rst +0 -0
- {coverage-7.16.1 → coverage-7.16.2}/doc/trouble.rst +0 -0
- {coverage-7.16.1 → coverage-7.16.2}/doc/whatsnew5x.rst +0 -0
- {coverage-7.16.1 → coverage-7.16.2}/igor.py +0 -0
- {coverage-7.16.1 → coverage-7.16.2}/lab/README.txt +0 -0
- {coverage-7.16.1 → coverage-7.16.2}/lab/branches.py +0 -0
- {coverage-7.16.1 → coverage-7.16.2}/lab/compare_times.sh +0 -0
- {coverage-7.16.1 → coverage-7.16.2}/lab/coverage-04.dtd +0 -0
- {coverage-7.16.1 → coverage-7.16.2}/lab/extract_code.py +0 -0
- {coverage-7.16.1 → coverage-7.16.2}/lab/goals.py +0 -0
- {coverage-7.16.1 → coverage-7.16.2}/lab/hack_pyc.py +0 -0
- {coverage-7.16.1 → coverage-7.16.2}/lab/notes/arcs-to-branches.txt +0 -0
- {coverage-7.16.1 → coverage-7.16.2}/lab/notes/bug1303.txt +0 -0
- {coverage-7.16.1 → coverage-7.16.2}/lab/notes/pypy-738-decorated-functions.txt +0 -0
- {coverage-7.16.1 → coverage-7.16.2}/lab/parse_all.py +0 -0
- {coverage-7.16.1 → coverage-7.16.2}/lab/parser.py +0 -0
- {coverage-7.16.1 → coverage-7.16.2}/lab/pick.py +0 -0
- {coverage-7.16.1 → coverage-7.16.2}/lab/platform_info.py +0 -0
- {coverage-7.16.1 → coverage-7.16.2}/lab/run_sysmon.py +0 -0
- {coverage-7.16.1 → coverage-7.16.2}/lab/run_trace.py +0 -0
- {coverage-7.16.1 → coverage-7.16.2}/lab/select_contexts.py +0 -0
- {coverage-7.16.1 → coverage-7.16.2}/lab/show_platform.py +0 -0
- {coverage-7.16.1 → coverage-7.16.2}/lab/show_pyc.py +0 -0
- {coverage-7.16.1 → coverage-7.16.2}/lab/treetopy.sh +0 -0
- {coverage-7.16.1 → coverage-7.16.2}/lab/warn_executed.py +0 -0
- {coverage-7.16.1 → coverage-7.16.2}/lab/warn_executed.toml +0 -0
- {coverage-7.16.1 → coverage-7.16.2}/metacov.ini +0 -0
- {coverage-7.16.1 → coverage-7.16.2}/requirements/dev.in +0 -0
- {coverage-7.16.1 → coverage-7.16.2}/requirements/kit.in +0 -0
- {coverage-7.16.1 → coverage-7.16.2}/requirements/light-threads.in +0 -0
- {coverage-7.16.1 → coverage-7.16.2}/requirements/light-threads.txt +0 -0
- {coverage-7.16.1 → coverage-7.16.2}/requirements/mypy.in +0 -0
- {coverage-7.16.1 → coverage-7.16.2}/requirements/pins.txt +0 -0
- {coverage-7.16.1 → coverage-7.16.2}/requirements/pip.in +0 -0
- {coverage-7.16.1 → coverage-7.16.2}/requirements/tox.in +0 -0
- {coverage-7.16.1 → coverage-7.16.2}/setup.cfg +0 -0
- {coverage-7.16.1 → coverage-7.16.2}/setup.py +0 -0
- {coverage-7.16.1 → coverage-7.16.2}/tests/__init__.py +0 -0
- {coverage-7.16.1 → coverage-7.16.2}/tests/conftest.py +0 -0
- {coverage-7.16.1 → coverage-7.16.2}/tests/coveragetest.py +0 -0
- {coverage-7.16.1 → coverage-7.16.2}/tests/covmodzip1.py +0 -0
- {coverage-7.16.1 → coverage-7.16.2}/tests/gold/README.rst +0 -0
- {coverage-7.16.1 → coverage-7.16.2}/tests/gold/annotate/anno_dir/multi.py,cover +0 -0
- {coverage-7.16.1 → coverage-7.16.2}/tests/gold/annotate/anno_dir/z_80084bf2fba02475___init__.py,cover +0 -0
- {coverage-7.16.1 → coverage-7.16.2}/tests/gold/annotate/anno_dir/z_80084bf2fba02475_a.py,cover +0 -0
- {coverage-7.16.1 → coverage-7.16.2}/tests/gold/annotate/anno_dir/z_b039179a8a4ce2c2___init__.py,cover +0 -0
- {coverage-7.16.1 → coverage-7.16.2}/tests/gold/annotate/anno_dir/z_b039179a8a4ce2c2_b.py,cover +0 -0
- {coverage-7.16.1 → coverage-7.16.2}/tests/gold/annotate/encodings/utf8.py,cover +0 -0
- {coverage-7.16.1 → coverage-7.16.2}/tests/gold/annotate/mae/mae.py,cover +0 -0
- {coverage-7.16.1 → coverage-7.16.2}/tests/gold/annotate/multi/a/__init__.py,cover +0 -0
- {coverage-7.16.1 → coverage-7.16.2}/tests/gold/annotate/multi/a/a.py,cover +0 -0
- {coverage-7.16.1 → coverage-7.16.2}/tests/gold/annotate/multi/b/__init__.py,cover +0 -0
- {coverage-7.16.1 → coverage-7.16.2}/tests/gold/annotate/multi/b/b.py,cover +0 -0
- {coverage-7.16.1 → coverage-7.16.2}/tests/gold/annotate/multi/multi.py,cover +0 -0
- {coverage-7.16.1 → coverage-7.16.2}/tests/gold/annotate/white/white.py,cover +0 -0
- {coverage-7.16.1 → coverage-7.16.2}/tests/gold/html/Makefile +0 -0
- {coverage-7.16.1 → coverage-7.16.2}/tests/gold/html/a/a_py.html +0 -0
- {coverage-7.16.1 → coverage-7.16.2}/tests/gold/html/a/class_index.html +0 -0
- {coverage-7.16.1 → coverage-7.16.2}/tests/gold/html/a/function_index.html +0 -0
- {coverage-7.16.1 → coverage-7.16.2}/tests/gold/html/a/index.html +0 -0
- {coverage-7.16.1 → coverage-7.16.2}/tests/gold/html/b_branch/b_py.html +0 -0
- {coverage-7.16.1 → coverage-7.16.2}/tests/gold/html/b_branch/class_index.html +0 -0
- {coverage-7.16.1 → coverage-7.16.2}/tests/gold/html/b_branch/function_index.html +0 -0
- {coverage-7.16.1 → coverage-7.16.2}/tests/gold/html/b_branch/index.html +0 -0
- {coverage-7.16.1 → coverage-7.16.2}/tests/gold/html/bom/bom_py.html +0 -0
- {coverage-7.16.1 → coverage-7.16.2}/tests/gold/html/bom/class_index.html +0 -0
- {coverage-7.16.1 → coverage-7.16.2}/tests/gold/html/bom/function_index.html +0 -0
- {coverage-7.16.1 → coverage-7.16.2}/tests/gold/html/bom/index.html +0 -0
- {coverage-7.16.1 → coverage-7.16.2}/tests/gold/html/contexts/class_index.html +0 -0
- {coverage-7.16.1 → coverage-7.16.2}/tests/gold/html/contexts/function_index.html +0 -0
- {coverage-7.16.1 → coverage-7.16.2}/tests/gold/html/contexts/index.html +0 -0
- {coverage-7.16.1 → coverage-7.16.2}/tests/gold/html/contexts/two_tests_py.html +0 -0
- {coverage-7.16.1 → coverage-7.16.2}/tests/gold/html/isolatin1/class_index.html +0 -0
- {coverage-7.16.1 → coverage-7.16.2}/tests/gold/html/isolatin1/function_index.html +0 -0
- {coverage-7.16.1 → coverage-7.16.2}/tests/gold/html/isolatin1/index.html +0 -0
- {coverage-7.16.1 → coverage-7.16.2}/tests/gold/html/isolatin1/isolatin1_py.html +0 -0
- {coverage-7.16.1 → coverage-7.16.2}/tests/gold/html/multiline/class_index.html +0 -0
- {coverage-7.16.1 → coverage-7.16.2}/tests/gold/html/multiline/function_index.html +0 -0
- {coverage-7.16.1 → coverage-7.16.2}/tests/gold/html/multiline/index.html +0 -0
- {coverage-7.16.1 → coverage-7.16.2}/tests/gold/html/multiline/multiline_py.html +0 -0
- {coverage-7.16.1 → coverage-7.16.2}/tests/gold/html/omit_1/class_index.html +0 -0
- {coverage-7.16.1 → coverage-7.16.2}/tests/gold/html/omit_1/function_index.html +0 -0
- {coverage-7.16.1 → coverage-7.16.2}/tests/gold/html/omit_1/index.html +0 -0
- {coverage-7.16.1 → coverage-7.16.2}/tests/gold/html/omit_1/m1_py.html +0 -0
- {coverage-7.16.1 → coverage-7.16.2}/tests/gold/html/omit_1/m2_py.html +0 -0
- {coverage-7.16.1 → coverage-7.16.2}/tests/gold/html/omit_1/m3_py.html +0 -0
- {coverage-7.16.1 → coverage-7.16.2}/tests/gold/html/omit_1/main_py.html +0 -0
- {coverage-7.16.1 → coverage-7.16.2}/tests/gold/html/omit_2/class_index.html +0 -0
- {coverage-7.16.1 → coverage-7.16.2}/tests/gold/html/omit_2/function_index.html +0 -0
- {coverage-7.16.1 → coverage-7.16.2}/tests/gold/html/omit_2/index.html +0 -0
- {coverage-7.16.1 → coverage-7.16.2}/tests/gold/html/omit_2/m2_py.html +0 -0
- {coverage-7.16.1 → coverage-7.16.2}/tests/gold/html/omit_2/m3_py.html +0 -0
- {coverage-7.16.1 → coverage-7.16.2}/tests/gold/html/omit_2/main_py.html +0 -0
- {coverage-7.16.1 → coverage-7.16.2}/tests/gold/html/omit_3/class_index.html +0 -0
- {coverage-7.16.1 → coverage-7.16.2}/tests/gold/html/omit_3/function_index.html +0 -0
- {coverage-7.16.1 → coverage-7.16.2}/tests/gold/html/omit_3/index.html +0 -0
- {coverage-7.16.1 → coverage-7.16.2}/tests/gold/html/omit_3/m3_py.html +0 -0
- {coverage-7.16.1 → coverage-7.16.2}/tests/gold/html/omit_3/main_py.html +0 -0
- {coverage-7.16.1 → coverage-7.16.2}/tests/gold/html/omit_4/class_index.html +0 -0
- {coverage-7.16.1 → coverage-7.16.2}/tests/gold/html/omit_4/function_index.html +0 -0
- {coverage-7.16.1 → coverage-7.16.2}/tests/gold/html/omit_4/index.html +0 -0
- {coverage-7.16.1 → coverage-7.16.2}/tests/gold/html/omit_4/m1_py.html +0 -0
- {coverage-7.16.1 → coverage-7.16.2}/tests/gold/html/omit_4/m3_py.html +0 -0
- {coverage-7.16.1 → coverage-7.16.2}/tests/gold/html/omit_4/main_py.html +0 -0
- {coverage-7.16.1 → coverage-7.16.2}/tests/gold/html/omit_5/class_index.html +0 -0
- {coverage-7.16.1 → coverage-7.16.2}/tests/gold/html/omit_5/function_index.html +0 -0
- {coverage-7.16.1 → coverage-7.16.2}/tests/gold/html/omit_5/index.html +0 -0
- {coverage-7.16.1 → coverage-7.16.2}/tests/gold/html/omit_5/m1_py.html +0 -0
- {coverage-7.16.1 → coverage-7.16.2}/tests/gold/html/omit_5/main_py.html +0 -0
- {coverage-7.16.1 → coverage-7.16.2}/tests/gold/html/other/blah_blah_other_py.html +0 -0
- {coverage-7.16.1 → coverage-7.16.2}/tests/gold/html/other/class_index.html +0 -0
- {coverage-7.16.1 → coverage-7.16.2}/tests/gold/html/other/function_index.html +0 -0
- {coverage-7.16.1 → coverage-7.16.2}/tests/gold/html/other/here_py.html +0 -0
- {coverage-7.16.1 → coverage-7.16.2}/tests/gold/html/other/index.html +0 -0
- {coverage-7.16.1 → coverage-7.16.2}/tests/gold/html/partial/class_index.html +0 -0
- {coverage-7.16.1 → coverage-7.16.2}/tests/gold/html/partial/function_index.html +0 -0
- {coverage-7.16.1 → coverage-7.16.2}/tests/gold/html/partial/index.html +0 -0
- {coverage-7.16.1 → coverage-7.16.2}/tests/gold/html/partial/partial_py.html +0 -0
- {coverage-7.16.1 → coverage-7.16.2}/tests/gold/html/styled/a_py.html +0 -0
- {coverage-7.16.1 → coverage-7.16.2}/tests/gold/html/styled/class_index.html +0 -0
- {coverage-7.16.1 → coverage-7.16.2}/tests/gold/html/styled/function_index.html +0 -0
- {coverage-7.16.1 → coverage-7.16.2}/tests/gold/html/styled/index.html +0 -0
- {coverage-7.16.1 → coverage-7.16.2}/tests/gold/html/styled/myextra.css +0 -0
- {coverage-7.16.1 → coverage-7.16.2}/tests/gold/html/styled/style.css +0 -0
- {coverage-7.16.1 → coverage-7.16.2}/tests/gold/html/support/coverage_html_cb_dd2e7eb5.js +0 -0
- {coverage-7.16.1 → coverage-7.16.2}/tests/gold/html/support/favicon_32_cb_c827f16f.png +0 -0
- {coverage-7.16.1 → coverage-7.16.2}/tests/gold/html/support/keybd_closed_cb_900cfef5.png +0 -0
- {coverage-7.16.1 → coverage-7.16.2}/tests/gold/html/support/style_cb_a90a112a.css +0 -0
- {coverage-7.16.1 → coverage-7.16.2}/tests/gold/html/unicode/class_index.html +0 -0
- {coverage-7.16.1 → coverage-7.16.2}/tests/gold/html/unicode/function_index.html +0 -0
- {coverage-7.16.1 → coverage-7.16.2}/tests/gold/html/unicode/index.html +0 -0
- {coverage-7.16.1 → coverage-7.16.2}/tests/gold/html/unicode/unicode_py.html +0 -0
- {coverage-7.16.1 → coverage-7.16.2}/tests/gold/testing/getty/gettysburg.txt +0 -0
- {coverage-7.16.1 → coverage-7.16.2}/tests/gold/testing/xml/output.xml +0 -0
- {coverage-7.16.1 → coverage-7.16.2}/tests/gold/xml/x_xml/coverage.xml +0 -0
- {coverage-7.16.1 → coverage-7.16.2}/tests/gold/xml/y_xml_branch/coverage.xml +0 -0
- {coverage-7.16.1 → coverage-7.16.2}/tests/goldtest.py +0 -0
- {coverage-7.16.1 → coverage-7.16.2}/tests/helpers.py +0 -0
- {coverage-7.16.1 → coverage-7.16.2}/tests/hypo.py +0 -0
- {coverage-7.16.1 → coverage-7.16.2}/tests/js/index.html +0 -0
- {coverage-7.16.1 → coverage-7.16.2}/tests/js/tests.js +0 -0
- {coverage-7.16.1 → coverage-7.16.2}/tests/mixins.py +0 -0
- {coverage-7.16.1 → coverage-7.16.2}/tests/modules/aa/__init__.py +0 -0
- {coverage-7.16.1 → coverage-7.16.2}/tests/modules/aa/afile.odd.py +0 -0
- {coverage-7.16.1 → coverage-7.16.2}/tests/modules/aa/afile.py +0 -0
- {coverage-7.16.1 → coverage-7.16.2}/tests/modules/aa/bb/__init__.py +0 -0
- {coverage-7.16.1 → coverage-7.16.2}/tests/modules/aa/bb/bfile.odd.py +0 -0
- {coverage-7.16.1 → coverage-7.16.2}/tests/modules/aa/bb/bfile.py +0 -0
- {coverage-7.16.1 → coverage-7.16.2}/tests/modules/aa/bb/cc/__init__.py +0 -0
- {coverage-7.16.1 → coverage-7.16.2}/tests/modules/aa/bb/cc/cfile.py +0 -0
- {coverage-7.16.1 → coverage-7.16.2}/tests/modules/aa/bb.odd/bfile.py +0 -0
- {coverage-7.16.1 → coverage-7.16.2}/tests/modules/aa/zfile.py +0 -0
- {coverage-7.16.1 → coverage-7.16.2}/tests/modules/ambiguous/__init__.py +0 -0
- {coverage-7.16.1 → coverage-7.16.2}/tests/modules/ambiguous/pkg1/__init__.py +0 -0
- {coverage-7.16.1 → coverage-7.16.2}/tests/modules/ambiguous/pkg1/ambiguous.py +0 -0
- {coverage-7.16.1 → coverage-7.16.2}/tests/modules/checkspec.py +0 -0
- {coverage-7.16.1 → coverage-7.16.2}/tests/modules/covmod1.py +0 -0
- {coverage-7.16.1 → coverage-7.16.2}/tests/modules/namespace_420/sub1/__init__.py +0 -0
- {coverage-7.16.1 → coverage-7.16.2}/tests/modules/pkg1/__init__.py +0 -0
- {coverage-7.16.1 → coverage-7.16.2}/tests/modules/pkg1/__main__.py +0 -0
- {coverage-7.16.1 → coverage-7.16.2}/tests/modules/pkg1/p1a.py +0 -0
- {coverage-7.16.1 → coverage-7.16.2}/tests/modules/pkg1/p1b.py +0 -0
- {coverage-7.16.1 → coverage-7.16.2}/tests/modules/pkg1/p1c.py +0 -0
- {coverage-7.16.1 → coverage-7.16.2}/tests/modules/pkg1/runmod2.py +0 -0
- {coverage-7.16.1 → coverage-7.16.2}/tests/modules/pkg1/sub/__init__.py +0 -0
- {coverage-7.16.1 → coverage-7.16.2}/tests/modules/pkg1/sub/__main__.py +0 -0
- {coverage-7.16.1 → coverage-7.16.2}/tests/modules/pkg1/sub/ps1a.py +0 -0
- {coverage-7.16.1 → coverage-7.16.2}/tests/modules/pkg1/sub/runmod3.py +0 -0
- {coverage-7.16.1 → coverage-7.16.2}/tests/modules/pkg2/__init__.py +0 -0
- {coverage-7.16.1 → coverage-7.16.2}/tests/modules/pkg2/p2a.py +0 -0
- {coverage-7.16.1 → coverage-7.16.2}/tests/modules/pkg2/p2b.py +0 -0
- {coverage-7.16.1 → coverage-7.16.2}/tests/modules/plugins/__init__.py +0 -0
- {coverage-7.16.1 → coverage-7.16.2}/tests/modules/plugins/a_plugin.py +0 -0
- {coverage-7.16.1 → coverage-7.16.2}/tests/modules/plugins/another.py +0 -0
- {coverage-7.16.1 → coverage-7.16.2}/tests/modules/process_test/__init__.py +0 -0
- {coverage-7.16.1 → coverage-7.16.2}/tests/modules/process_test/try_execfile.py +0 -0
- {coverage-7.16.1 → coverage-7.16.2}/tests/modules/runmod1.py +0 -0
- {coverage-7.16.1 → coverage-7.16.2}/tests/modules/usepkgs.py +0 -0
- {coverage-7.16.1 → coverage-7.16.2}/tests/moremodules/namespace_420/sub2/__init__.py +0 -0
- {coverage-7.16.1 → coverage-7.16.2}/tests/moremodules/othermods/__init__.py +0 -0
- {coverage-7.16.1 → coverage-7.16.2}/tests/moremodules/othermods/othera.py +0 -0
- {coverage-7.16.1 → coverage-7.16.2}/tests/moremodules/othermods/otherb.py +0 -0
- {coverage-7.16.1 → coverage-7.16.2}/tests/moremodules/othermods/sub/__init__.py +0 -0
- {coverage-7.16.1 → coverage-7.16.2}/tests/moremodules/othermods/sub/osa.py +0 -0
- {coverage-7.16.1 → coverage-7.16.2}/tests/moremodules/othermods/sub/osb.py +0 -0
- {coverage-7.16.1 → coverage-7.16.2}/tests/osinfo.py +0 -0
- {coverage-7.16.1 → coverage-7.16.2}/tests/plugin1.py +0 -0
- {coverage-7.16.1 → coverage-7.16.2}/tests/plugin2.py +0 -0
- {coverage-7.16.1 → coverage-7.16.2}/tests/plugin_config.py +0 -0
- {coverage-7.16.1 → coverage-7.16.2}/tests/qunit/jquery.tmpl.min.js +0 -0
- {coverage-7.16.1 → coverage-7.16.2}/tests/select_plugin.py +0 -0
- {coverage-7.16.1 → coverage-7.16.2}/tests/strategies.py +0 -0
- {coverage-7.16.1 → coverage-7.16.2}/tests/stress_phystoken.tok +0 -0
- {coverage-7.16.1 → coverage-7.16.2}/tests/stress_phystoken_dos.tok +0 -0
- {coverage-7.16.1 → coverage-7.16.2}/tests/test_annotate.py +0 -0
- {coverage-7.16.1 → coverage-7.16.2}/tests/test_api.py +0 -0
- {coverage-7.16.1 → coverage-7.16.2}/tests/test_cmdline.py +0 -0
- {coverage-7.16.1 → coverage-7.16.2}/tests/test_collector.py +0 -0
- {coverage-7.16.1 → coverage-7.16.2}/tests/test_concurrency.py +0 -0
- {coverage-7.16.1 → coverage-7.16.2}/tests/test_config.py +0 -0
- {coverage-7.16.1 → coverage-7.16.2}/tests/test_core.py +0 -0
- {coverage-7.16.1 → coverage-7.16.2}/tests/test_coverage.py +0 -0
- {coverage-7.16.1 → coverage-7.16.2}/tests/test_data.py +0 -0
- {coverage-7.16.1 → coverage-7.16.2}/tests/test_execfile.py +0 -0
- {coverage-7.16.1 → coverage-7.16.2}/tests/test_filereporter.py +0 -0
- {coverage-7.16.1 → coverage-7.16.2}/tests/test_files.py +0 -0
- {coverage-7.16.1 → coverage-7.16.2}/tests/test_goldtest.py +0 -0
- {coverage-7.16.1 → coverage-7.16.2}/tests/test_html.py +0 -0
- {coverage-7.16.1 → coverage-7.16.2}/tests/test_json.py +0 -0
- {coverage-7.16.1 → coverage-7.16.2}/tests/test_lcov.py +0 -0
- {coverage-7.16.1 → coverage-7.16.2}/tests/test_misc.py +0 -0
- {coverage-7.16.1 → coverage-7.16.2}/tests/test_mixins.py +0 -0
- {coverage-7.16.1 → coverage-7.16.2}/tests/test_numbits.py +0 -0
- {coverage-7.16.1 → coverage-7.16.2}/tests/test_oddball.py +0 -0
- {coverage-7.16.1 → coverage-7.16.2}/tests/test_parser.py +0 -0
- {coverage-7.16.1 → coverage-7.16.2}/tests/test_phystokens.py +0 -0
- {coverage-7.16.1 → coverage-7.16.2}/tests/test_plugins.py +0 -0
- {coverage-7.16.1 → coverage-7.16.2}/tests/test_process.py +0 -0
- {coverage-7.16.1 → coverage-7.16.2}/tests/test_python.py +0 -0
- {coverage-7.16.1 → coverage-7.16.2}/tests/test_regions.py +0 -0
- {coverage-7.16.1 → coverage-7.16.2}/tests/test_report.py +0 -0
- {coverage-7.16.1 → coverage-7.16.2}/tests/test_report_common.py +0 -0
- {coverage-7.16.1 → coverage-7.16.2}/tests/test_report_core.py +0 -0
- {coverage-7.16.1 → coverage-7.16.2}/tests/test_results.py +0 -0
- {coverage-7.16.1 → coverage-7.16.2}/tests/test_setup.py +0 -0
- {coverage-7.16.1 → coverage-7.16.2}/tests/test_sqlitedb.py +0 -0
- {coverage-7.16.1 → coverage-7.16.2}/tests/test_sysmon.py +0 -0
- {coverage-7.16.1 → coverage-7.16.2}/tests/test_templite.py +0 -0
- {coverage-7.16.1 → coverage-7.16.2}/tests/test_testing.py +0 -0
- {coverage-7.16.1 → coverage-7.16.2}/tests/test_venv.py +0 -0
- {coverage-7.16.1 → coverage-7.16.2}/tests/test_version.py +0 -0
- {coverage-7.16.1 → coverage-7.16.2}/tests/test_xml.py +0 -0
- {coverage-7.16.1 → coverage-7.16.2}/tests/zipsrc/zip1/__init__.py +0 -0
- {coverage-7.16.1 → coverage-7.16.2}/tests/zipsrc/zip1/zip1.py +0 -0
- {coverage-7.16.1 → coverage-7.16.2}/tox.ini +0 -0
|
@@ -55,7 +55,7 @@ jobs:
|
|
|
55
55
|
|
|
56
56
|
# Initializes the CodeQL tools for scanning.
|
|
57
57
|
- name: Initialize CodeQL
|
|
58
|
-
uses: github/codeql-action/init@
|
|
58
|
+
uses: github/codeql-action/init@b96794f015dfd88f77b49b1c93e0fa7110f94c63 # v4.38.0
|
|
59
59
|
with:
|
|
60
60
|
languages: ${{ matrix.language }}
|
|
61
61
|
# If you wish to specify custom queries, you can do so here or in a config file.
|
|
@@ -66,7 +66,7 @@ jobs:
|
|
|
66
66
|
# Autobuild attempts to build any compiled languages (C/C++, C#, or Java).
|
|
67
67
|
# If this step fails, then you should remove it and run the build manually (see below)
|
|
68
68
|
- name: Autobuild
|
|
69
|
-
uses: github/codeql-action/autobuild@
|
|
69
|
+
uses: github/codeql-action/autobuild@b96794f015dfd88f77b49b1c93e0fa7110f94c63 # v4.38.0
|
|
70
70
|
|
|
71
71
|
# ℹ️ Command-line programs to run using the OS shell.
|
|
72
72
|
# 📚 https://git.io/JvXDl
|
|
@@ -80,4 +80,4 @@ jobs:
|
|
|
80
80
|
# make release
|
|
81
81
|
|
|
82
82
|
- name: Perform CodeQL Analysis
|
|
83
|
-
uses: github/codeql-action/analyze@
|
|
83
|
+
uses: github/codeql-action/analyze@b96794f015dfd88f77b49b1c93e0fa7110f94c63 # v4.38.0
|
|
@@ -185,7 +185,7 @@ jobs:
|
|
|
185
185
|
persist-credentials: false
|
|
186
186
|
|
|
187
187
|
- name: "Install uv"
|
|
188
|
-
uses: astral-sh/setup-uv@
|
|
188
|
+
uses: astral-sh/setup-uv@bec219d24cd3e171d82865faccec33120bb574f4 # v10.1.0
|
|
189
189
|
with:
|
|
190
190
|
enable-cache: false
|
|
191
191
|
|
|
@@ -168,9 +168,14 @@ jobs:
|
|
|
168
168
|
name: "Tests successful"
|
|
169
169
|
needs:
|
|
170
170
|
- tests
|
|
171
|
+
# Without this, GitHub skips this job when `tests` doesn't succeed, so the
|
|
172
|
+
# gate reports "skipped" instead of failing. `allowed-skips` keeps the
|
|
173
|
+
# deliberate skips (-notests branches, no test-relevant files) passing.
|
|
174
|
+
if: always()
|
|
171
175
|
runs-on: ubuntu-latest
|
|
172
176
|
steps:
|
|
173
177
|
- name: "Decide success or failure"
|
|
174
178
|
uses: re-actors/alls-green@b5b5b37504aa4183270bd3d855c52a67f212be35 # v1.3.0
|
|
175
179
|
with:
|
|
176
180
|
jobs: ${{ toJSON(needs) }}
|
|
181
|
+
allowed-skips: tests
|
|
@@ -22,6 +22,28 @@ upgrading your version of coverage.py.
|
|
|
22
22
|
|
|
23
23
|
.. start-releases
|
|
24
24
|
|
|
25
|
+
.. _changes_7-16-2:
|
|
26
|
+
|
|
27
|
+
Version 7.16.2 — 2026-09-27
|
|
28
|
+
---------------------------
|
|
29
|
+
|
|
30
|
+
- Fix: on Python 3.14 and later, a ``for`` loop completing immediately before a
|
|
31
|
+
function return could mistakenly report an uncovered branch. This is now
|
|
32
|
+
fixed, closing `issue 2168`_.
|
|
33
|
+
|
|
34
|
+
- Fix: on Python 3.14 and later, the ``else`` clause of a ``try`` whose body is
|
|
35
|
+
a ``with`` statement could incorrectly be reported as covered when the
|
|
36
|
+
``with`` raised. This is now fixed, closing `issue 2289`_.
|
|
37
|
+
|
|
38
|
+
- Fix: with ``dynamic_context = test_function``, test methods written as
|
|
39
|
+
``@staticmethod`` or ``@classmethod`` were not given a context of their own.
|
|
40
|
+
Now they are, on Python 3.11 and later. Closes `issue 1923`_.
|
|
41
|
+
|
|
42
|
+
.. _issue 1923: https://github.com/coveragepy/coveragepy/issues/1923
|
|
43
|
+
.. _issue 2168: https://github.com/coveragepy/coveragepy/issues/2168
|
|
44
|
+
.. _issue 2289: https://github.com/coveragepy/coveragepy/issues/2289
|
|
45
|
+
|
|
46
|
+
|
|
25
47
|
.. _changes_7-16-1:
|
|
26
48
|
|
|
27
49
|
Version 7.16.1 — 2026-09-13
|
|
@@ -208,7 +208,7 @@ sample_html_beta: _sample_cog_html #- Generate sample HTML report for a beta rel
|
|
|
208
208
|
|
|
209
209
|
### Kitting: making releases
|
|
210
210
|
|
|
211
|
-
.PHONY: release_version edit_for_release cheats relbranch
|
|
211
|
+
.PHONY: release_version edit_for_release cheats relbranch relcommit
|
|
212
212
|
.PHONY: kit pypi_upload test_upload build_kits update_rtd
|
|
213
213
|
.PHONY: _check_github_auth download_kits
|
|
214
214
|
.PHONY: tag bump_version
|
|
@@ -228,7 +228,7 @@ cheats: #- Create some useful snippets for releasing.
|
|
|
228
228
|
relbranch: # Create the branch for releasing (see howto.txt).
|
|
229
229
|
git switch -c nedbat/release-$$(date +%Y%m%d-%H%M%S)
|
|
230
230
|
|
|
231
|
-
|
|
231
|
+
relcommit: # Commit the release changes (see howto.txt).
|
|
232
232
|
git commit -am "docs: prep for $$(python setup.py --version)"
|
|
233
233
|
|
|
234
234
|
kit: #- Make a source distribution and some wheels.
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: coverage
|
|
3
|
-
Version: 7.16.
|
|
3
|
+
Version: 7.16.2
|
|
4
4
|
Summary: Code coverage measurement for Python
|
|
5
5
|
Home-page: https://github.com/coveragepy/coveragepy
|
|
6
6
|
Author: Ned Batchelder and 263 others
|
|
7
7
|
Author-email: ned@nedbatchelder.com
|
|
8
8
|
License: Apache-2.0
|
|
9
|
-
Project-URL: Documentation, https://coverage.readthedocs.io/en/7.16.
|
|
9
|
+
Project-URL: Documentation, https://coverage.readthedocs.io/en/7.16.2
|
|
10
10
|
Project-URL: Funding, https://tidelift.com/subscription/pkg/pypi-coverage?utm_source=pypi-coverage&utm_medium=referral&utm_campaign=pypi
|
|
11
11
|
Project-URL: Issues, https://github.com/coveragepy/coveragepy/issues
|
|
12
12
|
Project-URL: Mastodon, https://hachyderm.io/@coveragepy
|
|
@@ -83,7 +83,7 @@ Coverage.py runs on these versions of Python:
|
|
|
83
83
|
Documentation is on `Read the Docs`_. Code repository and issue tracker are on
|
|
84
84
|
`GitHub`_.
|
|
85
85
|
|
|
86
|
-
.. _Read the Docs: https://coverage.readthedocs.io/en/7.16.
|
|
86
|
+
.. _Read the Docs: https://coverage.readthedocs.io/en/7.16.2/
|
|
87
87
|
.. _GitHub: https://github.com/coveragepy/coveragepy
|
|
88
88
|
|
|
89
89
|
|
|
@@ -112,7 +112,7 @@ Getting Started
|
|
|
112
112
|
Looking to run ``coverage`` on your test suite? See the `Quick Start section`_
|
|
113
113
|
of the docs.
|
|
114
114
|
|
|
115
|
-
.. _Quick Start section: https://coverage.readthedocs.io/en/7.16.
|
|
115
|
+
.. _Quick Start section: https://coverage.readthedocs.io/en/7.16.2/#quick-start
|
|
116
116
|
|
|
117
117
|
|
|
118
118
|
Change history
|
|
@@ -120,7 +120,7 @@ Change history
|
|
|
120
120
|
|
|
121
121
|
The complete history of changes is on the `change history page`_.
|
|
122
122
|
|
|
123
|
-
.. _change history page: https://coverage.readthedocs.io/en/7.16.
|
|
123
|
+
.. _change history page: https://coverage.readthedocs.io/en/7.16.2/changes.html
|
|
124
124
|
|
|
125
125
|
|
|
126
126
|
Code of Conduct
|
|
@@ -139,7 +139,7 @@ Contributing
|
|
|
139
139
|
Found a bug? Want to help improve the code or documentation? See the
|
|
140
140
|
`Contributing section`_ of the docs.
|
|
141
141
|
|
|
142
|
-
.. _Contributing section: https://coverage.readthedocs.io/en/7.16.
|
|
142
|
+
.. _Contributing section: https://coverage.readthedocs.io/en/7.16.2/contributing.html
|
|
143
143
|
|
|
144
144
|
|
|
145
145
|
Security
|
|
@@ -167,7 +167,7 @@ Licensed under the `Apache 2.0 License`_. For details, see `NOTICE.txt`_.
|
|
|
167
167
|
:target: https://github.com/coveragepy/coveragepy/actions/workflows/quality.yml
|
|
168
168
|
:alt: Quality check status
|
|
169
169
|
.. |docs| image:: https://readthedocs.org/projects/coverage/badge/?version=latest&style=flat
|
|
170
|
-
:target: https://coverage.readthedocs.io/en/7.16.
|
|
170
|
+
:target: https://coverage.readthedocs.io/en/7.16.2/
|
|
171
171
|
:alt: Documentation
|
|
172
172
|
.. |kit| image:: https://img.shields.io/pypi/v/coverage
|
|
173
173
|
:target: https://pypi.org/project/coverage/
|
|
@@ -106,6 +106,10 @@ RETURNS = op_set(
|
|
|
106
106
|
"RETURN_GENERATOR",
|
|
107
107
|
)
|
|
108
108
|
|
|
109
|
+
# Opcodes that do not fall through. The bytecode after them belongs to
|
|
110
|
+
# another path (for example the swallowed-exception side of a with).
|
|
111
|
+
NO_FALL_THROUGH = op_set("RERAISE")
|
|
112
|
+
|
|
109
113
|
|
|
110
114
|
# CACHE doesn't exist in Python 3.10, but the branch resolver is only used
|
|
111
115
|
# on 3.14+, so a placeholder value is fine.
|
|
@@ -203,6 +207,8 @@ class BranchArcResolver:
|
|
|
203
207
|
return None
|
|
204
208
|
if op in RETURNS:
|
|
205
209
|
return (from_line, -self.code.co_firstlineno)
|
|
210
|
+
if op in NO_FALL_THROUGH:
|
|
211
|
+
return None
|
|
206
212
|
ext_arg = 0
|
|
207
213
|
offset += 2
|
|
208
214
|
return None
|
|
@@ -6,6 +6,7 @@
|
|
|
6
6
|
from __future__ import annotations
|
|
7
7
|
|
|
8
8
|
from collections.abc import Sequence
|
|
9
|
+
from inspect import CO_OPTIMIZED # pylint: disable=no-name-in-module
|
|
9
10
|
from types import FrameType
|
|
10
11
|
|
|
11
12
|
from coverage.types import TShouldStartContextFn
|
|
@@ -63,6 +64,12 @@ def qualname_from_frame(frame: FrameType) -> str | None:
|
|
|
63
64
|
if method is None:
|
|
64
65
|
func = frame.f_globals.get(fname)
|
|
65
66
|
if func is None:
|
|
67
|
+
# Static and class methods have no `self` and aren't in the module
|
|
68
|
+
# globals, but the code object knows its own qualified name.
|
|
69
|
+
# PYVERSIONS: co_qualname is 3.11+
|
|
70
|
+
qualname = getattr(co, "co_qualname", None)
|
|
71
|
+
if qualname and co.co_flags & CO_OPTIMIZED and "<locals>" not in qualname:
|
|
72
|
+
return f"{frame.f_globals.get('__name__')}.{qualname}"
|
|
66
73
|
return None
|
|
67
74
|
return f"{func.__module__}.{fname}"
|
|
68
75
|
|
|
@@ -771,6 +771,19 @@ CTracer_handle_return(CTracer *self, PyFrameObject *frame)
|
|
|
771
771
|
real_return = !(is_yield || is_yield_from);
|
|
772
772
|
#endif
|
|
773
773
|
if (real_return) {
|
|
774
|
+
#if PY_VERSION_HEX >= 0x030E0000
|
|
775
|
+
/* Python 3.14 can report a new line only on the return event. */
|
|
776
|
+
int return_line = PyFrame_GetLineNumber(frame);
|
|
777
|
+
if (
|
|
778
|
+
self->pcur_entry->file_tracer == Py_None &&
|
|
779
|
+
return_line != self->pcur_entry->last_line
|
|
780
|
+
) {
|
|
781
|
+
if (CTracer_record_pair(self, self->pcur_entry->last_line, return_line) < 0) {
|
|
782
|
+
goto error;
|
|
783
|
+
}
|
|
784
|
+
self->pcur_entry->last_line = return_line;
|
|
785
|
+
}
|
|
786
|
+
#endif
|
|
774
787
|
int first = MyFrame_BorrowCode(frame)->co_firstlineno;
|
|
775
788
|
if (CTracer_record_pair(self, self->pcur_entry->last_line, -first) < 0) {
|
|
776
789
|
goto error;
|
|
@@ -373,15 +373,12 @@ def filter_text(text: str, filters: Iterable[Callable[[str], str]]) -> str:
|
|
|
373
373
|
run.
|
|
374
374
|
|
|
375
375
|
"""
|
|
376
|
-
clean_text = text.rstrip()
|
|
377
|
-
ending = text[len(clean_text) :]
|
|
378
|
-
text = clean_text
|
|
379
376
|
for filter_fn in filters:
|
|
380
377
|
lines = []
|
|
381
|
-
for line in text.splitlines():
|
|
382
|
-
lines.extend(filter_fn(line).splitlines())
|
|
383
|
-
text = "
|
|
384
|
-
return text
|
|
378
|
+
for line in text.splitlines(keepends=True):
|
|
379
|
+
lines.extend(filter_fn(line).splitlines(keepends=True))
|
|
380
|
+
text = "".join(lines)
|
|
381
|
+
return text
|
|
385
382
|
|
|
386
383
|
|
|
387
384
|
class CwdTracker:
|
|
@@ -237,7 +237,7 @@ class Matcher(abc.ABC):
|
|
|
237
237
|
return f"<{self.__class__.__name__} {self.name} {self.strs!r}>"
|
|
238
238
|
|
|
239
239
|
@abc.abstractmethod
|
|
240
|
-
def match(self, s: str) -> bool:
|
|
240
|
+
def match(self, s: str, /) -> bool:
|
|
241
241
|
"""Does this string match?"""
|
|
242
242
|
|
|
243
243
|
def info(self) -> list[str]:
|
|
@@ -270,7 +270,7 @@ class TreeMatcher(Matcher):
|
|
|
270
270
|
debug(f" Normalized {p!r} to {ap!r}")
|
|
271
271
|
self.paths.append(ap)
|
|
272
272
|
|
|
273
|
-
def match(self, fpath: str) -> bool:
|
|
273
|
+
def match(self, fpath: str, /) -> bool:
|
|
274
274
|
"""Does `fpath` indicate a file in one of our trees?"""
|
|
275
275
|
fpath = abs_file(fpath)
|
|
276
276
|
for p in self.paths:
|
|
@@ -297,7 +297,7 @@ class ModuleMatcher(Matcher):
|
|
|
297
297
|
self.modules = list(module_names)
|
|
298
298
|
super().__init__(self.modules, name=name, caption=caption, debug=debug)
|
|
299
299
|
|
|
300
|
-
def match(self, module_name: str) -> bool:
|
|
300
|
+
def match(self, module_name: str, /) -> bool:
|
|
301
301
|
"""Does `module_name` indicate a module in one of our packages?"""
|
|
302
302
|
if not module_name:
|
|
303
303
|
return False
|
|
@@ -327,7 +327,7 @@ class GlobMatcher(Matcher):
|
|
|
327
327
|
super().__init__(self.pats, name=name, caption=caption, debug=debug)
|
|
328
328
|
self.re = globs_to_regex(self.pats, case_insensitive=env.WINDOWS)
|
|
329
329
|
|
|
330
|
-
def match(self, fpath: str) -> bool:
|
|
330
|
+
def match(self, fpath: str, /) -> bool:
|
|
331
331
|
"""Does `fpath` match one of our file name patterns?"""
|
|
332
332
|
return self.re.match(fpath) is not None
|
|
333
333
|
|
|
@@ -40,6 +40,9 @@ set_TArc = set[TArc]
|
|
|
40
40
|
# PYVERSIONS: RESUME is new in Python3.11
|
|
41
41
|
RESUME = dis.opmap.get("RESUME")
|
|
42
42
|
RETURN_VALUE = dis.opmap["RETURN_VALUE"]
|
|
43
|
+
# PyPy attributes the exception-handler PUSH_EXC_INFO to the try/else line.
|
|
44
|
+
# That instruction is not the else body. Skip it so the else line stays missing.
|
|
45
|
+
PUSH_EXC_INFO = dis.opmap.get("PUSH_EXC_INFO")
|
|
43
46
|
if RESUME is None:
|
|
44
47
|
YIELD_VALUE = dis.opmap["YIELD_VALUE"]
|
|
45
48
|
YIELD_FROM = dis.opmap["YIELD_FROM"]
|
|
@@ -257,6 +260,15 @@ class PyTracer(Tracer):
|
|
|
257
260
|
elif event == "line":
|
|
258
261
|
# Record an executed line.
|
|
259
262
|
if self.cur_file_data is not None:
|
|
263
|
+
if PUSH_EXC_INFO is not None:
|
|
264
|
+
lasti = frame.f_lasti
|
|
265
|
+
code = frame.f_code.co_code
|
|
266
|
+
if (
|
|
267
|
+
isinstance(lasti, int)
|
|
268
|
+
and 0 <= lasti < len(code)
|
|
269
|
+
and code[lasti] == PUSH_EXC_INFO
|
|
270
|
+
):
|
|
271
|
+
return self._cached_bound_method_trace
|
|
260
272
|
flineno: TLineNo = frame.f_lineno
|
|
261
273
|
|
|
262
274
|
if self.trace_arcs:
|
|
@@ -292,6 +304,10 @@ class PyTracer(Tracer):
|
|
|
292
304
|
else:
|
|
293
305
|
real_return = True
|
|
294
306
|
if real_return:
|
|
307
|
+
# Python 3.14 can report a new line only on the return event.
|
|
308
|
+
if env.PYVERSION >= (3, 14) and frame.f_lineno != self.last_line:
|
|
309
|
+
cast(set_TArc, self.cur_file_data).add((self.last_line, frame.f_lineno))
|
|
310
|
+
self.last_line = frame.f_lineno
|
|
295
311
|
first = frame.f_code.co_firstlineno
|
|
296
312
|
cast(set_TArc, self.cur_file_data).add((self.last_line, -first))
|
|
297
313
|
|
|
@@ -100,18 +100,23 @@ class Tracer(Protocol):
|
|
|
100
100
|
|
|
101
101
|
def start(self) -> TTraceFn | None:
|
|
102
102
|
"""Start this tracer, return a trace function if based on sys.settrace."""
|
|
103
|
+
...
|
|
103
104
|
|
|
104
105
|
def stop(self) -> None:
|
|
105
106
|
"""Stop this tracer."""
|
|
107
|
+
...
|
|
106
108
|
|
|
107
109
|
def activity(self) -> bool:
|
|
108
110
|
"""Has there been any activity?"""
|
|
111
|
+
...
|
|
109
112
|
|
|
110
113
|
def reset_activity(self) -> None:
|
|
111
114
|
"""Reset the activity() flag."""
|
|
115
|
+
...
|
|
112
116
|
|
|
113
117
|
def get_stats(self) -> dict[str, int] | None:
|
|
114
118
|
"""Return a dictionary of statistics, or None."""
|
|
119
|
+
...
|
|
115
120
|
|
|
116
121
|
|
|
117
122
|
## Coverage
|
|
@@ -143,6 +148,7 @@ class TConfigurable(Protocol):
|
|
|
143
148
|
Returns the value of the option.
|
|
144
149
|
|
|
145
150
|
"""
|
|
151
|
+
...
|
|
146
152
|
|
|
147
153
|
def set_option(self, option_name: str, value: TConfigValueIn | TConfigSectionIn) -> None:
|
|
148
154
|
"""Set an option in the configuration.
|
|
@@ -154,6 +160,7 @@ class TConfigurable(Protocol):
|
|
|
154
160
|
`value` is the new value for the option.
|
|
155
161
|
|
|
156
162
|
"""
|
|
163
|
+
...
|
|
157
164
|
|
|
158
165
|
|
|
159
166
|
class TPluginConfig(Protocol):
|
|
@@ -161,6 +168,7 @@ class TPluginConfig(Protocol):
|
|
|
161
168
|
|
|
162
169
|
def get_plugin_options(self, plugin: str) -> TConfigSectionOut:
|
|
163
170
|
"""Get the options for a plugin."""
|
|
171
|
+
...
|
|
164
172
|
|
|
165
173
|
|
|
166
174
|
## Parsing
|
|
@@ -185,9 +193,11 @@ class TDebugCtl(Protocol):
|
|
|
185
193
|
|
|
186
194
|
def should(self, option: str) -> bool:
|
|
187
195
|
"""Decide whether to output debug information in category `option`."""
|
|
196
|
+
...
|
|
188
197
|
|
|
189
198
|
def write(self, msg: str) -> None:
|
|
190
199
|
"""Write a line of debug output."""
|
|
200
|
+
...
|
|
191
201
|
|
|
192
202
|
|
|
193
203
|
class TWritable(Protocol):
|
|
@@ -195,3 +205,4 @@ class TWritable(Protocol):
|
|
|
195
205
|
|
|
196
206
|
def write(self, msg: str) -> None:
|
|
197
207
|
"""Write a message."""
|
|
208
|
+
...
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: coverage
|
|
3
|
-
Version: 7.16.
|
|
3
|
+
Version: 7.16.2
|
|
4
4
|
Summary: Code coverage measurement for Python
|
|
5
5
|
Home-page: https://github.com/coveragepy/coveragepy
|
|
6
6
|
Author: Ned Batchelder and 263 others
|
|
7
7
|
Author-email: ned@nedbatchelder.com
|
|
8
8
|
License: Apache-2.0
|
|
9
|
-
Project-URL: Documentation, https://coverage.readthedocs.io/en/7.16.
|
|
9
|
+
Project-URL: Documentation, https://coverage.readthedocs.io/en/7.16.2
|
|
10
10
|
Project-URL: Funding, https://tidelift.com/subscription/pkg/pypi-coverage?utm_source=pypi-coverage&utm_medium=referral&utm_campaign=pypi
|
|
11
11
|
Project-URL: Issues, https://github.com/coveragepy/coveragepy/issues
|
|
12
12
|
Project-URL: Mastodon, https://hachyderm.io/@coveragepy
|
|
@@ -83,7 +83,7 @@ Coverage.py runs on these versions of Python:
|
|
|
83
83
|
Documentation is on `Read the Docs`_. Code repository and issue tracker are on
|
|
84
84
|
`GitHub`_.
|
|
85
85
|
|
|
86
|
-
.. _Read the Docs: https://coverage.readthedocs.io/en/7.16.
|
|
86
|
+
.. _Read the Docs: https://coverage.readthedocs.io/en/7.16.2/
|
|
87
87
|
.. _GitHub: https://github.com/coveragepy/coveragepy
|
|
88
88
|
|
|
89
89
|
|
|
@@ -112,7 +112,7 @@ Getting Started
|
|
|
112
112
|
Looking to run ``coverage`` on your test suite? See the `Quick Start section`_
|
|
113
113
|
of the docs.
|
|
114
114
|
|
|
115
|
-
.. _Quick Start section: https://coverage.readthedocs.io/en/7.16.
|
|
115
|
+
.. _Quick Start section: https://coverage.readthedocs.io/en/7.16.2/#quick-start
|
|
116
116
|
|
|
117
117
|
|
|
118
118
|
Change history
|
|
@@ -120,7 +120,7 @@ Change history
|
|
|
120
120
|
|
|
121
121
|
The complete history of changes is on the `change history page`_.
|
|
122
122
|
|
|
123
|
-
.. _change history page: https://coverage.readthedocs.io/en/7.16.
|
|
123
|
+
.. _change history page: https://coverage.readthedocs.io/en/7.16.2/changes.html
|
|
124
124
|
|
|
125
125
|
|
|
126
126
|
Code of Conduct
|
|
@@ -139,7 +139,7 @@ Contributing
|
|
|
139
139
|
Found a bug? Want to help improve the code or documentation? See the
|
|
140
140
|
`Contributing section`_ of the docs.
|
|
141
141
|
|
|
142
|
-
.. _Contributing section: https://coverage.readthedocs.io/en/7.16.
|
|
142
|
+
.. _Contributing section: https://coverage.readthedocs.io/en/7.16.2/contributing.html
|
|
143
143
|
|
|
144
144
|
|
|
145
145
|
Security
|
|
@@ -167,7 +167,7 @@ Licensed under the `Apache 2.0 License`_. For details, see `NOTICE.txt`_.
|
|
|
167
167
|
:target: https://github.com/coveragepy/coveragepy/actions/workflows/quality.yml
|
|
168
168
|
:alt: Quality check status
|
|
169
169
|
.. |docs| image:: https://readthedocs.org/projects/coverage/badge/?version=latest&style=flat
|
|
170
|
-
:target: https://coverage.readthedocs.io/en/7.16.
|
|
170
|
+
:target: https://coverage.readthedocs.io/en/7.16.2/
|
|
171
171
|
:alt: Documentation
|
|
172
172
|
.. |kit| image:: https://img.shields.io/pypi/v/coverage
|
|
173
173
|
:target: https://pypi.org/project/coverage/
|
|
@@ -37,9 +37,9 @@ so that every data file is distinct::
|
|
|
37
37
|
|
|
38
38
|
You can also define a new data file name with the ``[run] data_file`` option.
|
|
39
39
|
|
|
40
|
-
Once you have created a number of
|
|
41
|
-
single directory, and use the **combine** command to combine them into
|
|
42
|
-
.coverage data file::
|
|
40
|
+
Once you have created a number of separate data files, you can also copy them
|
|
41
|
+
all to a single directory, and use the **combine** command to combine them into
|
|
42
|
+
one .coverage data file::
|
|
43
43
|
|
|
44
44
|
$ coverage combine
|
|
45
45
|
|
|
@@ -99,6 +99,28 @@ want to keep those files, use the ``--keep`` command-line option.
|
|
|
99
99
|
.. [[[end]]] (sum: ARyg8KB1fE)
|
|
100
100
|
|
|
101
101
|
|
|
102
|
+
Parallel test runners
|
|
103
|
+
.....................
|
|
104
|
+
|
|
105
|
+
If independent test runners use coverage.py concurrently in the same working
|
|
106
|
+
directory, give each runner a different *base* data file name. This is
|
|
107
|
+
important with tools such as ``tox --parallel``: coverage's parallel mode makes
|
|
108
|
+
the individual measurement files unique, but separate tox environments can
|
|
109
|
+
still combine or erase files using the same base name at the same time.
|
|
110
|
+
|
|
111
|
+
You can use tox settings to give each tox environment a distinct base coverage
|
|
112
|
+
data file name so their combine steps won't collide::
|
|
113
|
+
|
|
114
|
+
[testenv]
|
|
115
|
+
setenv =
|
|
116
|
+
COVERAGE_FILE = {toxinidir}/.coverage.{envname}
|
|
117
|
+
|
|
118
|
+
Each environment can run coverage in parallel, and combine their data files
|
|
119
|
+
into a distinct data file. After the test-running tox environments have
|
|
120
|
+
finished, a final second-level combining environment can combine those files
|
|
121
|
+
using their common ``.coverage`` prefix, as described above.
|
|
122
|
+
|
|
123
|
+
|
|
102
124
|
.. _cmd_combine_remapping:
|
|
103
125
|
|
|
104
126
|
Re-mapping paths
|
|
@@ -69,11 +69,11 @@ project = "Coverage.py"
|
|
|
69
69
|
# @@@ editable
|
|
70
70
|
copyright = "2009–2026, Ned Batchelder" # pylint: disable=redefined-builtin
|
|
71
71
|
# The short X.Y.Z version.
|
|
72
|
-
version = "7.16.
|
|
72
|
+
version = "7.16.2"
|
|
73
73
|
# The full version, including alpha/beta/rc tags.
|
|
74
|
-
release = "7.16.
|
|
74
|
+
release = "7.16.2"
|
|
75
75
|
# The date of release, in "monthname day, year" format.
|
|
76
|
-
release_date = "September
|
|
76
|
+
release_date = "September 27, 2026"
|
|
77
77
|
# @@@ end
|
|
78
78
|
|
|
79
79
|
rst_epilog = f"""
|