Sourced from coverage's releases.
7.15.4
Version 7.15.4 — 2026-08-06
- Fix: in the HTML report, a source file name containing a double quote (legal on POSIX) wasn’t escaped where it’s dropped into the
hrefof the index and prev/next links, so it could close the attribute early and inject markup. Page URLs are now escaped. Thanks, Rajath Mohare.- Fix: the LCOV report wrote file names and other fields into its line-oriented records without neutralizing control characters. A measured file whose name contained a newline (legal on POSIX) could forge extra records, inflating the coverage seen by tools that read the report. Control characters in a field are now replaced. Thanks, Rajath Mohare.
- Wheels are now provided for Python 3.15.
:arrow_right: PyPI page: coverage 7.15.4. :arrow_right: To install:
python3 -m pip install coverage==7.15.4
Sourced from coverage's changelog.
Version 7.15.4 — 2026-08-06
Fix: in the HTML report, a source file name containing a double quote (legal on POSIX) wasn't escaped where it's dropped into the
hrefof the index and prev/next links, so it could close the attribute early and inject markup. Page URLs are now escaped. Thanks,Rajath Mohare <pull 2227_>_.Fix: the LCOV report wrote file names and other fields into its line-oriented records without neutralizing control characters. A measured file whose name contained a newline (legal on POSIX) could forge extra records, inflating the coverage seen by tools that read the report. Control characters in a field are now replaced. Thanks,
Rajath Mohare <pull 2226_>_.Wheels are now provided for Python 3.15.
.. _pull 2226: coveragepy/coveragepy#2226 .. _pull 2227: coveragepy/coveragepy#2227
.. _changes_7-15-3:
4c0e7ff
docs: sample HTML for 7.15.4db4cc32
docs: prep for 7.15.4c33085c
style: start gradual move to ruff 0.1653a0fd5
fix: neutralize control characters in lcov report fields (#2226)b64d53d
build: make 3.15 wheels53792ab
build: show the python version for kitsf6b03c7
chore: make upgrade_one package=cibuildwheeld9b660a
chore: make upgradeb128a31
docs: oops, move this entry to the correct placea7a2c15
fix: escape filename urls in html report href attributes (#2227)3c133fa
Sync mypy and bump versionc963cc9
Build wheels for Python 3.15 (#43)Sourced from packaging's releases.
26.3
What's Changed
Features
- Add a public
VersionRangeAPI andSpecifierSet.to_range(), representing the versions a specifier set accepts as an interval set that supports intersection, union, difference, complement, set relations, membership tests, and filtering.VersionRange.to_specifier_set()converts a range back to aSpecifierSetwhere a PEP 440 form exists. (#1267, #1270, #1298)- PEP 808: accept
Metadata-Version: 2.6. (#1194)- Add a
limitargument toparse_tag()for compressed tag sets. (#1220)- Add a
prefer_sdist_predicateargument toPylock.select()to prefer source distributions over wheels for selected packages. (#1334)- Add
pure_python_tags()to generate the pure-Python tags for a Python version without touching the running platform. (#1346)- Add
SpecifierSet.is_subset(),SpecifierSet.is_superset(), andSpecifierSet.is_disjoint(), which compare the versions two specifier sets accept. (#1313)Behavior adaptations
- Drop support for Python 3.8; packaging now requires Python 3.9 or later. (#1157)
- Prefer native
linux_*platform tags overmanylinuxandmusllinuxtags on Linux. (#160)Fixes for versions and specifiers
- Raise
InvalidVersioninstead ofTypeErrorwhenVersionis given a non-string. (#1319)- Raise
InvalidVersionfor non-string pre-release letters passed toVersion.from_parts. (#1241)- Fix an
AttributeErrorwhen hashing internally trimmed versions. (#1242)- Fix
SpecifierSet.is_unsatisfiablefor post-release boundary intersections. (#1257)Fixes for requirements and markers
- Make
Requirement.__hash__consistent with__eq__for trailing-zero-equivalent specifiers (e.g.foo==1.0.0andfoo==1.0.0.0), so equal requirements hash equal and deduplicate in sets and dicts. (#1232)- Normalize requested extra names before comparing or hashing requirements. (#644)
- Preserve a
Requirement's specifierprereleasesoverride across a pickle round trip. (#1204)- Raise
InvalidRequirementinstead ofInvalidSpecifierwhen a requirement contains an invalid specifier. (#1332)- Clarify the error for post-release prefix wildcards like
==1.0.post1.*. (#1299)- Preserve quoting semantics when serializing marker values, so round-tripped markers parse back to the same marker. (#1213)
- Keep the parentheses of a nested group when serializing markers. (#1316)
- Normalize
extraanddependency_groupsvalues in nested markers at parse time. (#1246, #1310)- Raise
UndefinedComparisonwhen a set-valued variable likeextrasis used outside the membership form. (#1265)- Raise
UndefinedEnvironmentName(aKeyErrorsubclass) for missing environment keys during marker evaluation. (#1276)- Wrap malformed string literal errors in
InvalidMarker/InvalidRequirementinstead of leaking a low-level error. (#1249)- Reject requirements and markers with a trailing line break. (#1345)
Fixes for metadata and licenses
- Collect all
from_emailvalidation errors into oneExceptionGroupinstead of raising the first. (#1268)- Accept the UTF-8 charset case-insensitively in email payloads. (#1330)
- Reject malformed
Description-Content-Typevalues. (#1329)- Don't rewrite user values that contain
{field}placeholders in error messages. (#1327)- Route multipart email payloads to
unparsedinstead of asserting. (#1247)- Make
InvalidMetadataandCyclicDependencyGrouppicklable. (#1328)- Fold every line boundary
str.splitlinesrecognizes when writing a header withRFC822Message. (#1356)
... (truncated)
Sourced from packaging's changelog.
26.3 - 2026-08-03
Features:
- Add a public :class:
~packaging.ranges.VersionRangeAPI and
:meth:SpecifierSet.to_range() <packaging.specifiers.SpecifierSet.to_range>,
representing the versions a specifier set accepts as an interval set that
supports intersection, union, difference, complement, set relations,
membership tests, and filtering.
:meth:~packaging.ranges.VersionRange.to_specifier_setconverts a range back
to a :class:~packaging.specifiers.SpecifierSetwhere a PEP 440 form exists.
(:pull:1267, :pull:1270, :pull:1298)- PEP 808: accept
Metadata-Version: 2.6. (:pull:1194)- Add a
limitargument toparse_tag()for compressed tag sets.
(:issue:1220)- Add a
prefer_sdist_predicateargument toPylock.select()to prefer
source distributions over wheels for selected packages. (:pull:1334)- Add :func:
~packaging.tags.pure_python_tagsto generate the pure-Python
tags for a Python version without touching the running platform.
(:pull:1346)- Add :meth:
SpecifierSet.is_subset() <packaging.specifiers.SpecifierSet.is_subset>, :meth:~packaging.specifiers.SpecifierSet.is_superset,
and :meth:~packaging.specifiers.SpecifierSet.is_disjoint, which compare the
versions two specifier sets accept. (:pull:1313)Behavior adaptations:
- Drop support for Python 3.8; packaging now requires Python 3.9 or later.
(:pull:1157)- Prefer native
linux_*platform tags overmanylinuxandmusllinux
tags on Linux. (:issue:160)Fixes for versions and specifiers:
- Raise
InvalidVersioninstead ofTypeErrorwhenVersionis given a
non-string. (:pull:1319)- Raise
InvalidVersionfor non-string pre-release letters passed to
Version.from_parts. (:pull:1241)- Fix an
AttributeErrorwhen hashing internally trimmed versions.
(:pull:1242)- Fix
SpecifierSet.is_unsatisfiablefor post-release boundary
intersections. (:pull:1257)Fixes for requirements and markers:
- Make
Requirement.__hash__consistent with__eq__for
trailing-zero-equivalent specifiers (e.g.foo==1.0.0and
foo==1.0.0.0), so equal requirements hash equal and deduplicate in
sets and dicts. (:pull:1232)
</tr></table>
... (truncated)
929fd4b
Bump for releasef300ebf
chore(deps): bump the pre-commit group with 5 updates (#1357)f91d975
ci(downstream): bump hatchling to 1.31.0 and fix its pytest rootdir (#1361)b1a7124
chore(deps): bump the github-actions group with 7 updates (#1358)2d873eb
fix(metadata): fold every line boundary when writing headers (#1356)413d006
docs: changelog for 26.3 (#1343)4eb0753
docs(metadata): explain selective field validation (#1342)77e9ed4
feat(tags): add pure Python tag generator (#1346)7cea5e8
ci: drop 3.13t on Windows (3.13.14t may fail to build, run takes 9
minutes) (...45a8b34
docs: add missing versionadded/versionchanged directives (#1344)Sourced from cffi's releases.
v2.1.1
What's Changed
- Minimize internal Python API usage for interpreter and thread state sampling where possible. Avoids breaking ABI change in Python >= 3.15.0b4 (python-cffi/cffi#269).
Full Changelog: https://github.com/python-cffi/cffi/compare/v2.1.0...v2.1.1
fd33e77
New release 2.1.156a7876
Use PyGILState_Ensure to avoid accessing CPython internals (#269)
(#270)Sourced from pip's changelog.
26.2.1 (2026-08-04)
Bug Fixes
- Reallow keyring installed in a (non-activated) virtual environment to be be used via the
importprovider method while installing build dependencies. ([#14227](https://github.com/pypa/pip/issues/14227) <https://github.com/pypa/pip/issues/14227>_)