Changelog

To be included in v6.0.6.dev0 (if present)

6.0.6.dev0 [UNRELEASED DRAFT] (2024-03-25)

Bug fixes

  • Covered the unreachable code path in multidict._multidict_base._abc_itemsview_register() with typing – by @skinnyBat.

    Related issues and pull requests on GitHub: #928.

Contributor-facing changes

  • Added tests to have full code coverage of the multidict._multidict_base._viewbaseset_richcmp() function – by @skinnyBat.

    Related issues and pull requests on GitHub: #928.

  • The deprecated ::set-output workflow command has been replaced by the $GITHUB_OUTPUT environment variable in the GitHub Actions CI/CD workflow definition.

    Related issues and pull requests on GitHub: #940.

  • codecov-action has been temporarily downgraded to v3 in the GitHub Actions CI/CD workflow definitions in order to fix uploading coverage to Codecov. See this issue for more details.

    Related issues and pull requests on GitHub: #941.

  • In the GitHub Actions CI/CD workflow definition, the Get pip cache dir step has been fixed for Windows runners by adding shell: bash. See actions/runner#2224 for more details.

    Related issues and pull requests on GitHub: #942.

  • Interpolation of the pip cache keys has been fixed by adding missing $ syntax in the GitHub Actions CI/CD workflow definition.

    Related issues and pull requests on GitHub: #943.


Released versions

6.0.5 (2024-02-01)

Bug fixes

  • Upgraded the C-API macros that have been deprecated in Python 3.9 and later removed in 3.13 – by @iemelyanov.

    Related issues and pull requests on GitHub: #862, #864, #868, #898.

  • Reverted to using the public argument parsing API PyArg_ParseTupleAndKeywords() under Python 3.12 – by @charles-dyfis-net and @webknjaz.

    The effect is that this change prevents build failures with clang 16.9.6 and gcc-14 reported in #926. It also fixes a segmentation fault crash caused by passing keyword arguments to MultiDict.getall() discovered by @jonaslb and @hroncok while examining the problem.

    Related issues and pull requests on GitHub: #862, #909, #926, #929.

  • Fixed a SystemError: null argument to internal routine error on a MultiDict.items().isdisjoint() call when using C Extensions.

    Related issues and pull requests on GitHub: #927.

Improved documentation

  • On the Contributing docs page, a link to the Towncrier philosophy has been fixed.

    Related issues and pull requests on GitHub: #911.

Packaging updates and notes for downstreams

  • Stopped marking all files as installable package data – by @webknjaz.

    This change helps setuptools understand that C-headers are not to be installed under lib/python3.x/site-packages/.

    Related commits on GitHub: 31e1170.

  • Started publishing pure-python wheels to be installed as a fallback – by @webknjaz.

    Related commits on GitHub: 7ba0e72.

  • Switched from setuptools’ legacy backend (setuptools.build_meta:__legacy__) to the modern one (setuptools.build_meta) by actually specifying the the [build-system] build-backend option in pyproject.toml – by @Jackenmen.

    Related issues and pull requests on GitHub: #802.

  • Declared Python 3.12 supported officially in the distribution package metadata – by @hugovk.

    Related issues and pull requests on GitHub: #877.

Contributor-facing changes

  • The test framework has been refactored. In the previous state, the circular imports reported in #837 caused the C-extension tests to be skipped.

    Now, there is a set of the pytest fixtures that is set up in a parametrized manner allowing to have a consistent way of accessing mirrored multidict implementations across all the tests.

    This change also implemented a pair of CLI flags (--c-extensions / --no-c-extensions) that allow to explicitly request deselecting the tests running against the C-extension.

    – by @webknjaz.

    Related issues and pull requests on GitHub: #98, #837, #915.

  • Updated the test pins lockfile used in the cibuildwheel test stage – by @hoodmane.

    Related issues and pull requests on GitHub: #827.

  • Added an explicit void for arguments in C-function signatures which addresses the following compiler warning:

    warning: a function declaration without a prototype is deprecated in all versions of C [-Wstrict-prototypes]
    

    – by @hoodmane

    Related issues and pull requests on GitHub: #828.

  • An experimental Python 3.13 job now runs in the CI – @webknjaz.

    Related issues and pull requests on GitHub: #920.

  • Added test coverage for the and, or, sub, and xor operators in the multidict/_multidict_base.py module. It also covers NotImplemented and “Iterable-but-not-Set” cases there.

    – by @a5r0n

    Related issues and pull requests on GitHub: #936.

  • The version of pytest is now capped below 8, when running MyPy against Python 3.7. This pytest release dropped support for said runtime.

    Related issues and pull requests on GitHub: #937.


