==================
Bug fixes
---------
- Upgraded the C-API macros that have been deprecated in Python 3.9
and later removed in 3.13 -- by :user:`iemelyanov`.
*Related issues and pull requests on GitHub:*
:issue:`862`, :issue:`864`, :issue:`868`, :issue:`898`.
- 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.
*Related issues and pull requests on GitHub:*
:issue:`862`, :issue:`909`, :issue:`926`, :issue:`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:*
:issue:`927`.
Improved documentation
----------------------
- On the `Contributing docs <https://github.com/aio-libs/multidict/blob/master/CHANGES/README.rst>`_ page,
a link to the ``Towncrier philosophy`` has been fixed.
*Related issues and pull requests on GitHub:*
:issue:`911`.
Packaging updates and notes for downstreams
-------------------------------------------
- Stopped marking all files as installable package data
-- by :user:`webknjaz`.
This change helps ``setuptools`` understand that C-headers are
not to be installed under :file:`lib/python3.{x}/site-packages/`.
*Related commits on GitHub:*
:commit:`31e1170`.
- Started publishing pure-python wheels to be installed
as a fallback -- by :user:`webknjaz`.
*Related commits on GitHub:*
:commit:`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 :file:`pyproject.toml`
-- by :user:`Jackenmen`.
*Related issues and pull requests on GitHub:*
:issue:`802`.
- Declared Python 3.12 supported officially in the
distribution package metadata -- by :user:`hugovk`.
*Related issues and pull requests on GitHub:*
:issue:`877`.
Contributor-facing changes
--------------------------
- The test framework has been refactored. In the previous state, the circular
imports reported in :issue:`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 :user:`webknjaz`.
*Related issues and pull requests on GitHub:*
:issue:`98`, :issue:`837`, :issue:`915`.
- Updated the test pins lockfile used in the
``cibuildwheel`` test stage -- by :user:`hoodmane`.
*Related issues and pull requests on GitHub:*
:issue:`827`.
- Added an explicit ``void`` for arguments in C-function signatures
which addresses the following compiler warning:
.. code-block:: console
warning: a function declaration without a prototype is deprecated in all versions of C [-Wstrict-prototypes]
-- by :user:`hoodmane`
*Related issues and pull requests on GitHub:*
:issue:`828`.
- An experimental Python 3.13 job now runs in the CI
-- :user:`webknjaz`.
*Related issues and pull requests on GitHub:*
:issue:`920`.
- Added test coverage for the :ref:`and <python:and>`, :ref:`or
<python:or>`, :py:obj:`sub <python:object.__sub__>`, and
:py:obj:`xor <python:object.__xor__>` operators in the
:file:`multidict/_multidict_base.py` module. It also covers
:py:data:`NotImplemented` and
":py:class:`~typing.Iterable`-but-not-:py:class:`~typing.Set`"
cases there.
-- by :user:`a5r0n`
*Related issues and pull requests on GitHub:*
:issue:`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:*
:issue:`937`.
----