You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Fixed MutliDict & CIMultiDict memory leak when deleting values or clearing them
-- by :user:Vizonex
Related 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 to Coveralls <https://coveralls.io/github/aio-libs/multidict>__ and
will 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:Vizonex
Related issues and pull requests on GitHub:
:issue:1233.
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.
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 %zd format specifiers for Py_ssize_t values 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.
If :meth:multidict.MultiDict.extend, :meth:multidict.MultiDict.merge, or :meth:multidict.MultiDict.update raises 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 setuptools deprecation 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.
Added :meth:multidict.MultiDict.merge which copies all items from arguments if its key
not exist in the dictionary -- by :user:asvetlov.
Related issues and pull requests on GitHub:
:issue:292.
Stopped reallocating memory for the internal htkeys_t structure when inserting new items if the
multidict 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.getall now 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.update to don't use RST/markdown markup.
Related issues and pull requests on GitHub:
:issue:1203.
Improved documentation for :meth:multidict.MultiDict.extend and :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 cibuildwheel invocation -- by :user:webknjaz.
Related issues and pull requests on GitHub:
:issue:1199.
Set up PYTHONHASHSEED for benchmarks execution to make measured times stable -- by :user:asvetlov.
Related issues and pull requests on GitHub:
:issue:1202.
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] becomes test_keys_view_xor[ci-py] -- by :user:asvetlov.
Related issues and pull requests on GitHub:
:issue:1192.
The :file:reusable-cibuildwheel.yml workflow has been refactored to
be more generic and :file:ci-cd.yml now holds all the configuration
toggles -- by :user:webknjaz.
Related issues and pull requests on GitHub:
:issue:1193.
The release was yanked because of :issue:1195, multidict 6.5.1 should be used
instead.
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:dict from 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.add and :class:~multidict.MultiDict.extend are 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.yml
template has been modified to allow for
an os value (windows-11-arm) which
does not end with the -latest postfix.
Related issues and pull requests on GitHub:
:issue:1167.
Fixed a segmentation fault when calling :py:meth:multidict.MultiDict.setdefault with 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:TypeError with 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.MultiDictProxy was refactored to rely only on
:class:multidict.MultiDict public interface and don't touch any implementation
details.
Related issues and pull requests on GitHub:
:issue:1150.
Multidict views were refactored to rely only on
:class:multidict.MultiDict API and don't touch any implementation
details.
Related issues and pull requests on GitHub:
:issue:1152.
Dropped internal _Impl class from pure Python implementation, both pure Python and C
Extension follows the same design internally now.
Related issues and pull requests on GitHub:
:issue:1153.
Fixed keys not becoming case-insensitive when :class:multidict.CIMultiDict is 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.MultiDict when creating a new :class:multidict.CIMultiDict from 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:repr is called for recursive multidicts and their proxies and views.
Related issues and pull requests on GitHub:
:issue:1115.
Set operations for KeysView and ItemsView of case-insensitive multidicts and their proxies are processed in case-insensitive manner.
Related issues and pull requests on GitHub:
:issue:965.
Rewrote :class:multidict.CIMultiDict and it proxy to always return
:class:multidict.istr keys. istr is 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_KEYWORDS protocol
-- by :user:asvetlov.
The patch re-enables fast call protocol in the :py:mod:multidict C 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.MultiDict when the
passed-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.MultiDict comparison with
regular :py:class:dict\ ionaries is now about 60% faster
on 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.istr pickleable.
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.popitem is changed to remove
the latest entry instead of the first.
It gives O(1) amortized complexity.
The standard :meth:dict.popitem removes 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%.
konflux-internal-p02bot
changed the title
chore(deps): update dependency multidict to v6.7.1
chore(deps): update dependency multidict to v6.7.1 - autoclosed
Jan 26, 2026
konflux-internal-p02bot
changed the title
chore(deps): update dependency multidict to v6.7.1 - autoclosed
chore(deps): update dependency multidict to v6.7.1
Jan 26, 2026
konflux-internal-p02bot
changed the title
chore(deps): update dependency multidict to v6.7.1
chore(deps): update dependency multidict to v6.7.1 - autoclosed
Jan 26, 2026
konflux-internal-p02bot
changed the title
chore(deps): update dependency multidict to v6.7.1 - autoclosed
chore(deps): update dependency multidict to v6.7.1
Jan 26, 2026
konflux-internal-p02bot
changed the title
chore(deps): update dependency multidict to v6.7.1
chore(deps): update dependency multidict to v6.7.1 - autoclosed
Jan 26, 2026
konflux-internal-p02bot
changed the title
chore(deps): update dependency multidict to v6.7.1 - autoclosed
chore(deps): update dependency multidict to v6.7.1
Jan 26, 2026
konflux-internal-p02bot
changed the title
chore(deps): update dependency multidict to v6.7.1
chore(deps): update dependency multidict to v6.7.1 - autoclosed
Jan 27, 2026
konflux-internal-p02bot
changed the title
chore(deps): update dependency multidict to v6.7.1 - autoclosed
chore(deps): update dependency multidict to v6.7.1
Jan 27, 2026
konflux-internal-p02bot
changed the title
chore(deps): update dependency multidict to v6.7.1
chore(deps): update dependency multidict to v6.7.1 - autoclosed
Jan 27, 2026
konflux-internal-p02bot
changed the title
chore(deps): update dependency multidict to v6.7.1 - autoclosed
chore(deps): update dependency multidict to v6.7.1
Jan 27, 2026
konflux-internal-p02bot
changed the title
chore(deps): update dependency multidict to v6.7.1
chore(deps): update dependency multidict to v6.7.1 - autoclosed
Feb 13, 2026
konflux-internal-p02bot
changed the title
chore(deps): update dependency multidict to v6.7.1 - autoclosed
chore(deps): update dependency multidict to v6.7.1
Feb 13, 2026
konflux-internal-p02bot
changed the title
chore(deps): update dependency multidict to v6.7.1
chore(deps): update dependency multidict to v6.7.1 - autoclosed
Feb 13, 2026
konflux-internal-p02bot
changed the title
chore(deps): update dependency multidict to v6.7.1 - autoclosed
chore(deps): update dependency multidict to v6.7.1
Feb 13, 2026
konflux-internal-p02bot
changed the title
chore(deps): update dependency multidict to v6.7.1
chore(deps): update dependency multidict to v6.7.1 - autoclosed
Feb 13, 2026
konflux-internal-p02bot
changed the title
chore(deps): update dependency multidict to v6.7.1 - autoclosed
chore(deps): update dependency multidict to v6.7.1
Feb 13, 2026
konflux-internal-p02bot
changed the title
chore(deps): update dependency multidict to v6.7.1
chore(deps): update dependency multidict to v6.7.1 - autoclosed
Feb 13, 2026
konflux-internal-p02bot
changed the title
chore(deps): update dependency multidict to v6.7.1 - autoclosed
chore(deps): update dependency multidict to v6.7.1
Feb 13, 2026
konflux-internal-p02bot
changed the title
chore(deps): update dependency multidict to v6.7.1
chore(deps): update dependency multidict to v6.7.1 - autoclosed
Feb 13, 2026
konflux-internal-p02bot
changed the title
chore(deps): update dependency multidict to v6.7.1 - autoclosed
chore(deps): update dependency multidict to v6.7.1
Feb 13, 2026
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
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.1.0->==6.7.1Release Notes
aio-libs/multidict (multidict)
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.Configuration
📅 Schedule: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined).
🚦 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.
To execute skipped test pipelines write comment
/ok-to-test.Documentation
Find out how to configure dependency updates in MintMaker documentation or see all available configuration options in Renovate documentation.