Update dependency multidict to v6.8.0 - #27
Open
renovate[bot] wants to merge 1 commit into
Open
Conversation
renovate
Bot
force-pushed
the
renovate/multidict-6.x
branch
from
March 17, 2025 18:54
7de6b10 to
9e55b37
Compare
renovate
Bot
force-pushed
the
renovate/multidict-6.x
branch
from
March 31, 2025 22:06
9e55b37 to
bb13ba4
Compare
renovate
Bot
force-pushed
the
renovate/multidict-6.x
branch
from
April 2, 2025 01:18
bb13ba4 to
60b1705
Compare
renovate
Bot
force-pushed
the
renovate/multidict-6.x
branch
from
April 2, 2025 18:43
60b1705 to
7455c9e
Compare
renovate
Bot
force-pushed
the
renovate/multidict-6.x
branch
from
April 3, 2025 21:52
7455c9e to
1b3d030
Compare
renovate
Bot
force-pushed
the
renovate/multidict-6.x
branch
2 times, most recently
from
April 9, 2025 19:32
c3e7c7a to
aff1110
Compare
renovate
Bot
force-pushed
the
renovate/multidict-6.x
branch
2 times, most recently
from
April 10, 2025 22:36
1319fa5 to
135798a
Compare
renovate
Bot
force-pushed
the
renovate/multidict-6.x
branch
from
May 19, 2025 20:50
135798a to
f363d1e
Compare
renovate
Bot
force-pushed
the
renovate/multidict-6.x
branch
from
June 17, 2025 19:25
f363d1e to
aba97bc
Compare
renovate
Bot
force-pushed
the
renovate/multidict-6.x
branch
from
June 24, 2025 22:45
aba97bc to
5d91b55
Compare
renovate
Bot
force-pushed
the
renovate/multidict-6.x
branch
from
June 27, 2025 10:34
5d91b55 to
c3ed436
Compare
renovate
Bot
force-pushed
the
renovate/multidict-6.x
branch
from
June 28, 2025 13:05
c3ed436 to
0aabb9d
Compare
renovate
Bot
force-pushed
the
renovate/multidict-6.x
branch
from
June 28, 2025 16:29
0aabb9d to
0eec5d9
Compare
renovate
Bot
force-pushed
the
renovate/multidict-6.x
branch
from
June 30, 2025 16:15
0eec5d9 to
5d6ae40
Compare
renovate
Bot
force-pushed
the
renovate/multidict-6.x
branch
from
August 11, 2025 15:22
5d6ae40 to
4042e9e
Compare
renovate
Bot
force-pushed
the
renovate/multidict-6.x
branch
from
October 6, 2025 16:26
4042e9e to
27bca99
Compare
renovate
Bot
force-pushed
the
renovate/multidict-6.x
branch
from
March 1, 2026 15:55
27bca99 to
80c1c59
Compare
renovate
Bot
force-pushed
the
renovate/multidict-6.x
branch
from
September 9, 2026 18:02
80c1c59 to
00d31bd
Compare
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
This PR contains the following updates:
==6.0.5→==6.8.0Release Notes
aio-libs/multidict (multidict)
v6.8.0Compare Source
=====
(2026-09-09)
Bug fixes
A segmentation fault that could be triggered when getting an item is now fixed
-- by :user:
Vizonex.Related issues and pull requests on GitHub:
:issue:
1310.Fixed reference leak in iterators, views and
istr-- by :user:
Vizonex.Related issues and pull requests on GitHub:
:issue:
1311.Fixed the pure-Python :class:
~multidict.MultiDictconstructor and:py:meth:
~multidict.MultiDict.extend,:py:meth:
~multidict.MultiDict.update, and:py:meth:
~multidict.MultiDict.mergemethods over-allocating theirinternal hash table when called with both a positional argument and
keyword arguments, because keyword arguments were counted twice in the
size estimate -- by :user:
aiolibsbot.Related issues and pull requests on GitHub:
:issue:
1338.Fixed
__repr__of :class:~multidict.MultiDict,:class:
~multidict.CIMultiDict, their proxies, and the keys/items viewsproducing invalid output when keys contained quote characters --
keys are now formatted with :func:
reprso the result is a valid Pythonstring literal -- by :user:
aiolibsbot.Related issues and pull requests on GitHub:
:issue:
1342.Fixed a segfault when calling :py:meth:
~multidict.MultiDict.addwith only one of its two required arguments supplied by keyword, e.g.d.add(key="k"). Extra keyword arguments passed to the lookup and removal methods are also now rejected with :exc:TypeErrorinstead of being silently ignored.-- by :user:
devdanzinRelated issues and pull requests on GitHub:
:issue:
1376.Fixed a segfault when constructing a multidict iterator type directly, e.g.
type(iter(md.keys())).__new__(...). Such an iterator had a NULL internal pointer thatnext()dereferenced. The iterator types now forbid direct instantiation, the same way the view types were fixed in :issue:1163.-- by :user:
devdanzinRelated issues and pull requests on GitHub:
:issue:
1377.Fixed a segfault when using a :py:class:
~multidict.MultiDictor :py:class:~multidict.CIMultiDictcreated via__new__without calling__init__(for example a subclass that does not callsuper().__init__()). The internal state was left as NULL pointers that the first method call dereferenced.tp_newnow initializes the object to a valid empty mapping.-- by :user:
devdanzinRelated issues and pull requests on GitHub:
:issue:
1378.Fixed two crashes in the C extension caused by holding a raw pointer into a hash table across an operation that could reshape it. Updating a multidict from itself (e.g.
d.extend(d)) freed the very table being iterated -- a use-after-free;extend(self)now doubles the contents andupdate(self)/merge(self)are no-ops. Building a multidict from a list of pairs whose case-insensitive key.lower()shrinks that list read past the end of the list; the length is now re-checked on every iteration.-- by :user:
devdanzinRelated issues and pull requests on GitHub:
:issue:
1379.Fixed three reference/resource leaks on error paths in the C extension: the items-view
__contains__leaked the first element of a candidate pair when reading the second one raised;__repr__leaked itsPyUnicodeWriterwhen the multidict was mutated during iteration; and the internal iteration helper leaked the identity reference when key materialization failed under low memory.-- by :user:
devdanzinRelated issues and pull requests on GitHub:
:issue:
1381.Stopped several feature-detection fallbacks in the C extension from swallowing every exception. When probing an argument (
arg.items()/arg.keys()) or measuring it (len(other)) fails, the code now clears only the expected :exc:TypeError/:exc:AttributeErrorand lets everything else -- notably :exc:MemoryErrorand :exc:KeyboardInterrupt-- propagate, matching the already-correct sites elsewhere in the module.-- by :user:
devdanzinRelated issues and pull requests on GitHub:
:issue:
1382.Fixed a segmentation fault when extending a multidict with itself
-- by :user:
cananooand :user:asvetlov.Related issues and pull requests on GitHub:
:issue:
1398.Fixed a memory leak when
MultiDictandCIMultiDictinstances areinitialized more than once -- by :user:
asvetlov.Related issues and pull requests on GitHub:
:issue:
1412.Fixed a reference leak in items-view set operations
-- by :user:
asvetlov.Related issues and pull requests on GitHub:
:issue:
1413.Fixed a memory leak when destroying C-extension multidict instances
and proxies -- by :user:
asvetlov.Related issues and pull requests on GitHub:
:issue:
1415.Fixed a reference leak from repeated
__init__calls onMultiDictProxyandCIMultiDictProxyinstances -- by :user:asvetlov.Related issues and pull requests on GitHub:
:issue:
1419.Fixed missing decref for :data:
Noneon error in :meth:~multidict.MultiDict.setdefault-- by :user:
asvetlovRelated issues and pull requests on GitHub:
:issue:
1421.Features
Added :py:func:
reversedsupport to the keys, values, and items views of:class:
~multidict.MultiDict, :class:~multidict.CIMultiDict, and theirproxies in both the C-extension and pure-Python implementations
-- by :user:
aiolibsbot.Related issues and pull requests on GitHub:
:issue:
448.Optimized key identity comparison for C Extension.
Now it uses fast path that is equal to :c:func:
PyUnicode_EqualfromPython 3.14+ but without redundant type checks. It gives ~15% speed-up on benchmarks with many key comparisons.
-- by :user:
asvetlovRelated issues and pull requests on GitHub:
:issue:
1406.Changed both the pure-Python and C implementations to mark a temporarily
removed hash table entry by setting the high bit of its hash instead of
overwriting it with a sentinel value, so restoring the entry no longer
recomputes the hash; :meth:
~multidict.MultiDict.getallis faster ~10% now in C version-- by :user:
asvetlovRelated issues and pull requests on GitHub:
:issue:
1426.Removals and backward incompatible breaking changes
Dropped support for Python 3.9 as it has reached end of life.
Related issues and pull requests on GitHub:
:issue:
1316.Dropped support for free-threaded Python 3.13 -- by :user:
ngoldbaum.Related issues and pull requests on GitHub:
:issue:
1326.Improved documentation
Fixed
CIMultiDictProxydocumentation to state it inherits fromMultiDictProxy(notMultiDict), and fixed missing word inistrsection -- by :user:veeceey.Related issues and pull requests on GitHub:
:issue:
1298.Clarified that
istrpreserves the original casing andcompares as a regular
str; case-insensitive matching ishandled by
CIMultiDict-- by :user:gyanu2507.Related issues and pull requests on GitHub:
:issue:
1397.Fixed broken RST markup in
items()docstrings-- by :user:
veeceey.Related issues and pull requests on GitHub:
:issue:
1299.Packaging updates and notes for downstreams
Dropped support for free-threaded Python 3.13 -- by :user:
ngoldbaum.Related issues and pull requests on GitHub:
:issue:
1326.Wheels for iOS and Android (CPython 3.13+) are now published on
release-tag builds, so downstreams on those platforms no longer need a
local compiler to install
multidict; these wheels are build-verifiedonly, since running the test suite on mobile needs a simulator or an
emulator -- by :user:
aiolibsbot.Related issues and pull requests on GitHub:
:issue:
1337.Added support for building and shipping riscv64 wheels
-- by :user:
justeph.Related issues and pull requests on GitHub:
:issue:
1293.The
setuptoolsbuild dependency lower bound has been restored to be>= 47after an incorrect automated increase in :pr:1315-- by :user:
aiolibsbot.Related issues and pull requests on GitHub:
:issue:
1400.Contributor-facing changes
Added support for collecting code coverage of isolated multidict tests
-- by :user:
Vizonex.Related issues and pull requests on GitHub:
:issue:
1314.Switched to
mirrors-clang-formatand enabled clang-format inpre-commit.ci-- by :user:
bdraco.Related issues and pull requests on GitHub:
:issue:
1318.Added a release-tag-gated CI job that cross-compiles the C extension
for iOS and Android through
cibuildwheel-- by :user:aiolibsbot.Related issues and pull requests on GitHub:
:issue:
1337.Added an
AGENTS.mdorientation file at the repository root, covering thepull request template, the
CHANGES/news fragment conventions, thedraft-PR / human-review workflow, and the dual pure-Python and C-extension
parity rule, so LLM contributors land changes that match project style
-- by :user:
bdraco.Related issues and pull requests on GitHub:
:issue:
1339.Added
init,installable,instantiation,parametrization,parametrized,postfix, andunparseableto the docs spelling listso news fragments and docs can use these words without failing the spell
check build -- by :user:
pctablet505.Related issues and pull requests on GitHub:
:issue:
1343.Documented three common agent failure modes in
:file:
AGENTS.md: the docs spell check(
make doc-spelling) catches unknown words in news fragmentsbefore CI does; coverage runs over the test tree too, so
unreachable defensive
raiseguards and one-sided cleanupbranches in tests will surface as uncovered on the codecov
patch report; and branch creation is restricted on
aio-libs/multidict, so PRs must be pushed from a fork-- by :user:
bdraco.Related issues and pull requests on GitHub:
:issue:
1343, :issue:1345.Trimmed the CI test matrix to drop redundant
Py_DEBUGjobs onmacOS and Windows and to gate the
windows-11-armwheel build torelease-time only, cutting CI wall-clock by roughly a third without
reducing code coverage -- by :user:
aiolibsbot.Related issues and pull requests on GitHub:
:issue:
1346.Added a
CLAUDE.mdat the repository root that imports:file:
AGENTS.mdvia Claude Code's@-syntax, so theproject's LLM contributor rules load automatically when
working in Claude Code
-- by :user:
aiolibsbot.Related issues and pull requests on GitHub:
:issue:
1347.Enabled the
I(import sorting) rule in[tool.ruff.lint]soruff checkcovers import order on topof the existing
UP(pyupgrade) group, and updated theruff-checkpre-commit hook to run with--fix --exit-non-zero-on-fix --show-fixesso import-orderfixes apply on commit. Sorted imports in four
tests/filesto match the new rule -- by :user:
bdraco.Related issues and pull requests on GitHub:
:issue:
1348.Enabled the
PLC0415(import-outside-top-level) rule in[tool.ruff.lint]. Function-scoped imports must now opt inwith
# noqa: PLC0415plus a comment explaining the reason(typically avoiding a heavy optional dependency at import time).
This catches a pattern that LLM contributors frequently introduce.
There are currently no opt-outs in the tree, so the rule is
enforced everywhere
ruff checkruns-- by :user:
bdraco.Related issues and pull requests on GitHub:
:issue:
1349.Switched the
cibuildwheelbuild frontend tobuild[uv]sothat
uvprovisions every build and test virtual environmentin the wheel matrix. Test-dependency installation in particular
drops from a multi-second
pip installper ABI to a roughlysub-second
uvresolve-- by :user:
bdraco.Related issues and pull requests on GitHub:
:issue:
1350.Overrode
CIBW_BUILD_FRONTEND=buildfor the odd-arch wheelmatrix; the upstream
manylinux/musllinuximages forthose arches do not ship
uv-- by :user:
bdraco.Related issues and pull requests on GitHub:
:issue:
1352.Allowed re-running the deploy job after a partial release failure: the
Make Releasestep now skips when the GitHub Release already exists,and the PyPI publish step uses
skip-existingso dists that werealready uploaded on a prior attempt do not break the retry
-- by :user:
bdraco.Related issues and pull requests on GitHub:
:issue:
1353.Switched the aarch64 and armv7l wheel builds to GitHub's native ARM
runners. The aarch64 wheels now build without QEMU emulation, and
armv7l runs on aarch64 hosts so its 32-bit ARM execution is far
cheaper than the previous aarch64-on-x86_64 path
-- by :user:
bdraco.Related issues and pull requests on GitHub:
:issue:
1354.Documented design principles for pure-Python :class:
~multidict.istrimplementation-- by :user:
asvetlovRelated issues and pull requests on GitHub:
:issue:
1360.Pinned
coverageto thectracemeasurement core so the test suite runson Python 3.14. Coverage picks
sysmonthere, which cannot record thedynamic contexts
pytest-covswitches at runtime, and the resulting warningbecame an error under the suite's
filterwarningssetting-- by :user:
rodrigobnogueira.Related issues and pull requests on GitHub:
:issue:
1393.Dependabot has been restricted to the
requirementssubdirectory toavoid unintended updates outside dependency requirement files
-- by :user:
aiolibsbot.Related issues and pull requests on GitHub:
:issue:
1400.Enabled automatic upgrades from ruff after each python version that is dropped
-- by :user:
Vizonex.Related issues and pull requests on GitHub:
:issue:
1325.Miscellaneous internal changes
Explicitly marked
empty_htkeysasconst.Moved the structure to
.rodatalinker section.Unexpected modification of the structure will lead to segfault instead
of corrupting the data and fail fast.
.rodatais mount as read-only-mapped, it is shared well acrossmultiple threads without cache misses.
The change is pretty trivial, it is made for the sake of correctness,
not for speedup.
-- by :user:
asvetlov.Related issues and pull requests on GitHub:
:issue:
1405.Slightly reorganized multidict creating process.
md_init()creates an empty multidict.tp_allocslot is used in object cloning instead of bare :c:func:PyType_GenericNewcall.-- by :user:
asvetlovRelated issues and pull requests on GitHub:
:issue:
1420.Dropped dead code,
_md_del_at()and_md_del_at_for_upd()never fails-- by :user:
asvetlovRelated issues and pull requests on GitHub:
:issue:
1423.Fixed a missing space in the :exc:
ValueErrormessageraised when constructing a multidict from a sequence
-- by :user:
veeceey.Related issues and pull requests on GitHub:
:issue:
1295.Renamed the benchmark script from
benchmarks/becnhmark.pytobenchmarks/benchmark.pyso it matches the invocation documented in:doc:
benchmark-- by :user:aiolibsbot.Related issues and pull requests on GitHub:
:issue:
1335.v6.7.1Compare Source
=====
(2026-01-25)
Bug fixes
Fixed slow memory leak caused by identity by adding
Py_DECREFto identity value before leavingmd_pop_oneon success-- by :user:
Vizonex.Related issues and pull requests on GitHub:
:issue:
1284.v6.7.0Compare Source
=====
(2025-10-05)
Contributor-facing changes
Updated tests and added CI for CPython 3.14 -- by :user:
kumaraditya303.Related issues and pull requests on GitHub:
:issue:
1235.v6.6.4Compare Source
=====
(2025-08-11)
Bug fixes
Fixed
MutliDict&CIMultiDictmemory leak when deleting values or clearing them-- by :user:
VizonexRelated issues and pull requests on GitHub:
:issue:
1233.Contributor-facing changes
The type preciseness coverage report generated by
MyPy <https://mypy-lang.org>__ is now uploaded toCoveralls <https://coveralls.io/github/aio-libs/multidict>__ andwill not be included in the
Codecov views <https://app.codecov.io/gh/aio-libs/multidict>__ going forward-- by :user:
webknjaz.Related issues and pull requests on GitHub:
:issue:
1122, :issue:1231.Added memory leak test for popping or deleting attributes from a multidict to prevent future issues or bogus claims.
-- by :user:
VizonexRelated issues and pull requests on GitHub:
:issue:
1233.v6.6.3Compare Source
=====
(2025-06-30)
Bug fixes
Fixed inconsistencies generated by the C implementation of
_md_shrink()which might later lead to assertion failures and crash -- by :user:Romain-Geissler-1A.Related issues and pull requests on GitHub:
:issue:
1229.v6.6.2Compare Source
=====
(2025-06-28)
Bug fixes
Fixed a memory corruption issue in the C implementation of
_md_shrink()that could lead to segmentation faults and data loss when items were deleted from a :class:~multidict.MultiDict. The issue was an edge case in the pointer arithmetic during the compaction phase -- by :user:bdraco.Related issues and pull requests on GitHub:
:issue:
1221, :issue:1222.Fixed format string compilation errors in debug builds on 32-bit platforms by using portable
%zdformat specifiers forPy_ssize_tvalues instead of%ld-- by :user:bdraco.Related issues and pull requests on GitHub:
:issue:
1225, :issue:1226.Packaging updates and notes for downstreams
Re-enabled 32-bit Linux wheel builds that were disabled by default in cibuildwheel 3.0.0 -- by :user:
bdraco.Related issues and pull requests on GitHub:
:issue:
1225, :issue:1227.v6.6.1Compare Source
=====
(2025-06-28)
Bug fixes
If :meth:
multidict.MultiDict.extend, :meth:multidict.MultiDict.merge, or :meth:multidict.MultiDict.updateraises an exception, now the multidict internal state is correctly restored.Patch by :user:
asvetlov.Related issues and pull requests on GitHub:
:issue:
1215.Contributor-facing changes
Fixed
setuptoolsdeprecation warning about the license specification -- by :user:asvetlov.Related issues and pull requests on GitHub:
:issue:
1216.Fix compiler warnings and convert them to errors -- by :user:
asvetlov.Related issues and pull requests on GitHub:
:issue:
1217.v6.6.0Compare Source
=====
(2025-06-27)
Features
Added :meth:
multidict.MultiDict.mergewhich copies all items from arguments if its keynot exist in the dictionary -- by :user:
asvetlov.Related issues and pull requests on GitHub:
:issue:
292.Stopped reallocating memory for the internal
htkeys_tstructure when inserting new items if themultidict has deleted items and it could be collapsed in-place. Removal of
malloc()/free()improves the performance slightly.The change affects C implementation only, pure Python code is not changed.
Patch by :user:
asvetlov.Related issues and pull requests on GitHub:
:issue:
1200.C implementation of :class:
multidict.MultiDict.getallnow is slightly faster if it returns nothing -- by :user:asvetlov.Related issues and pull requests on GitHub:
:issue:
1212.Improved documentation
Replaced docstring for :meth:
multidict.MultiDict.updateto don't use RST/markdown markup.Related issues and pull requests on GitHub:
:issue:
1203.Improved documentation for :meth:
multidict.MultiDict.extendand :meth:multidict.MultiDict.update-- by :user:asvetlov.Related issues and pull requests on GitHub:
:issue:
1205.Contributor-facing changes
When building wheels, the source distribution is now passed directly
to the
cibuildwheelinvocation -- by :user:webknjaz.Related issues and pull requests on GitHub:
:issue:
1199.Set up
PYTHONHASHSEEDfor benchmarks execution to make measured times stable -- by :user:asvetlov.Related issues and pull requests on GitHub:
:issue:
1202.v6.5.1Compare Source
=====
(2025-06-24)
Bug fixes
Fixed a bug in C implementation when multidict is resized and it has deleted slots.
The bug was introduced by multidict 6.5.0 release.
Patch by :user:
asvetlov.Related issues and pull requests on GitHub:
:issue:
1195.Contributor-facing changes
A pair of code formatters for Python and C have been configured in the pre-commit tool.
Related issues and pull requests on GitHub:
:issue:
1123.Shorted fixture parametrization ids.
For example,
test_keys_view_xor[case-insensitive-pure-python-module]becomestest_keys_view_xor[ci-py]-- by :user:asvetlov.Related issues and pull requests on GitHub:
:issue:
1192.The :file:
reusable-cibuildwheel.ymlworkflow has been refactored tobe more generic and :file:
ci-cd.ymlnow holds all the configurationtoggles -- by :user:
webknjaz.Related issues and pull requests on GitHub:
:issue:
1193.v6.5.0Compare Source
=====
(2025-06-17)
.. note::
The release was yanked because of :issue:
1195, multidict 6.5.1 should be usedinstead.
Features
Replace internal implementation from an array of items to hash table.
algorithmic complexity for lookups is switched from O(N) to O(1).
The hash table is very similar to :class:
dictfrom CPython but it allows keys duplication.The benchmark shows 25-50% boost for single lookups, x2-x3 for bulk updates, and x20 for
some multidict view operations. The gain is not for free:
:class:
~multidict.MultiDict.addand :class:~multidict.MultiDict.extendare 25-50%slower now. We consider it as acceptable because the lookup is much more common
operation that addition for the library domain.
Related issues and pull requests on GitHub:
:issue:
1128.Contributor-facing changes
Builds have been added for arm64 Windows
wheels and the
reusable-build-wheel.ymltemplate has been modified to allow for
an os value (
windows-11-arm) whichdoes not end with the
-latestpostfix.Related issues and pull requests on GitHub:
:issue:
1167.v6.4.4Compare Source
=====
(2025-05-19)
Bug fixes
Fixed a segmentation fault when calling :py:meth:
multidict.MultiDict.setdefaultwith a single argument -- by :user:bdraco.Related issues and pull requests on GitHub:
:issue:
1160.Fixed a segmentation fault when attempting to directly instantiate view objects
(
multidict._ItemsView,multidict._KeysView,multidict._ValuesView) -- by :user:bdraco.View objects now raise a proper :exc:
TypeErrorwith the message "cannot create '...' instances directly"when direct instantiation is attempted.
View objects should only be created through the proper methods: :py:meth:
multidict.MultiDict.items,:py:meth:
multidict.MultiDict.keys, and :py:meth:multidict.MultiDict.values.Related issues and pull requests on GitHub:
:issue:
1164.Miscellaneous internal changes
:class:
multidict.MultiDictProxywas refactored to rely only on:class:
multidict.MultiDictpublic interface and don't touch any implementationdetails.
Related issues and pull requests on GitHub:
:issue:
1150.Multidict views were refactored to rely only on
:class:
multidict.MultiDictAPI and don't touch any implementationdetails.
Related issues and pull requests on GitHub:
:issue:
1152.Dropped internal
_Implclass from pure Python implementation, both pure Python and CExtension follows the same design internally now.
Related issues and pull requests on GitHub:
:issue:
1153.v6.4.3Compare Source
=====
(2025-04-10)
Bug fixes
Fixed building the library in debug mode.
Related issues and pull requests on GitHub:
:issue:
1144.Fixed custom
PyType_GetModuleByDef()when non-heap type object was passed.Related issues and pull requests on GitHub:
:issue:
1147.Packaging updates and notes for downstreams
Added the ability to build in debug mode by setting :envvar:
MULTIDICT_DEBUG_BUILDin the environment -- by :user:bdraco.Related issues and pull requests on GitHub:
:issue:
1145.v6.4.2Compare Source
=====
(2025-04-09)
Bug fixes
Fixed a segmentation fault when creating subclassed :py:class:
~multidict.MultiDictobjects on Python < 3.11 -- by :user:bdraco.The problem first appeared in 6.4.0
Related issues and pull requests on GitHub:
:issue:
1141.v6.4.1Compare Source
=====
(2025-04-09)
No significant changes.
v6.4.0Compare Source
=====
(2025-04-09)
Bug fixes
Fixed a memory leak creating new :class:
~multidict.istrobjects -- by :user:bdraco.The leak was introduced in 6.3.0
Related issues and pull requests on GitHub:
:issue:
1133.Fixed reference counting when calling :py:meth:
multidict.MultiDict.update-- by :user:bdraco.The leak was introduced in 4.4.0
Related issues and pull requests on GitHub:
:issue:
1135.Features
Switched C Extension to use heap types and the module state.
Related issues and pull requests on GitHub:
:issue:
1125.Started building armv7l wheels -- by :user:
bdraco.Related issues and pull requests on GitHub:
:issue:
1127.v6.3.2Compare Source
=====
(2025-04-03)
Bug fixes
Resolved a memory leak by ensuring proper reference count decrementation -- by :user:
asvetlovand :user:bdraco.Related issues and pull requests on GitHub:
:issue:
1121.v6.3.1Compare Source
=====
(2025-04-01)
Bug fixes
Fixed keys not becoming case-insensitive when :class:
multidict.CIMultiDictis created by passing in a :class:multidict.MultiDict-- by :user:bdraco.Related issues and pull requests on GitHub:
:issue:
1112.Fixed the pure Python version mutating the original :class:
multidict.MultiDictwhen creating a new :class:multidict.CIMultiDictfrom an existing one when keyword arguments are also passed -- by :user:bdraco.Related issues and pull requests on GitHub:
:issue:
1113.Prevented crashing with a segfault when :func:
repris called for recursive multidicts and their proxies and views.Related issues and pull requests on GitHub:
:issue:
1115.v6.3.0Compare Source
=====
(2025-03-31)
Bug fixes
Set operations for
KeysViewandItemsViewof case-insensitive multidicts and their proxies are processed in case-insensitive manner.Related issues and pull requests on GitHub:
:issue:
965.Rewrote :class:
multidict.CIMultiDictand it proxy to always return:class:
multidict.istrkeys.istris derived from :class:str,thus the change is backward compatible.
The performance boost is about 15% for some operations for C Extension,
pure Python implementation have got a visible (15% - 230%) speedup as well.
Related issues and pull requests on GitHub:
:issue:
1097.Fixed a crash when extending a multidict from multidict proxy if C Extensions were used.
Related issues and pull requests on GitHub:
:issue:
1100.Features
Implemented a custom parser for
METH_FASTCALL | METH_KEYWORDSprotocol-- by :user:
asvetlov.The patch re-enables fast call protocol in the :py:mod:
multidictC Extension.Speedup is about 25%-30% for the library benchmarks for Python 3.12+.
Related issues and pull requests on GitHub:
:issue:
1070.The C-extension no longer pre-allocates a Python exception object in
lookup-related methods of :py:class:
~multidict.MultiDictwhen thepassed-in key is not found but default value is provided.
Namely, this affects :py:meth:
MultiDict.getone() <multidict.MultiDict.getone>, :py:meth:MultiDict.getall() <multidict.MultiDict.getall>, :py:meth:MultiDict.get() <multidict.MultiDict.get>, :py:meth:MultiDict.pop() <multidict.MultiDict.pop>, :py:meth:MultiDict.popone() <multidict.MultiDict.popone>, and :py:meth:MultiDict.popall() <multidict.MultiDict.popall>.Additionally, the :py:class:
~multidict.MultiDictcomparison withregular :py:class:
dict\ ionaries is now about 60% fasteron Python 3.13+ in the fallback-to-default case.
Related issues and pull requests on GitHub:
:issue:
1078.Implemented
__repr__()for C Extension classes in C.The speedup is about 2.5 times.
Related issues and pull requests on GitHub:
:issue:
1081.Made C version of :class:
multidict.istrpickleable.Related issues and pull requests on GitHub:
:issue:
1098.Optimized multidict creation and extending / updating if C Extensions are used.
The speedup is between 25% and 70% depending on the usage scenario.
Related issues and pull requests on GitHub:
:issue:
1101.:meth:
multidict.MultiDict.popitemis changed to removethe latest entry instead of the first.
It gives O(1) amortized complexity.
The standard :meth:
dict.popitemremoves the last entry also.Related issues and pull requests on GitHub:
:issue:
1105.Contributor-facing changes
Started running benchmarks for the pure Python implementation in addition to the C implementation -- by :user:
bdraco.Related issues and pull requests on GitHub:
:issue:
1092.The the project-wide Codecov_ metric is no longer reported
via GitHub Checks API. The combined value is not very useful
because one of the sources (MyPy) cannot reach 100% with the
current state of the ecosystem. We may want to reconsider in
the future. Instead, we now have two separate
“runtime coverage” metrics for library code and tests.
They are to be kept at 100% at all times.
And the “type coverage” metric will remain advisory, at a
lower threshold.
The default patch metric check is renamed to “runtime”
to better reflect its semantics. This one will also require
100% coverage.
Another “typing” patch coverage metric is now reported
alongside it. It's considered advisory, just like its
project counterpart.
When looking at Codecov_, one will likely want to look at
MyPy and pytest flags separately. It is usually best to
avoid looking at the PR pages that sometimes display
combined coverage incorrectly.
The change additionally disables the deprecated GitHub
Annotations integration in Codecov_.
Finally, the badge coloring range now starts at 100%.
.. image:: https://codecov.io/gh/aio-libs/multidict/branch/master/graph/badge.svg?flag=pytest
:target: https://codecov.io/gh/aio-libs/multidict?flags[]=pytest
:alt: Coverage metrics
-- by :user:
webknjazRelated issues and pull requests on GitHub:
:issue:
1093.Miscellaneous internal changes
Synchronized :file:
pythoncapi_compat.hwith the latest available version.Related issues and pull requests on GitHub:
:issue:
1063.Moved registering ABCs for C Extension classes from C to Python.
Related issues and pull requests on GitHub:
:issue:
1083.Refactored the internal
pair_listimplementation.Related issues and pull requests on GitHub:
:issue:
1084.Implemented views comparison and disjoints in C instead of Python helpers.
The performance boost is about 40%.
Related issues and pull requests on GitHub:
:issue:
1096.v6.2.0Compare Source
======
(2025-03-17)
Bug fixes
Fixed
inchecks throwing an exception instead of returning :data:Falsewhen testing non-strings.Related issues and pull requests on GitHub:
:issue:
1045.Fixed a leak when the last accessed module in
PyInit__multidict()init is not released.Related issues and pull requests on GitHub:
:issue:
1061.Features
Implemented support for the free-threaded build of CPython 3.13 -- by :user:
lysnikolaou.Related issues and pull requests on GitHub:
:issue:
1015.Packaging updates and notes for downstreams
Started publishing wheels made for the free-threaded build of CPython 3.13 -- by :user:
lysnikolaou.Related issues and pull requests on GitHub:
:issue:
1015.Miscellaneous internal changes
Used stricter typing across the code base, resulting in improved typing accuracy across multidict classes.
Funded by an
NLnetgrant.Related issues and pull requests on GitHub:
:issue:
1046.v6.1.0Compare Source
==================
Bug fixes
Covered the unreachable code path in
multidict._multidict_base._abc_itemsview_register()with typing -- by :user:
skinnyBat.Related issues and pull requests on GitHub:
:issue:
928.Features
Added support for Python 3.13 -- by :user:
bdraco.Related issues and pull requests on GitHub:
:issue:
1002.Removals and backward incompatible breaking changes
Removed Python 3.7 support -- by :user:
bdraco.Related issues and pull requests on GitHub:
:issue:
997.Contributor-facing changes
Added tests to have full code coverage of the
multidict._multidict_base._viewbaseset_richcmp()function-- by :user:
skinnyBat.Related issues and pull requests on GitHub:
:issue:
928.The deprecated <https://hynek.me/til/set-output-deprecation-github-actions/>_::set-outputworkflow command has been replacedby the
$GITHUB_OUTPUTenvironment variablein the GitHub Actions CI/CD workflow definition.
Related issues and pull requests on GitHub:
:issue:
940.codecov-action <https://github.com/codecov/codecov-action>_has been temporarily downgraded to
v3in the GitHub Actions CI/CD workflow definitions
in order to fix uploading coverage to Codecov_.
See
this issue <https://github.com/codecov/codecov-action/issues/1252>_for more details.
.. _Codecov: https://codecov.io/gh/aio-libs/multidict?flags[]=pytest
Related issues and pull requests on GitHub:
:issue:
941.In the GitHub Actions CI/CD workflow definition,
the
Get pip cache dirstep has been fixed forWindows runners by adding
shell: bash.See
actions/runner#2224 <https://github.com/actions/runner/issues/2224>_for more details.
Related issues and pull requests on GitHub:
:issue:
942.Interpolation of the
pipcache keys has beenfixed by adding missing
$syntaxin the GitHub Actions CI/CD workflow definition.
Related issues and pull requests on GitHub:
:issue:
943.Configuration
📅 Schedule: (UTC)
🚦 Automerge: Disabled by config. Please merge this manually once you are satisfied.
♻ Rebasing: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.
🔕 Ignore: Close this PR and you won't be reminded about this update again.
This PR was generated by Mend Renovate. View the repository job log.