6.0.4 (2022-12-24)

Bugfixes

  • Fixed a type annotations regression introduced in v6.0.2 under Python versions <3.10. It was caused by importing certain types only available in newer versions. (#798)

6.0.3 (2022-12-03)

Features

  • Declared the official support for Python 3.11 — by @mlegner. (#872)

6.0.2 (2022-01-24)

Bugfixes

  • Revert #644, restore type annotations to as-of 5.2.0 version. (#688)

6.0.1 (2022-01-23)

Bugfixes

  • Restored back MultiDict, CIMultiDict, MultiDictProxy, and CIMutiDictProxy generic type arguments; they are parameterized by value type, but the key type is fixed by container class.

    MultiDict[int] means MutableMultiMapping[str, int]. The key type of MultiDict is always str, while all str-like keys are accepted by API and converted to str internally.

    The same is true for CIMultiDict[int] which means MutableMultiMapping[istr, int]. str-like keys are accepted but converted to istr internally. (#682)

6.0.0 (2022-01-22)

Features

  • Use METH_FASTCALL where it makes sense.

    MultiDict.add() is 2.2 times faster now, CIMultiDict.add() is 1.5 times faster. The same boost is applied to get*(), setdefault(), and pop*() methods. (#681)

Bugfixes

  • Fixed type annotations for keys of multidict mapping classes. (#644)

  • Support Multidict[int] for pure-python version. __class_getitem__ is already provided by C Extension, making it work with the pure-extension too. (#678)

Deprecations and Removals

  • Dropped Python 3.6 support (#680)

Misc

5.2.0 (2021-10-03)

Features

    1. Added support Python 3.10

    2. Started shipping platform-specific wheels with the musl tag targeting typical Alpine Linux runtimes.

    3. Started shipping platform-specific arm64 wheels for Apple Silicon. (#629)

Bugfixes

  • Fixed pure-python implementation that used to raise “Dictionary changed during iteration” error when iterated view (.keys(), .values() or .items()) was created before the dictionary’s content change. (#620)

5.1.0 (2020-12-03)

Features

  • Supported GenericAliases (MultiDict[str]) for Python 3.9+ #553

Bugfixes

  • Synchronized the declared supported Python versions in setup.py with actually supported and tested ones. #552


5.0.1 (2020-11-14)

Bugfixes

  • Provided x86 Windows wheels #550


5.0.0 (2020-10-12)

Features

  • Provided wheels for aarch64, i686, ppc64le, s390x architectures on Linux as well as x86_64. #500

  • Provided wheels for Python 3.9. #534

Removal

  • Dropped Python 3.5 support; Python 3.6 is the minimal supported Python version.

Misc


4.7.6 (2020-05-15)

Bugfixes

  • Fixed an issue with some versions of the wheel dist failing because of being unable to detect the license file. #481

4.7.5 (2020-02-21)

Bugfixes

  • Fixed creating and updating of MultiDict from a sequence of pairs and keyword arguments. Previously passing a list argument modified it inplace, and other sequences caused an error. #457

  • Fixed comparing with mapping: an exception raised in the __len__() method caused raising a SyntaxError. #459

  • Fixed comparing with mapping: all exceptions raised in the __getitem__() method were silenced. #460

4.7.4 (2020-01-11)

Bugfixes

  • MultiDict.iter fix memory leak when used iterator over MultiDict instance. #452

Multidict 4.7.3 (2019-12-30)

Features

  • Implement __sizeof__ function to correctly calculate all internal structures size. #444

  • Expose getversion() function. #451

Bugfixes

  • Fix crashes in popone/popall when default is returned. #450

Improved Documentation

  • Corrected the documentation for MultiDict.extend() #446

4.7.2 (2019-12-20)

Bugfixes

4.7.1 (2019-12-12)

Bugfixes

Improved Documentation

  • Mention MULTIDICT_NO_EXTENSIONS environment variable in docs. #393

  • Document the fact that istr preserves the casing of argument untouched but uses internal lower-cased copy for keys comparison. #419

4.7.0 (2019-12-10)

Features

  • Replace Cython optimization with pure C #249

  • Implement __length_hint__() for iterators #310

  • Support the MultiDict[str] generic specialization in the runtime. #392

  • Embed pair_list_t structure into MultiDict Python object #395

  • Embed multidict pairs for small dictionaries to amortize the memory usage. #396

  • Support weak references to C Extension classes. #399

  • Add docstrings to provided classes. #400

  • Merge multidict._istr back with multidict._multidict. #409

Bugfixes

  • Explicitly call tp_free slot on deallocation. #407

  • Return class from __class_getitem__ to simplify subclassing #413

4.6.1 (2019-11-21)

Bugfixes

  • Fix PyPI link for GitHub Issues badge. #391

4.6.0 (2019-11-20)

Bugfixes

  • Fix GC object tracking. #314

  • Preserve the case of istr strings. #374

  • Generate binary wheels for Python 3.8.

4.5.2 (2018-11-28)

  • Fix another memory leak introduced by 4.5.0 release #307

4.5.1 (2018-11-22)

  • Fix a memory leak introduced by 4.5.0 release #306

4.5.0 (2018-11-19)

  • Multidict views ported from Cython to C extension #275

4.4.2 (2018-09-19)

  • Restore Python 3.4 support #289

4.4.1 (2018-09-17)

  • Fix type annotations #283)

  • Allow to install the library on systems without compilation toolset #281

4.4.0 (2018-07-04)

  • Rewrite C implementation to use C pair list.

  • Fix update order when both arg and kwargs are used.

4.3.1 (2018-05-06)

  • Fix a typo in multidict stub file.

4.3.0 (2018-05-06)

  • Polish type hints, make multidict type definitions generic.

4.2.0 (2018-04-15)

  • Publish py.typed flag for type hinting analyzers (mypy etc).

4.1.0 (2018-01-28)

4.0.0 (2018-01-14)

3.3.2 (2017-11-02)

  • Fix tarball (again)

3.3.1 (2017-11-01)

  • Include .c files in tarball #181

3.3.0 (2017-10-15)

  • Introduce abstract base classes #102

  • Publish OSX binary wheels #153

3.2.0 (2017-09-17)

3.1.3 (2017-07-14)

  • Fix build

3.1.2 (2017-07-14)

  • Fix type annotations

3.1.1 (2017-07-09)

  • Remove memory leak in istr implementation #105

3.1.0 (2017-06-25)

  • Raise RuntimeError on dict iterations if the dict was changed (#99)

  • Update __init__.pyi signatures

3.0.0 (2017-06-21)

  • Refactor internal data structures: main dict operations are about 100% faster now.

  • Preserve order on multidict updates

    Updates are md[key] = val and md.update(...) calls.

    Now the last entry is replaced with new key/value pair, all previous occurrences are removed.

    If key is not present in dictionary the pair is added to the end

    #68

  • Force keys to str instances #88

  • Implement .popall(key[, default]) #84

  • .pop() removes only first occurrence, .popone() added #92

  • Implement dict’s version #86

  • Proxies are not pickable anymore #77

2.1.7 (2017-05-29)

  • Fix import warning on Python 3.6 #79

2.1.6 (2017-05-27)

  • Rebuild the library for fixing missing __spec__ attribute #79

2.1.5 (2017-05-13)

  • Build Python 3.6 binary wheels

2.1.4 (2016-12-1)

  • Remove LICENSE filename extension @ MANIFEST.in file #31

2.1.3 (2016-11-26)

  • Add a fastpath for multidict extending by multidict

2.1.2 (2016-09-25)

2.1.1 (2016-09-22)

2.1.0 (2016-09-18)

  • Allow to create proxy from proxy

  • Add type hints (PEP 484)

2.0.1 (2016-08-02)

  • Don’t crash on {} - MultiDict().keys() and similar operations #6

2.0.0 (2016-07-28)

  • Switch from uppercase approach for case-insensitive string to str.title(). #5

  • Deprecate multidict.upstr() class in favor of istr alias.

1.2.2 (2016-08-02)

  • Don’t crash on {} - MultiDict().keys() and similar operations #6

1.2.1 (2016-07-21)

  • Don’t expose multidict.__version__

1.2.0 (2016-07-16)

  • Make upstr(upstr('abc')) much faster

1.1.0 (2016-07-06)

  • Don’t double-iterate during MultiDict initialization #3

  • Fixed CIMultiDict.pop(): it is case insensitive now. #1

  • Provide manylinux wheels as well as Windows ones

1.0.3 (2016-03-24)

  • Add missing MANIFEST.in

1.0.2 (2016-03-24)

  • Fix setup build

1.0.0 (2016-02-19)

  • Initial implementation