./databases/py-multidict, Multidict implementation

[ CVSweb ] [ Homepage ] [ RSS ] [ Required by ] [ Add to tracker ]


Branch: CURRENT, Version: 6.4.3, Package name: py312-multidict-6.4.3, Maintainer: pkgsrc-users

Multidict is dict-like collection of key-value pairs where key might be
occurred more than once in the container.

HTTP Headers and URL query string require specific data structure: multidict.
It behaves mostly like a regular dict but it may have several values for the
same key and preserves insertion ordering.


Required to run:
[devel/py-cython] [lang/python310]

Master sites:

Filesize: 87.277 KB

Version history: (Expand)


CVS history: (Expand)


   2025-04-13 13:09:38 by Thomas Klausner | Files touched by this commit (3) | Package updated
Log message:
py-multidict: update to 6.4.3.

Add missing test dependencies.

6.4.3
=====

*(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_BUILD` in the environment -- by :user:`bdraco`.

  *Related issues and pull requests on GitHub:*
  :issue:`1145`.

----

6.4.2
=====

*(2025-04-09)*

Bug fixes
---------

- Fixed a segmentation fault when creating subclassed \ 
:py:class:`~multidict.MultiDict` objects on Python < 3.11 -- by \ 
:user:`bdraco`.

  The problem first appeared in 6.4.0

  *Related issues and pull requests on GitHub:*
  :issue:`1141`.

----

6.4.1
=====

*(2025-04-09)*

No significant changes.

----

6.4.0
=====

*(2025-04-09)*

Bug fixes
---------

- Fixed a memory leak creating new :class:`~multidict.istr` objects -- 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`.

----

6.3.2
=====

*(2025-04-03)*

Bug fixes
---------

- Resolved a memory leak by ensuring proper reference count decrementation -- by \ 
:user:`asvetlov` and :user:`bdraco`.

  *Related issues and pull requests on GitHub:*
  :issue:`1121`.

----

6.3.1
=====

*(2025-04-01)*

Bug fixes
---------

- 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`.

----

6.3.0
=====

*(2025-03-31)*

Bug fixes
---------

- 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%.

  .. 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:`webknjaz`

  *Related issues and pull requests on GitHub:*
  :issue:`1093`.

Miscellaneous internal changes
------------------------------

- Synchronized :file:`pythoncapi_compat.h` with 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_list`` implementation.

  *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`.

----

6.2.0
======

*(2025-03-17)*

Bug fixes
---------

- Fixed ``in`` checks throwing an exception instead of returning :data:`False` \ 
when 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 ``NLnet`` grant.

  *Related issues and pull requests on GitHub:*
  :issue:`1046`.
   2024-11-11 08:29:31 by Thomas Klausner | Files touched by this commit (862)
Log message:
py-*: remove unused tool dependency

py-setuptools includes the py-wheel functionality nowadays
   2024-09-10 10:25:44 by Adam Ciarcinski | Files touched by this commit (2) | Package updated
Log message:
py-multidict: updated to 6.1.0

6.1.0 (2024-09-09)

Bug fixes

- Covered the unreachable code path in
  ``multidict._multidict_base._abc_itemsview_register()``
  with typing

Features

- Added support for Python 3.13 -- by :user:`bdraco`.

Removals and backward incompatible breaking changes

- Removed Python 3.7 support
   2024-02-02 09:08:49 by Adam Ciarcinski | Files touched by this commit (3) | Package updated
Log message:
py-multidict: updated to 6.0.5

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 :user:`iemelyanov`.

- Reverted to using the public argument parsing API
  :c:func:`PyArg_ParseTupleAndKeywords` under Python 3.12
  -- by :user:`charles-dyfis-net` and :user:`webknjaz`.

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

- Fixed a ``SystemError: null argument to internal routine`` error on
  a ``MultiDict.items().isdisjoint()`` call when using C Extensions.
   2023-01-02 09:41:26 by Adam Ciarcinski | Files touched by this commit (2) | Package updated
Log message:
py-multidict: updated to 6.0.4

6.0.4

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.
   2022-12-09 12:11:39 by Adam Ciarcinski | Files touched by this commit (2) | Package updated
Log message:
py-multidict: updated to 6.0.3

6.0.3 (2022-12-03)
==================

Features
--------

- Declared the official support for Python 3.11
   2022-01-31 12:57:54 by Thomas Klausner | Files touched by this commit (2) | Package updated
Log message:
py310-multidict: update to 6.0.2.

6.0.2 (2022-01-24)
==================

Bugfixes
--------

- Revert :issue:`644`, restore type annotations to as-of 5.2.0 version. \ 
(:issue:`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. \ 
(:issue:`682`)
   2022-01-24 11:02:23 by Thomas Klausner | Files touched by this commit (3) | Package updated
Log message:
py-multidict: update to 6.0.0.

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. (:issue:`681`)

Bugfixes
--------

- Fixed type annotations for keys of multidict mapping classes. (:issue:`644`)
- Support Multidict[int] for pure-python version.
  ``__class_getitem__`` is already provided by C Extension, making it work with \ 
the pure-extension too. (:issue:`678`)

Deprecations and Removals
-------------------------

- Dropped Python 3.6 support (:issue:`680`)