Changelog
### 1.6
```
================
- Switch to ``aiohttp.web.AppKey``, and deprecate the old 'static_root_url' key.
- Drop Python 3.7, add Python 3.12.
```
### 1.5.1
```
==================
- Add support for Python 3.11.
- Drop support for decorating non-async functions with template (deprecated since 0.16).
```
Links
- PyPI: https://pypi.org/project/aiohttp-jinja2
- Changelog: https://data.safetycli.com/changelogs/aiohttp-jinja2/
- Repo: https://github.com/aio-libs/aiohttp_jinja2/
Changelog
### 0.0.5
```
This fixes when oauth2 resource providers are more technically correct in validating the content-type they receive, specifically for form data.
```
Links
- PyPI: https://pypi.org/project/aiohttp-oauth2
- Changelog: https://data.safetycli.com/changelogs/aiohttp-oauth2/
- Repo: https://github.com/mrasband/aiohttp-oauth2
Changelog
### 3.9.3
```
==================
Bug fixes
---------
- Fixed backwards compatibility breakage (in 3.9.2) of ``ssl`` parameter when set outside
of ``ClientSession`` (e.g. directly in ``TCPConnector``) -- by :user:`Dreamsorcerer`.
*Related issues and pull requests on GitHub:*
:issue:`8097`, :issue:`8098`.
Miscellaneous internal changes
------------------------------
- Improved test suite handling of paths and temp files to consistently use pathlib and pytest fixtures.
*Related issues and pull requests on GitHub:*
:issue:`3957`.
----
```
### 3.9.2
```
==================
Bug fixes
---------
- Fixed server-side websocket connection leak.
*Related issues and pull requests on GitHub:*
:issue:`7978`.
- Fixed ``web.FileResponse`` doing blocking I/O in the event loop.
*Related issues and pull requests on GitHub:*
:issue:`8012`.
- Fixed double compress when compression enabled and compressed file exists in server file responses.
*Related issues and pull requests on GitHub:*
:issue:`8014`.
- Added runtime type check for ``ClientSession`` ``timeout`` parameter.
*Related issues and pull requests on GitHub:*
:issue:`8021`.
- Fixed an unhandled exception in the Python HTTP parser on header lines starting with a colon -- by :user:`pajod`.
Invalid request lines with anything but a dot between the HTTP major and minor version are now rejected.
Invalid header field names containing question mark or slash are now rejected.
Such requests are incompatible with :rfc:`9110section-5.6.2` and are not known to be of any legitimate use.
*Related issues and pull requests on GitHub:*
:issue:`8074`.
- Improved validation of paths for static resources requests to the server -- by :user:`bdraco`.
*Related issues and pull requests on GitHub:*
:issue:`8079`.
Features
--------
- Added support for passing :py:data:`True` to ``ssl`` parameter in ``ClientSession`` while
deprecating :py:data:`None` -- by :user:`xiangyan99`.
*Related issues and pull requests on GitHub:*
:issue:`7698`.
Breaking changes
----------------
- Fixed an unhandled exception in the Python HTTP parser on header lines starting with a colon -- by :user:`pajod`.
Invalid request lines with anything but a dot between the HTTP major and minor version are now rejected.
Invalid header field names containing question mark or slash are now rejected.
Such requests are incompatible with :rfc:`9110section-5.6.2` and are not known to be of any legitimate use.
*Related issues and pull requests on GitHub:*
:issue:`8074`.
Improved documentation
----------------------
- Fixed examples of ``fallback_charset_resolver`` function in the :doc:`client_advanced` document. -- by :user:`henry0312`.
*Related issues and pull requests on GitHub:*
:issue:`7995`.
- The Sphinx setup was updated to avoid showing the empty
changelog draft section in the tagged release documentation
builds on Read The Docs -- by :user:`webknjaz`.
*Related issues and pull requests on GitHub:*
:issue:`8067`.
Packaging updates and notes for downstreams
-------------------------------------------
- The changelog categorization was made clearer. The
contributors can now mark their fragment files more
accurately -- by :user:`webknjaz`.
The new category tags are:
* ``bugfix``
* ``feature``
* ``deprecation``
* ``breaking`` (previously, ``removal``)
* ``doc``
* ``packaging``
* ``contrib``
* ``misc``
*Related issues and pull requests on GitHub:*
:issue:`8066`.
Contributor-facing changes
--------------------------
- Updated :ref:`contributing/Tests coverage <aiohttp-contributing>` section to show how we use ``codecov`` -- by :user:`Dreamsorcerer`.
*Related issues and pull requests on GitHub:*
:issue:`7916`.
- The changelog categorization was made clearer. The
contributors can now mark their fragment files more
accurately -- by :user:`webknjaz`.
The new category tags are:
* ``bugfix``
* ``feature``
* ``deprecation``
* ``breaking`` (previously, ``removal``)
* ``doc``
* ``packaging``
* ``contrib``
* ``misc``
*Related issues and pull requests on GitHub:*
:issue:`8066`.
Miscellaneous internal changes
------------------------------
- Replaced all ``tmpdir`` fixtures with ``tmp_path`` in test suite.
*Related issues and pull requests on GitHub:*
:issue:`3551`.
----
```
### 3.9.1
```
==================
Bugfixes
--------
- Fixed importing aiohttp under PyPy on Windows.
`7848 <https://github.com/aio-libs/aiohttp/issues/7848>`_
- Fixed async concurrency safety in websocket compressor.
`7865 <https://github.com/aio-libs/aiohttp/issues/7865>`_
- Fixed ``ClientResponse.close()`` releasing the connection instead of closing.
`7869 <https://github.com/aio-libs/aiohttp/issues/7869>`_
- Fixed a regression where connection may get closed during upgrade. -- by :user:`Dreamsorcerer`
`7879 <https://github.com/aio-libs/aiohttp/issues/7879>`_
- Fixed messages being reported as upgraded without an Upgrade header in Python parser. -- by :user:`Dreamsorcerer`
`7895 <https://github.com/aio-libs/aiohttp/issues/7895>`_
----
```
### 3.9.0
```
==================
Features
--------
- Introduced ``AppKey`` for static typing support of ``Application`` storage.
See https://docs.aiohttp.org/en/stable/web_advanced.html#application-s-config
`5864 <https://github.com/aio-libs/aiohttp/issues/5864>`_
- Added a graceful shutdown period which allows pending tasks to complete before the application's cleanup is called.
The period can be adjusted with the ``shutdown_timeout`` parameter. -- by :user:`Dreamsorcerer`.
See https://docs.aiohttp.org/en/latest/web_advanced.html#graceful-shutdown
`7188 <https://github.com/aio-libs/aiohttp/issues/7188>`_
- Added `handler_cancellation <https://docs.aiohttp.org/en/stable/web_advanced.html#web-handler-cancellation>`_ parameter to cancel web handler on client disconnection. -- by :user:`mosquito`
This (optionally) reintroduces a feature removed in a previous release.
Recommended for those looking for an extra level of protection against denial-of-service attacks.
`7056 <https://github.com/aio-libs/aiohttp/issues/7056>`_
- Added support for setting response header parameters ``max_line_size`` and ``max_field_size``.
`2304 <https://github.com/aio-libs/aiohttp/issues/2304>`_
- Added ``auto_decompress`` parameter to ``ClientSession.request`` to override ``ClientSession._auto_decompress``. -- by :user:`Daste745`
`3751 <https://github.com/aio-libs/aiohttp/issues/3751>`_
- Changed ``raise_for_status`` to allow a coroutine.
`3892 <https://github.com/aio-libs/aiohttp/issues/3892>`_
- Added client brotli compression support (optional with runtime check).
`5219 <https://github.com/aio-libs/aiohttp/issues/5219>`_
- Added ``client_max_size`` to ``BaseRequest.clone()`` to allow overriding the request body size. -- :user:`anesabml`.
`5704 <https://github.com/aio-libs/aiohttp/issues/5704>`_
- Added a middleware type alias ``aiohttp.typedefs.Middleware``.
`5898 <https://github.com/aio-libs/aiohttp/issues/5898>`_
- Exported ``HTTPMove`` which can be used to catch any redirection request
that has a location -- :user:`dreamsorcerer`.
`6594 <https://github.com/aio-libs/aiohttp/issues/6594>`_
- Changed the ``path`` parameter in ``web.run_app()`` to accept a ``pathlib.Path`` object.
`6839 <https://github.com/aio-libs/aiohttp/issues/6839>`_
- Performance: Skipped filtering ``CookieJar`` when the jar is empty or all cookies have expired.
`7819 <https://github.com/aio-libs/aiohttp/issues/7819>`_
- Performance: Only check origin if insecure scheme and there are origins to treat as secure, in ``CookieJar.filter_cookies()``.
`7821 <https://github.com/aio-libs/aiohttp/issues/7821>`_
- Performance: Used timestamp instead of ``datetime`` to achieve faster cookie expiration in ``CookieJar``.
`7824 <https://github.com/aio-libs/aiohttp/issues/7824>`_
- Added support for passing a custom server name parameter to HTTPS connection.
`7114 <https://github.com/aio-libs/aiohttp/issues/7114>`_
- Added support for using Basic Auth credentials from :file:`.netrc` file when making HTTP requests with the
:py:class:`~aiohttp.ClientSession` ``trust_env`` argument is set to ``True``. -- by :user:`yuvipanda`.
`7131 <https://github.com/aio-libs/aiohttp/issues/7131>`_
- Turned access log into no-op when the logger is disabled.
`7240 <https://github.com/aio-libs/aiohttp/issues/7240>`_
- Added typing information to ``RawResponseMessage``. -- by :user:`Gobot1234`
`7365 <https://github.com/aio-libs/aiohttp/issues/7365>`_
- Removed ``async-timeout`` for Python 3.11+ (replaced with ``asyncio.timeout()`` on newer releases).
`7502 <https://github.com/aio-libs/aiohttp/issues/7502>`_
- Added support for ``brotlicffi`` as an alternative to ``brotli`` (fixing Brotli support on PyPy).
`7611 <https://github.com/aio-libs/aiohttp/issues/7611>`_
- Added ``WebSocketResponse.get_extra_info()`` to access a protocol transport's extra info.
`7078 <https://github.com/aio-libs/aiohttp/issues/7078>`_
- Allow ``link`` argument to be set to None/empty in HTTP 451 exception.
`7689 <https://github.com/aio-libs/aiohttp/issues/7689>`_
Bugfixes
--------
- Implemented stripping the trailing dots from fully-qualified domain names in ``Host`` headers and TLS context when acting as an HTTP client.
This allows the client to connect to URLs with FQDN host name like ``https://example.com./``.
-- by :user:`martin-sucha`.
`3636 <https://github.com/aio-libs/aiohttp/issues/3636>`_
- Fixed client timeout not working when incoming data is always available without waiting. -- by :user:`Dreamsorcerer`.
`5854 <https://github.com/aio-libs/aiohttp/issues/5854>`_
- Fixed ``readuntil`` to work with a delimiter of more than one character.
`6701 <https://github.com/aio-libs/aiohttp/issues/6701>`_
- Added ``__repr__`` to ``EmptyStreamReader`` to avoid ``AttributeError``.
`6916 <https://github.com/aio-libs/aiohttp/issues/6916>`_
- Fixed bug when using ``TCPConnector`` with ``ttl_dns_cache=0``.
`7014 <https://github.com/aio-libs/aiohttp/issues/7014>`_
- Fixed response returned from expect handler being thrown away. -- by :user:`Dreamsorcerer`
`7025 <https://github.com/aio-libs/aiohttp/issues/7025>`_
- Avoided raising ``UnicodeDecodeError`` in multipart and in HTTP headers parsing.
`7044 <https://github.com/aio-libs/aiohttp/issues/7044>`_
- Changed ``sock_read`` timeout to start after writing has finished, avoiding read timeouts caused by an unfinished write. -- by :user:`dtrifiro`
`7149 <https://github.com/aio-libs/aiohttp/issues/7149>`_
- Fixed missing query in tracing method URLs when using ``yarl`` 1.9+.
`7259 <https://github.com/aio-libs/aiohttp/issues/7259>`_
- Changed max 32-bit timestamp to an aware datetime object, for consistency with the non-32-bit one, and to avoid a ``DeprecationWarning`` on Python 3.12.
`7302 <https://github.com/aio-libs/aiohttp/issues/7302>`_
- Fixed ``EmptyStreamReader.iter_chunks()`` never ending. -- by :user:`mind1m`
`7616 <https://github.com/aio-libs/aiohttp/issues/7616>`_
- Fixed a rare ``RuntimeError: await wasn't used with future`` exception. -- by :user:`stalkerg`
`7785 <https://github.com/aio-libs/aiohttp/issues/7785>`_
- Fixed issue with insufficient HTTP method and version validation.
`7700 <https://github.com/aio-libs/aiohttp/issues/7700>`_
- Added check to validate that absolute URIs have schemes.
`7712 <https://github.com/aio-libs/aiohttp/issues/7712>`_
- Fixed unhandled exception when Python HTTP parser encounters unpaired Unicode surrogates.
`7715 <https://github.com/aio-libs/aiohttp/issues/7715>`_
- Updated parser to disallow invalid characters in header field names and stop accepting LF as a request line separator.
`7719 <https://github.com/aio-libs/aiohttp/issues/7719>`_
- Fixed Python HTTP parser not treating 204/304/1xx as an empty body.
`7755 <https://github.com/aio-libs/aiohttp/issues/7755>`_
- Ensure empty body response for 1xx/204/304 per RFC 9112 sec 6.3.
`7756 <https://github.com/aio-libs/aiohttp/issues/7756>`_
- Fixed an issue when a client request is closed before completing a chunked payload. -- by :user:`Dreamsorcerer`
`7764 <https://github.com/aio-libs/aiohttp/issues/7764>`_
- Edge Case Handling for ResponseParser for missing reason value.
`7776 <https://github.com/aio-libs/aiohttp/issues/7776>`_
- Fixed ``ClientWebSocketResponse.close_code`` being erroneously set to ``None`` when there are concurrent async tasks receiving data and closing the connection.
`7306 <https://github.com/aio-libs/aiohttp/issues/7306>`_
- Added HTTP method validation.
`6533 <https://github.com/aio-libs/aiohttp/issues/6533>`_
- Fixed arbitrary sequence types being allowed to inject values via version parameter. -- by :user:`Dreamsorcerer`
`7835 <https://github.com/aio-libs/aiohttp/issues/7835>`_
- Performance: Fixed increase in latency with small messages from websocket compression changes.
`7797 <https://github.com/aio-libs/aiohttp/issues/7797>`_
Improved Documentation
----------------------
- Fixed the `ClientResponse.release`'s type in the doc. Changed from `comethod` to `method`.
`5836 <https://github.com/aio-libs/aiohttp/issues/5836>`_
- Added information on behavior of base_url parameter in `ClientSession`.
`6647 <https://github.com/aio-libs/aiohttp/issues/6647>`_
- Fixed `ClientResponseError` docs.
`6700 <https://github.com/aio-libs/aiohttp/issues/6700>`_
- Updated Redis code examples to follow the latest API.
`6907 <https://github.com/aio-libs/aiohttp/issues/6907>`_
- Added a note about possibly needing to update headers when using ``on_response_prepare``. -- by :user:`Dreamsorcerer`
`7283 <https://github.com/aio-libs/aiohttp/issues/7283>`_
- Completed ``trust_env`` parameter description to honor ``wss_proxy``, ``ws_proxy`` or ``no_proxy`` env.
`7325 <https://github.com/aio-libs/aiohttp/issues/7325>`_
- Expanded SSL documentation with more examples (e.g. how to use certifi). -- by :user:`Dreamsorcerer`
`7334 <https://github.com/aio-libs/aiohttp/issues/7334>`_
- Fix, update, and improve client exceptions documentation.
`7733 <https://github.com/aio-libs/aiohttp/issues/7733>`_
Deprecations and Removals
-------------------------
- Added ``shutdown_timeout`` parameter to ``BaseRunner``, while
deprecating ``shutdown_timeout`` parameter from ``BaseSite``. -- by :user:`Dreamsorcerer`
`7718 <https://github.com/aio-libs/aiohttp/issues/7718>`_
- Dropped Python 3.6 support.
`6378 <https://github.com/aio-libs/aiohttp/issues/6378>`_
- Dropped Python 3.7 support. -- by :user:`Dreamsorcerer`
`7336 <https://github.com/aio-libs/aiohttp/issues/7336>`_
- Removed support for abandoned ``tokio`` event loop. -- by :user:`Dreamsorcerer`
`7281 <https://github.com/aio-libs/aiohttp/issues/7281>`_
Misc
----
- Made ``print`` argument in ``run_app()`` optional.
`3690 <https://github.com/aio-libs/aiohttp/issues/3690>`_
- Improved performance of ``ceil_timeout`` in some cases.
`6316 <https://github.com/aio-libs/aiohttp/issues/6316>`_
- Changed importing Gunicorn to happen on-demand, decreasing import time by ~53%. -- :user:`Dreamsorcerer`
`6591 <https://github.com/aio-libs/aiohttp/issues/6591>`_
- Improved import time by replacing ``http.server`` with ``http.HTTPStatus``.
`6903 <https://github.com/aio-libs/aiohttp/issues/6903>`_
- Fixed annotation of ``ssl`` parameter to disallow ``True``. -- by :user:`Dreamsorcerer`.
`7335 <https://github.com/aio-libs/aiohttp/issues/7335>`_
----
```
### 3.8.6
```
==================
Security bugfixes
-----------------
- Upgraded the vendored copy of llhttp_ to v9.1.3 -- by :user:`Dreamsorcerer`
Thanks to :user:`kenballus` for reporting this, see
https://github.com/aio-libs/aiohttp/security/advisories/GHSA-pjjw-qhg8-p2p9.
.. _llhttp: https://llhttp.org
`7647 <https://github.com/aio-libs/aiohttp/issues/7647>`_
- Updated Python parser to comply with RFCs 9110/9112 -- by :user:`Dreamorcerer`
Thanks to :user:`kenballus` for reporting this, see
https://github.com/aio-libs/aiohttp/security/advisories/GHSA-gfw2-4jvh-wgfg.
`7663 <https://github.com/aio-libs/aiohttp/issues/7663>`_
Deprecation
-----------
- Added ``fallback_charset_resolver`` parameter in ``ClientSession`` to allow a user-supplied
character set detection function.
Character set detection will no longer be included in 3.9 as a default. If this feature is needed,
please use `fallback_charset_resolver <https://docs.aiohttp.org/en/stable/client_advanced.html#character-set-detection>`_.
`7561 <https://github.com/aio-libs/aiohttp/issues/7561>`_
Features
--------
- Enabled lenient response parsing for more flexible parsing in the client
(this should resolve some regressions when dealing with badly formatted HTTP responses). -- by :user:`Dreamsorcerer`
`7490 <https://github.com/aio-libs/aiohttp/issues/7490>`_
Bugfixes
--------
- Fixed ``PermissionError`` when ``.netrc`` is unreadable due to permissions.
`7237 <https://github.com/aio-libs/aiohttp/issues/7237>`_
- Fixed output of parsing errors pointing to a ``\n``. -- by :user:`Dreamsorcerer`
`7468 <https://github.com/aio-libs/aiohttp/issues/7468>`_
- Fixed ``GunicornWebWorker`` max_requests_jitter not working.
`7518 <https://github.com/aio-libs/aiohttp/issues/7518>`_
- Fixed sorting in ``filter_cookies`` to use cookie with longest path. -- by :user:`marq24`.
`7577 <https://github.com/aio-libs/aiohttp/issues/7577>`_
- Fixed display of ``BadStatusLine`` messages from llhttp_. -- by :user:`Dreamsorcerer`
`7651 <https://github.com/aio-libs/aiohttp/issues/7651>`_
----
```
### 3.8.5
```
==================
Security bugfixes
-----------------
- Upgraded the vendored copy of llhttp_ to v8.1.1 -- by :user:`webknjaz`
and :user:`Dreamsorcerer`.
Thanks to :user:`sethmlarson` for reporting this and providing us with
comprehensive reproducer, workarounds and fixing details! For more
information, see
https://github.com/aio-libs/aiohttp/security/advisories/GHSA-45c4-8wx5-qw6w.
.. _llhttp: https://llhttp.org
`7346 <https://github.com/aio-libs/aiohttp/issues/7346>`_
Features
--------
- Added information to C parser exceptions to show which character caused the error. -- by :user:`Dreamsorcerer`
`7366 <https://github.com/aio-libs/aiohttp/issues/7366>`_
Bugfixes
--------
- Fixed a transport is :data:`None` error -- by :user:`Dreamsorcerer`.
`3355 <https://github.com/aio-libs/aiohttp/issues/3355>`_
----
```
### 3.8.4
```
==================
Bugfixes
--------
- Fixed incorrectly overwriting cookies with the same name and domain, but different path.
`6638 <https://github.com/aio-libs/aiohttp/issues/6638>`_
- Fixed ``ConnectionResetError`` not being raised after client disconnection in SSL environments.
`7180 <https://github.com/aio-libs/aiohttp/issues/7180>`_
----
```
### 3.8.3
```
==================
.. attention::
This is the last :doc:`aiohttp <index>` release tested under
Python 3.6. The 3.9 stream is dropping it from the CI and the
distribution package metadata.
Bugfixes
--------
- Increased the upper boundary of the :doc:`multidict:index` dependency
to allow for the version 6 -- by :user:`hugovk`.
It used to be limited below version 7 in :doc:`aiohttp <index>` v3.8.1 but
was lowered in v3.8.2 via :pr:`6550` and never brought back, causing
problems with dependency pins when upgrading. :doc:`aiohttp <index>` v3.8.3
fixes that by recovering the original boundary of ``< 7``.
`6950 <https://github.com/aio-libs/aiohttp/issues/6950>`_
----
```
### 3.8.2
```
=====================================================
Bugfixes
--------
- Support registering OPTIONS HTTP method handlers via RouteTableDef.
`4663 <https://github.com/aio-libs/aiohttp/issues/4663>`_
- Started supporting ``authority-form`` and ``absolute-form`` URLs on the server-side.
`6227 <https://github.com/aio-libs/aiohttp/issues/6227>`_
- Fix Python 3.11 alpha incompatibilities by using Cython 0.29.25
`6396 <https://github.com/aio-libs/aiohttp/issues/6396>`_
- Remove a deprecated usage of pytest.warns(None)
`6663 <https://github.com/aio-libs/aiohttp/issues/6663>`_
- Fix regression where ``asyncio.CancelledError`` occurs on client disconnection.
`6719 <https://github.com/aio-libs/aiohttp/issues/6719>`_
- Export :py:class:`~aiohttp.web.PrefixedSubAppResource` under
:py:mod:`aiohttp.web` -- by :user:`Dreamsorcerer`.
This fixes a regression introduced by :pr:`3469`.
`6889 <https://github.com/aio-libs/aiohttp/issues/6889>`_
- Dropped the :class:`object` type possibility from
the :py:attr:`aiohttp.ClientSession.timeout`
property return type declaration.
`6917 <https://github.com/aio-libs/aiohttp/issues/6917>`_,
`6923 <https://github.com/aio-libs/aiohttp/issues/6923>`_
Improved Documentation
----------------------
- Added clarification on configuring the app object with settings such as a db connection.
`4137 <https://github.com/aio-libs/aiohttp/issues/4137>`_
- Edited the web.run_app declaration.
`6401 <https://github.com/aio-libs/aiohttp/issues/6401>`_
- Dropped the :class:`object` type possibility from
the :py:attr:`aiohttp.ClientSession.timeout`
property return type declaration.
`6917 <https://github.com/aio-libs/aiohttp/issues/6917>`_,
`6923 <https://github.com/aio-libs/aiohttp/issues/6923>`_
Deprecations and Removals
-------------------------
- Drop Python 3.5 support, aiohttp works on 3.6+ now.
`4046 <https://github.com/aio-libs/aiohttp/issues/4046>`_
Misc
----
- `6369 <https://github.com/aio-libs/aiohttp/issues/6369>`_, `#6399 <https://github.com/aio-libs/aiohttp/issues/6399>`_, `#6550 <https://github.com/aio-libs/aiohttp/issues/6550>`_, `#6708 <https://github.com/aio-libs/aiohttp/issues/6708>`_, `#6757 <https://github.com/aio-libs/aiohttp/issues/6757>`_, `#6857 <https://github.com/aio-libs/aiohttp/issues/6857>`_, `#6872 <https://github.com/aio-libs/aiohttp/issues/6872>`_
----
```
### 3.8.1
```
==================
Bugfixes
--------
- Fix the error in handling the return value of `getaddrinfo`.
`getaddrinfo` will return an `(int, bytes)` tuple, if CPython could not handle the address family.
It will cause an index out of range error in aiohttp. For example, if user compile CPython with
`--disable-ipv6` option, but his system enable the ipv6.
`5901 <https://github.com/aio-libs/aiohttp/issues/5901>`_
- Do not install "examples" as a top-level package.
`6189 <https://github.com/aio-libs/aiohttp/issues/6189>`_
- Restored ability to connect IPv6-only host.
`6195 <https://github.com/aio-libs/aiohttp/issues/6195>`_
- Remove ``Signal`` from ``__all__``, replace ``aiohttp.Signal`` with ``aiosignal.Signal`` in docs
`6201 <https://github.com/aio-libs/aiohttp/issues/6201>`_
- Made chunked encoding HTTP header check stricter.
`6305 <https://github.com/aio-libs/aiohttp/issues/6305>`_
Improved Documentation
----------------------
- update quick starter demo codes.
`6240 <https://github.com/aio-libs/aiohttp/issues/6240>`_
- Added an explanation of how tiny timeouts affect performance to the client reference document.
`6274 <https://github.com/aio-libs/aiohttp/issues/6274>`_
- Add flake8-docstrings to flake8 configuration, enable subset of checks.
`6276 <https://github.com/aio-libs/aiohttp/issues/6276>`_
- Added information on running complex applications with additional tasks/processes -- :user:`Dreamsorcerer`.
`6278 <https://github.com/aio-libs/aiohttp/issues/6278>`_
Misc
----
- `6205 <https://github.com/aio-libs/aiohttp/issues/6205>`_
----
```
### 3.8.0
```
==================
Features
--------
- Added a ``GunicornWebWorker`` feature for extending the aiohttp server configuration by allowing the 'wsgi' coroutine to return ``web.AppRunner`` object.
`2988 <https://github.com/aio-libs/aiohttp/issues/2988>`_
- Switch from ``http-parser`` to ``llhttp``
`3561 <https://github.com/aio-libs/aiohttp/issues/3561>`_
- Use Brotli instead of brotlipy
`3803 <https://github.com/aio-libs/aiohttp/issues/3803>`_
- Disable implicit switch-back to pure python mode. The build fails loudly if aiohttp
cannot be compiled with C Accelerators. Use AIOHTTP_NO_EXTENSIONS=1 to explicitly
disable C Extensions complication and switch to Pure-Python mode. Note that Pure-Python
mode is significantly slower than compiled one.
`3828 <https://github.com/aio-libs/aiohttp/issues/3828>`_
- Make access log use local time with timezone
`3853 <https://github.com/aio-libs/aiohttp/issues/3853>`_
- Implemented ``readuntil`` in ``StreamResponse``
`4054 <https://github.com/aio-libs/aiohttp/issues/4054>`_
- FileResponse now supports ETag.
`4594 <https://github.com/aio-libs/aiohttp/issues/4594>`_
- Add a request handler type alias ``aiohttp.typedefs.Handler``.
`4686 <https://github.com/aio-libs/aiohttp/issues/4686>`_
- ``AioHTTPTestCase`` is more async friendly now.
For people who use unittest and are used to use :py:exc:`~unittest.TestCase`
it will be easier to write new test cases like the sync version of the :py:exc:`~unittest.TestCase` class,
without using the decorator `unittest_run_loop`, just `async def test_*`.
The only difference is that for the people using python3.7 and below a new dependency is needed, it is ``asynctestcase``.
`4700 <https://github.com/aio-libs/aiohttp/issues/4700>`_
- Add validation of HTTP header keys and values to prevent header injection.
`4818 <https://github.com/aio-libs/aiohttp/issues/4818>`_
- Add predicate to ``AbstractCookieJar.clear``.
Add ``AbstractCookieJar.clear_domain`` to clean all domain and subdomains cookies only.
`4942 <https://github.com/aio-libs/aiohttp/issues/4942>`_
- Add keepalive_timeout parameter to web.run_app.
`5094 <https://github.com/aio-libs/aiohttp/issues/5094>`_
- Tracing for client sent headers
`5105 <https://github.com/aio-libs/aiohttp/issues/5105>`_
- Make type hints for http parser stricter
`5267 <https://github.com/aio-libs/aiohttp/issues/5267>`_
- Add final declarations for constants.
`5275 <https://github.com/aio-libs/aiohttp/issues/5275>`_
- Switch to external frozenlist and aiosignal libraries.
`5293 <https://github.com/aio-libs/aiohttp/issues/5293>`_
- Don't send secure cookies by insecure transports.
By default, the transport is secure if https or wss scheme is used.
Use `CookieJar(treat_as_secure_origin="http://127.0.0.1")` to override the default security checker.
`5571 <https://github.com/aio-libs/aiohttp/issues/5571>`_
- Always create a new event loop in ``aiohttp.web.run_app()``.
This adds better compatibility with ``asyncio.run()`` or if trying to run multiple apps in sequence.
`5572 <https://github.com/aio-libs/aiohttp/issues/5572>`_
- Add ``aiohttp.pytest_plugin.AiohttpClient`` for static typing of pytest plugin.
`5585 <https://github.com/aio-libs/aiohttp/issues/5585>`_
- Added a ``socket_factory`` argument to ``BaseTestServer``.
`5844 <https://github.com/aio-libs/aiohttp/issues/5844>`_
- Add compression strategy parameter to enable_compression method.
`5909 <https://github.com/aio-libs/aiohttp/issues/5909>`_
- Added support for Python 3.10 to Github Actions CI/CD workflows and fix the related deprecation warnings -- :user:`Hanaasagi`.
`5927 <https://github.com/aio-libs/aiohttp/issues/5927>`_
- Switched ``chardet`` to ``charset-normalizer`` for guessing the HTTP payload body encoding -- :user:`Ousret`.
`5930 <https://github.com/aio-libs/aiohttp/issues/5930>`_
- Added optional auto_decompress argument for HttpRequestParser
`5957 <https://github.com/aio-libs/aiohttp/issues/5957>`_
- Added support for HTTPS proxies to the extent CPython's
:py:mod:`asyncio` supports it -- by :user:`bmbouter`,
:user:`jborean93` and :user:`webknjaz`.
`5992 <https://github.com/aio-libs/aiohttp/issues/5992>`_
- Added ``base_url`` parameter to the initializer of :class:`~aiohttp.ClientSession`.
`6013 <https://github.com/aio-libs/aiohttp/issues/6013>`_
- Add Trove classifier and create binary wheels for 3.10. -- :user:`hugovk`.
`6079 <https://github.com/aio-libs/aiohttp/issues/6079>`_
- Started shipping platform-specific wheels with the ``musl`` tag targeting typical Alpine Linux runtimes — :user:`asvetlov`.
`6139 <https://github.com/aio-libs/aiohttp/issues/6139>`_
- Started shipping platform-specific arm64 wheels for Apple Silicon — :user:`asvetlov`.
`6139 <https://github.com/aio-libs/aiohttp/issues/6139>`_
Bugfixes
--------
- Modify _drain_helper() to handle concurrent `await resp.write(...)` or `ws.send_json(...)` calls without race-condition.
`2934 <https://github.com/aio-libs/aiohttp/issues/2934>`_
- Started using `MultiLoopChildWatcher` when it's available under POSIX while setting up the test I/O loop.
`3450 <https://github.com/aio-libs/aiohttp/issues/3450>`_
- Only encode content-disposition filename parameter using percent-encoding.
Other parameters are encoded to quoted-string or RFC2231 extended parameter
value.
`4012 <https://github.com/aio-libs/aiohttp/issues/4012>`_
- Fixed HTTP client requests to honor ``no_proxy`` environment variables.
`4431 <https://github.com/aio-libs/aiohttp/issues/4431>`_
- Fix supporting WebSockets proxies configured via environment variables.
`4648 <https://github.com/aio-libs/aiohttp/issues/4648>`_
- Change return type on URLDispatcher to UrlMappingMatchInfo to improve type annotations.
`4748 <https://github.com/aio-libs/aiohttp/issues/4748>`_
- Ensure a cleanup context is cleaned up even when an exception occurs during startup.
`4799 <https://github.com/aio-libs/aiohttp/issues/4799>`_
- Added a new exception type for Unix socket client errors which provides a more useful error message.
`4984 <https://github.com/aio-libs/aiohttp/issues/4984>`_
- Remove Transfer-Encoding and Content-Type headers for 204 in StreamResponse
`5106 <https://github.com/aio-libs/aiohttp/issues/5106>`_
- Only depend on typing_extensions for Python <3.8
`5107 <https://github.com/aio-libs/aiohttp/issues/5107>`_
- Add ABNORMAL_CLOSURE and BAD_GATEWAY to WSCloseCode
`5192 <https://github.com/aio-libs/aiohttp/issues/5192>`_
- Fix cookies disappearing from HTTPExceptions.
`5233 <https://github.com/aio-libs/aiohttp/issues/5233>`_
- StaticResource prefixes no longer match URLs with a non-folder prefix. For example ``routes.static('/foo', '/foo')`` no longer matches the URL ``/foobar``. Previously, this would attempt to load the file ``/foo/ar``.
`5250 <https://github.com/aio-libs/aiohttp/issues/5250>`_
- Acquire the connection before running traces to prevent race condition.
`5259 <https://github.com/aio-libs/aiohttp/issues/5259>`_
- Add missing slots to _RequestContextManager`` and ``_WSRequestContextManager``
`5329 <https://github.com/aio-libs/aiohttp/issues/5329>`_
- Ensure sending a zero byte file does not throw an exception (round 2)
`5380 <https://github.com/aio-libs/aiohttp/issues/5380>`_
- Set "text/plain" when data is an empty string in client requests.
`5392 <https://github.com/aio-libs/aiohttp/issues/5392>`_
- Stop automatically releasing the ``ClientResponse`` object on calls to the ``ok`` property for the failed requests.
`5403 <https://github.com/aio-libs/aiohttp/issues/5403>`_
- Include query parameters from `params` keyword argument in tracing `URL`.
`5432 <https://github.com/aio-libs/aiohttp/issues/5432>`_
- Fix annotations
`5466 <https://github.com/aio-libs/aiohttp/issues/5466>`_
- Fixed the multipart POST requests processing to always release file
descriptors for the ``tempfile.Temporaryfile``-created
``_io.BufferedRandom`` instances of files sent within multipart request
bodies via HTTP POST requests -- by :user:`webknjaz`.
`5494 <https://github.com/aio-libs/aiohttp/issues/5494>`_
- Fix 0 being incorrectly treated as an immediate timeout.
`5527 <https://github.com/aio-libs/aiohttp/issues/5527>`_
- Fixes failing tests when an environment variable <scheme>_proxy is set.
`5554 <https://github.com/aio-libs/aiohttp/issues/5554>`_
- Replace deprecated app handler design in ``tests/autobahn/server.py`` with call to ``web.run_app``; replace deprecated ``aiohttp.ws_connect`` calls in ``tests/autobahn/client.py`` with ``aiohttp.ClienSession.ws_connect``.
`5606 <https://github.com/aio-libs/aiohttp/issues/5606>`_
- Fixed test for ``HTTPUnauthorized`` that access the ``text`` argument. This is not used in any part of the code, so it's removed now.
`5657 <https://github.com/aio-libs/aiohttp/issues/5657>`_
- Remove incorrect default from docs
`5727 <https://github.com/aio-libs/aiohttp/issues/5727>`_
- Remove external test dependency to http://httpbin.org
`5840 <https://github.com/aio-libs/aiohttp/issues/5840>`_
- Don't cancel current task when entering a cancelled timer.
`5853 <https://github.com/aio-libs/aiohttp/issues/5853>`_
- Added ``params`` keyword argument to ``ClientSession.ws_connect``. -- :user:`hoh`.
`5868 <https://github.com/aio-libs/aiohttp/issues/5868>`_
- Uses :py:class:`~asyncio.ThreadedChildWatcher` under POSIX to allow setting up test loop in non-main thread.
`5877 <https://github.com/aio-libs/aiohttp/issues/5877>`_
- Fix the error in handling the return value of `getaddrinfo`.
`getaddrinfo` will return an `(int, bytes)` tuple, if CPython could not handle the address family.
It will cause a index out of range error in aiohttp. For example, if user compile CPython with
`--disable-ipv6` option but his system enable the ipv6.
`5901 <https://github.com/aio-libs/aiohttp/issues/5901>`_
- Removed the deprecated ``loop`` argument from the ``asyncio.sleep``/``gather`` calls
`5905 <https://github.com/aio-libs/aiohttp/issues/5905>`_
- Return ``None`` from ``request.if_modified_since``, ``request.if_unmodified_since``, ``request.if_range`` and ``response.last_modified`` when corresponding http date headers are invalid.
`5925 <https://github.com/aio-libs/aiohttp/issues/5925>`_
- Fix resetting `SIGCHLD` signals in Gunicorn aiohttp Worker to fix `subprocesses` that capture output having an incorrect `returncode`.
`6130 <https://github.com/aio-libs/aiohttp/issues/6130>`_
- Raise ``400: Content-Length can't be present with Transfer-Encoding`` if both ``Content-Length`` and ``Transfer-Encoding`` are sent by peer by both C and Python implementations
`6182 <https://github.com/aio-libs/aiohttp/issues/6182>`_
Improved Documentation
----------------------
- Refactored OpenAPI/Swagger aiohttp addons, added ``aio-openapi``
`5326 <https://github.com/aio-libs/aiohttp/issues/5326>`_
- Fixed docs on request cookies type, so it matches what is actually used in the code (a
read-only dictionary-like object).
`5725 <https://github.com/aio-libs/aiohttp/issues/5725>`_
- Documented that the HTTP client ``Authorization`` header is removed
on redirects to a different host or protocol.
`5850 <https://github.com/aio-libs/aiohttp/issues/5850>`_
Misc
----
- `3927 <https://github.com/aio-libs/aiohttp/issues/3927>`_, `#4247 <https://github.com/aio-libs/aiohttp/issues/4247>`_, `#4247 <https://github.com/aio-libs/aiohttp/issues/4247>`_, `#5389 <https://github.com/aio-libs/aiohttp/issues/5389>`_, `#5457 <https://github.com/aio-libs/aiohttp/issues/5457>`_, `#5486 <https://github.com/aio-libs/aiohttp/issues/5486>`_, `#5494 <https://github.com/aio-libs/aiohttp/issues/5494>`_, `#5515 <https://github.com/aio-libs/aiohttp/issues/5515>`_, `#5625 <https://github.com/aio-libs/aiohttp/issues/5625>`_, `#5635 <https://github.com/aio-libs/aiohttp/issues/5635>`_, `#5648 <https://github.com/aio-libs/aiohttp/issues/5648>`_, `#5657 <https://github.com/aio-libs/aiohttp/issues/5657>`_, `#5890 <https://github.com/aio-libs/aiohttp/issues/5890>`_, `#5914 <https://github.com/aio-libs/aiohttp/issues/5914>`_, `#5932 <https://github.com/aio-libs/aiohttp/issues/5932>`_, `#6002 <https://github.com/aio-libs/aiohttp/issues/6002>`_, `#6045 <https://github.com/aio-libs/aiohttp/issues/6045>`_, `#6131 <https://github.com/aio-libs/aiohttp/issues/6131>`_, `#6156 <https://github.com/aio-libs/aiohttp/issues/6156>`_, `#6165 <https://github.com/aio-libs/aiohttp/issues/6165>`_, `#6166 <https://github.com/aio-libs/aiohttp/issues/6166>`_
----
```
Links
- PyPI: https://pypi.org/project/aiohttp
- Changelog: https://data.safetycli.com/changelogs/aiohttp/
- Repo: https://github.com/aio-libs/aiohttp
Changelog
### 2.0.1
```
Features
- Added Python 3.10 to CI & Updated the Docs
(see 1160)
- Enable mypy in CI (see 1101)
- Synchronized reading the responses from a connection
(see 1106)
Fixes
- Remove __del__ from Redis (Fixes 1115)
(see 1227)
- fix socket.error raises (see 1129)
- Fix buffer is closed error when using PythonParser class
(see 1213)
```
### 2.0.0
```
Features
- Port redis-py's client implementation to aioredis.
(see 891)
- Make hiredis an optional dependency.
(see 917)
```
Links
- PyPI: https://pypi.org/project/aioredis
- Changelog: https://data.safetycli.com/changelogs/aioredis/
- Repo: https://github.com/aio-libs/aioredis-py
Changelog
### 3.21.1
```
*******************
Bug fixes:
- Fix error message when field is declared as a class and not an instance (:issue:`2245`).
Thanks :user:`travnick` for reporting.
```
### 3.21.0
```
*******************
Bug fixes:
- Fix validation of ``URL`` fields to allow missing user field,
per NWG RFC 3986 (:issue:`2232`). Thanks :user:`ddennerline3` for reporting
and :user:`deckar01` for the PR.
Other changes:
- *Backwards-incompatible*: ``__version__``, ``__parsed_version__``, and ``__version_info__``
attributes are deprecated (:issue:`2227`). Use feature detection or
``importlib.metadata.version("marshmallow")`` instead.
```
### 3.20.2
```
*******************
Bug fixes:
- Fix ``Nested`` field type hint for lambda ``Schema`` types (:pr:`2164`).
Thanks :user:`somethingnew2-0` for the PR.
Other changes:
- Officially support Python 3.12 (:pr:`2188`).
Thanks :user:`hugovk` for the PR.
```
### 3.20.1
```
*******************
Bug fixes:
- Fix call to ``get_declared_fields``: pass ``dict_cls`` again (:issue:`2152`).
Thanks :user:`Cheaterman` for reporting.
```
### 3.20.0
```
*******************
Features:
- Add ``absolute`` parameter to ``URL`` validator and ``Url`` field (:pr:`2123`).
Thanks :user:`sirosen` for the PR.
- Use Abstract Base Classes to define ``FieldABC`` and ``SchemaABC``
(:issue:`1449`). Thanks :user:`aditkumar72` for the PR.
- Use `OrderedSet` as default `set_class`. Schemas are now ordered by default.
(:issue:`1744`)
Bug fixes:
- Handle ``OSError`` and ``OverflowError`` in ``utils.from_timestamp`` (:pr:`2102`).
Thanks :user:`TheBigRoomXXL` for the PR.
- Fix the default inheritance of nested partial schemas (:issue:`2149`).
Thanks :user:`matejsp` for reporting.
Other changes:
- Officially support Python 3.11 (:pr:`2067`).
- Drop support for Python 3.7 (:pr:`2135`).
```
### 3.19.0
```
*******************
Features:
- Add ``timestamp`` and ``timestamp_ms`` formats to ``fields.DateTime``
(:issue:`612`).
Thanks :user:`vgavro` for the suggestion and thanks :user:`vanHoi` for
the PR.
```
### 3.18.0
```
*******************
Features:
- Add ``Enum`` field (:pr:`2017`) and (:pr:`2044`).
Bug fixes:
- Fix typing in ``Field._serialize`` signature (:pr:`2046`).
```
### 3.17.1
```
*******************
Bug fixes:
- Add return type to ``fields.Email.__init__`` (:pr:`2018`).
Thanks :user:`kkirsche` for the PR.
- Add missing type hint to IPInterface __init__ (:pr:`2036`).
```
### 3.17.0
```
*******************
Features:
- Support serialization as float in ``TimeDelta`` field (:pr:`1998`).
Thanks :user:`marcosatti` for the PR.
- Add ``messages_dict`` property to ``ValidationError`` to facilitate type checking
(:pr:`1976`).
Thanks :user:`sirosen` for the PR.
```
### 3.16.0
```
*******************
Features:
- Raise ``ValueError`` if an invalid value is passed to the ``unknown``
argument (:issue:`1721`, :issue:`1732`).
Thanks :user:`sirosen` for the PR.
Other changes:
- Set lower bound for ``packaging`` requirement (:issue:`1957`).
Thanks :user:`MatthewNicolTR` for reporting and thanks :user:`sirosen` for the PR.
- Improve warning messages by passing ``stacklevel`` (:pr:`1986`).
Thanks :user:`tirkarthi` for the PR.
```
### 3.15.0
```
*******************
Features:
- Allow passing a ``dict`` to ``fields.Nested`` (:pr:`1935`).
Thanks :user:`sirosen` for the PR.
Other changes:
- Address distutils deprecation warning in Python 3.10 (:pr:`1903`).
Thanks :user:`kkirsche` for the PR.
- Add py310 to black target-version (:pr:`1921`).
- Drop support for Python 3.6 (:pr:`1923`).
- Use postponed evaluation of annotations (:pr:`1932`).
Thanks :user:`Isira-Seneviratne` for the PR.
```
### 3.14.1
```
*******************
Bug fixes:
- Fix publishing type hints per `PEP-561 <https://www.python.org/dev/peps/pep-0561/>`_
(:pr:`1905`). Thanks :user:`bwindsor` for the catch and patch.
```
### 3.14.0
```
*******************
Bug fixes:
- Fix ``fields.TimeDelta`` serialization precision (:issue:`1865`).
Thanks :user:`yarsanich` for reporting.
Other changes:
- Fix type-hints for ``data`` arg in ``Schema.validate`` to accept
list of dictionaries (:issue:`1790`, :pr:`1868`).
Thanks :user:`yourun-proger` for PR.
- Improve warning when passing metadata as keyword arguments (:pr:`1882`).
Thanks :user:`traherom` for the PR.
- Don't build universal wheels. We don't support Python 2 anymore.
(:issue:`1860`) Thanks :user:`YKdvd` for reporting.
- Make the build reproducible (:pr:`1862`).
- Drop support for Python 3.5 (:pr:`1863`).
- Test against Python 3.10 (:pr:`1888`).
```
### 3.13.0
```
*******************
Features:
- Replace ``missing``/``default`` field parameters with
``load_default``/``dump_default`` (:pr:`1742`).
Thanks :user:`sirosen` for the PR.
Deprecations:
- The use of ``missing``/``default`` field parameters is deprecated and will be
removed in marshmallow 4. ``load_default``/``dump_default`` should be used
instead.
```
### 3.12.2
```
*******************
Bug fixes:
- Don't expose ``Field``\s as ``Schema`` attributes. This reverts a change
introduced in 3.12.0 that causes issues when field names conflict with
``Schema`` attributes or methods. ``Fields``\s are still accessible on a
``Schema`` instance through the ``fields`` attribute. (:pr:`1843`)
```
### 3.12.1
```
*******************
Bug fixes:
- Fix bug that raised an ``AttributeError`` when instantiating a
``Schema`` with a field named ``parent`` (:issue:`1808`).
Thanks :user:`flying-sheep` for reporting and helping with the fix.
```
### 3.12.0
```
*******************
Features:
- Add ``validate.And`` (:issue:`1768`).
Thanks :user:`rugleb` for the suggestion.
- Add type annotations to ``marshmallow.decorators`` (:issue:`1788`, :pr:`1789`).
Thanks :user:`michaeldimchuk` for the PR.
- Let ``Field``\s be accessed by name as ``Schema`` attributes (:pr:`1631`).
Other changes:
- Improve types in ``marshmallow.validate`` (:pr:`1786`).
- Make ``marshmallow.validate.Validator`` an abstract base class (:pr:`1786`).
- Remove unnecessary list cast (:pr:`1785`).
```
Links
- PyPI: https://pypi.org/project/marshmallow
- Changelog: https://data.safetycli.com/changelogs/marshmallow/
Changelog
### 0.19.0
```
Changes
=======
* Drop support of Python 3.7 and update CI (578)
(by fantix in ee5ad26a for 578)
Fixes
=====
* Restore uvloop.new_event_loop and other missing uvloop members to typing (573)
(by graingert in 5c500ee2 for 573)
* Fix docstring of loop.shutdown_default_executor (535)
(by Gelbpunkt in 919da567 for 535)
* Fix CI status badge (522)
(by shuuji3 in 0e9ff6cd for 522)
```
### 0.18.0
```
Fixes
=====
* CI fixes (520, 553)
(by altendky in 7783f1c5, dulmandakh in 1dd40f17)
* Make extract_stack resilient to lacking frames. (563)
(by jhance in 06876434 for 563)
* Port uvloop to Python 3.12 (570)
(by 1st1, fantix in 9f82bd74 for 569)
```
### 0.17.0
```
This release adds Python 3.11 support, updates bundled libuv to 1.43.0
and fixes a handful of issues.
Changes
=======
* Expose uv_loop_t pointer for integration with other C-extensions (310)
(by pranavtbhat in b332eb85 for 310)
* Support python 3.11+ (473)
(by zeroday0619 in 8e42921d for 473)
* Expose libuv uv_fs_event functionality (474)
(by jensbjorgensen fantix in 74d381e8 for 474)
* Activate debug mode when `-X dev` is used
(by jack1142 in 637a77a3)
* Expose uv_version() for libuv API compatibility (491)
(by fantix in 089f6cbf for 491)
* Fix loop.getaddrinfo() and tests (495)
(by fantix in 598b16fd for 495)
* Bump to libuv 1.43.0
(by fantix in 94e5e535)
Fixes
=====
* _TransProtPair is no longer defined in asyncio.events
(by jensbjorgensen in fae5f7fb)
* use a TypeVar for asyncio.BaseProtocol (478)
(by graingert in 3aacb352 for 478)
* Fix segfault in TimerHandle.when() after cleared
(by jensbjorgensen in c39afff8 for 469)
* Avoid self._errpipe_write double close (466)
(by graingert in 72140d7e for 466)
* Fix typo in test (456)
(by kianmeng in 033d52d0 for 456)
* Fix potential infinite loop (446)
(by kfur in ada43c06 for 446)
* use a stack of self._fds_to_close to prevent double closes (481)
(by graingert in 3214cf68 for 481)
* Fix incorrect main thread id value forking from a thread (453)
(by horpto fantix in e7934c88 for 453)
* create_subprocess_exec should treat env={} as empty environment (439) (454)
(by byllyfish in e04637e0 for 439)
* Queue write only after processing all buffers (445)
(by jakirkham fantix in 9c6ecb62 for 445)
* Drop Python 3.6 support for thread ident
(by fantix in 9c37930e)
* bugfix: write to another transport in resume_writing() fails (498)
(by fantix in d2deffef for 498)
Build
=====
* Upgrade GitHub Actions (477) (480)
(by cclauss in fcbf422d for 477, 10086942 for 480)
* typo `same as same`
(by YoSTEALTH in fedba80a)
* setup.py: allow to override extra_compile_args (443)
(by giuliobenetti in a130375f for 443)
* Drop hack in setup.py in finalize_options (492)
(by fantix in 2f1bc83c for 492)
* Fix tests invocation on release CI worklow (489)
(by ben9923 in d6a2b597 for 489)
Documentation
=============
* use asyncio.Runner loop_factory on 3.11+ (472)
(by graingert in 31ba48ca for 472)
* Fix CI badge in docs, remove remaining Travis CI references from docs
(by Nothing4You in c6901a74)
* Fix typo in README
(by monosans in 73d7253b)
```
### 0.16.0
```
This release adds Python 3.10 support, updates bundled libuv to 1.42.0
and fixes a handful of issues.
Changes
=======
* Python 3.10 support (432)
(by elprans in 2519e2df for 432)
* Bump vendored libuv to 1.42.0 (433)
(by elprans in a62f7818 for 433)
* Use cibuildwheel to build wheels (435)
(by elprans in 20febe0b for 435)
* Add support for `<timer handle>.when()`
(by Jens Jorgensen in 62b2af9c)
Fixes
=====
* Fix ref issue when protocol is in Cython
(by fantix in 70cafc82 for 2222)
* Set `python_requires` in setup.py
(by graingert in c808a663)
* SSL: schedule first data after waiter wakeup
(by fantix in 2081db89)
* Fix a possible race condition in sslproto test
(by fantix in b0526cd5 for 412)
* Fix `call_soon_threadsafe` thread safety
(by fantix in 4b803b15)
```
### 0.15.3
```
Bug Fixes
* SSL: schedule first data after waiter wakeup
(by fantix in 0df12282)
* Fix a possible race condition in sslproto test
(by fantix in 2e71c4c2 for 412)
* Fix `call_soon_threadsafe` thread safety
(by fantix and hehaha in 6387a4e4 for 408)
```
Links
- PyPI: https://pypi.org/project/uvloop
- Changelog: https://data.safetycli.com/changelogs/uvloop/
Changelog
### 2.0.29
```
:released: March 23, 2024
.. change::
:tags: bug, orm
:tickets: 10611
Fixed Declarative issue where typing a relationship using
:class:`_orm.Relationship` rather than :class:`_orm.Mapped` would
inadvertently pull in the "dynamic" relationship loader strategy for that
attribute.
.. change::
:tags: postgresql, usecase
:tickets: 10693
The PostgreSQL dialect now returns :class:`_postgresql.DOMAIN` instances
when reflecting a column that has a domain as type. Previously, the domain
data type was returned instead. As part of this change, the domain
reflection was improved to also return the collation of the text types.
Pull request courtesy of Thomas Stephenson.
.. change::
:tags: bug, typing
:tickets: 11055
Fixed typing issue allowing asyncio ``run_sync()`` methods to correctly
type the parameters according to the callable that was passed, making use
of :pep:`612` ``ParamSpec`` variables. Pull request courtesy Francisco R.
Del Roio.
.. change::
:tags: bug, orm
:tickets: 11091
Fixed issue in ORM annotated declarative where using
:func:`_orm.mapped_column()` with an :paramref:`_orm.mapped_column.index`
or :paramref:`_orm.mapped_column.unique` setting of False would be
overridden by an incoming ``Annotated`` element that featured that
parameter set to ``True``, even though the immediate
:func:`_orm.mapped_column()` element is more specific and should take
precedence. The logic to reconcile the booleans has been enhanced to
accommodate a local value of ``False`` as still taking precedence over an
incoming ``True`` value from the annotated element.
.. change::
:tags: usecase, orm
:tickets: 11130
Added support for the :pep:`695` ``TypeAliasType`` construct as well as the
python 3.12 native ``type`` keyword to work with ORM Annotated Declarative
form when using these constructs to link to a :pep:`593` ``Annotated``
container, allowing the resolution of the ``Annotated`` to proceed when
these constructs are used in a :class:`_orm.Mapped` typing container.
.. change::
:tags: bug, engine
:tickets: 11157
Fixed issue in :ref:`engine_insertmanyvalues` feature where using a primary
key column with an "inline execute" default generator such as an explicit
:class:`.Sequence` with an explcit schema name, while at the same time
using the
:paramref:`_engine.Connection.execution_options.schema_translate_map`
feature would fail to render the sequence or the parameters properly,
leading to errors.
.. change::
:tags: bug, engine
:tickets: 11160
Made a change to the adjustment made in version 2.0.10 for :ticket:`9618`,
which added the behavior of reconciling RETURNING rows from a bulk INSERT
to the parameters that were passed to it. This behavior included a
comparison of already-DB-converted bound parameter values against returned
row values that was not always "symmetrical" for SQL column types such as
UUIDs, depending on specifics of how different DBAPIs receive such values
versus how they return them, necessitating the need for additional
"sentinel value resolver" methods on these column types. Unfortunately
this broke third party column types such as UUID/GUID types in libraries
like SQLModel which did not implement this special method, raising an error
"Can't match sentinel values in result set to parameter sets". Rather than
attempt to further explain and document this implementation detail of the
"insertmanyvalues" feature including a public version of the new
method, the approach is intead revised to no longer need this extra
conversion step, and the logic that does the comparison now works on the
pre-converted bound parameter value compared to the post-result-processed
value, which should always be of a matching datatype. In the unusual case
that a custom SQL column type that also happens to be used in a "sentinel"
column for bulk INSERT is not receiving and returning the same value type,
the "Can't match" error will be raised, however the mitigation is
straightforward in that the same Python datatype should be passed as that
returned.
.. change::
:tags: bug, orm, regression
:tickets: 11173
Fixed regression from version 2.0.28 caused by the fix for :ticket:`11085`
where the newer method of adjusting post-cache bound parameter values would
interefere with the implementation for the :func:`_orm.subqueryload` loader
option, which has some more legacy patterns in use internally, when
the additional loader criteria feature were used with this loader option.
.. change::
:tags: bug, sql, regression
:tickets: 11176
Fixed regression from the 1.4 series where the refactor of the
:meth:`_types.TypeEngine.with_variant` method introduced at
:ref:`change_6980` failed to accommodate for the ``.copy()`` method, which
will lose the variant mappings that are set up. This becomes an issue for
the very specific case of a "schema" type, which includes types such as
:class:`.Enum` and :class:`.ARRAY`, when they are then used in the context
of an ORM Declarative mapping with mixins where copying of types comes into
play. The variant mapping is now copied as well.
.. change::
:tags: bug, tests
:tickets: 11187
Backported to SQLAlchemy 2.0 an improvement to the test suite with regards
to how asyncio related tests are run, now using the newer Python 3.11
``asyncio.Runner`` or a backported equivalent, rather than relying on the
previous implementation based on ``asyncio.get_running_loop()``. This
should hopefully prevent issues with large suite runs on CPU loaded
hardware where the event loop seems to become corrupted, leading to
cascading failures.
.. changelog::
```
### 2.0.28
```
:released: March 4, 2024
.. change::
:tags: engine, usecase
:tickets: 10974
Added new core execution option
:paramref:`_engine.Connection.execution_options.preserve_rowcount`. When
set, the ``cursor.rowcount`` attribute from the DBAPI cursor will be
unconditionally memoized at statement execution time, so that whatever
value the DBAPI offers for any kind of statement will be available using
the :attr:`_engine.CursorResult.rowcount` attribute from the
:class:`_engine.CursorResult`. This allows the rowcount to be accessed for
statements such as INSERT and SELECT, to the degree supported by the DBAPI
in use. The :ref:`engine_insertmanyvalues` also supports this option and
will ensure :attr:`_engine.CursorResult.rowcount` is correctly set for a
bulk INSERT of rows when set.
.. change::
:tags: bug, orm, regression
:tickets: 11010
Fixed regression caused by :ticket:`9779` where using the "secondary" table
in a relationship ``and_()`` expression would fail to be aliased to match
how the "secondary" table normally renders within a
:meth:`_sql.Select.join` expression, leading to an invalid query.
.. change::
:tags: bug, orm, performance, regression
:tickets: 11085
Adjusted the fix made in :ticket:`10570`, released in 2.0.23, where new
logic was added to reconcile possibly changing bound parameter values
across cache key generations used within the :func:`_orm.with_expression`
construct. The new logic changes the approach by which the new bound
parameter values are associated with the statement, avoiding the need to
deep-copy the statement which can result in a significant performance
penalty for very deep / complex SQL constructs. The new approach no longer
requires this deep-copy step.
.. change::
:tags: bug, asyncio
:tickets: 8771
An error is raised if a :class:`.QueuePool` or other non-asyncio pool class
is passed to :func:`_asyncio.create_async_engine`. This engine only
accepts asyncio-compatible pool classes including
:class:`.AsyncAdaptedQueuePool`. Other pool classes such as
:class:`.NullPool` are compatible with both synchronous and asynchronous
engines as they do not perform any locking.
.. seealso::
:ref:`pool_api`
.. ch
Update aiohttp-jinja2 from 1.5 to 1.6.
Changelog
### 1.6 ``` ================ - Switch to ``aiohttp.web.AppKey``, and deprecate the old 'static_root_url' key. - Drop Python 3.7, add Python 3.12. ``` ### 1.5.1 ``` ================== - Add support for Python 3.11. - Drop support for decorating non-async functions with template (deprecated since 0.16). ```Links
- PyPI: https://pypi.org/project/aiohttp-jinja2 - Changelog: https://data.safetycli.com/changelogs/aiohttp-jinja2/ - Repo: https://github.com/aio-libs/aiohttp_jinja2/Update aiohttp-oauth2 from 0.0.3 to 0.0.5.
Changelog
### 0.0.5 ``` This fixes when oauth2 resource providers are more technically correct in validating the content-type they receive, specifically for form data. ```Links
- PyPI: https://pypi.org/project/aiohttp-oauth2 - Changelog: https://data.safetycli.com/changelogs/aiohttp-oauth2/ - Repo: https://github.com/mrasband/aiohttp-oauth2Update aiohttp-remotes from 1.0.0 to 1.2.0.
Changelog
### 1.2.0 ``` ================== Bugfixes -------- - Raise a ``HTTPBadRequest`` instead of ``ValueError`` when ``X-Forwarded-For`` header is not a valid IP. (`311 <https://github.com/aio-libs/aiohttp-remotes/issues/311>`_) Deprecations and Removals ------------------------- - Dropped Python 3.6 support, the minimal supported aiohttp is 3.8.1 (`331 <https://github.com/aio-libs/aiohttp-remotes/issues/331>`_) ``` ### 1.1.0 ``` ================== * Added support for Python 3.10 ```Links
- PyPI: https://pypi.org/project/aiohttp-remotes - Changelog: https://data.safetycli.com/changelogs/aiohttp-remotes/ - Repo: https://github.com/aio-libs/aiohttp-remotesUpdate aiohttp from 3.7.4.post0 to 3.9.4.
Changelog
### 3.9.3 ``` ================== Bug fixes --------- - Fixed backwards compatibility breakage (in 3.9.2) of ``ssl`` parameter when set outside of ``ClientSession`` (e.g. directly in ``TCPConnector``) -- by :user:`Dreamsorcerer`. *Related issues and pull requests on GitHub:* :issue:`8097`, :issue:`8098`. Miscellaneous internal changes ------------------------------ - Improved test suite handling of paths and temp files to consistently use pathlib and pytest fixtures. *Related issues and pull requests on GitHub:* :issue:`3957`. ---- ``` ### 3.9.2 ``` ================== Bug fixes --------- - Fixed server-side websocket connection leak. *Related issues and pull requests on GitHub:* :issue:`7978`. - Fixed ``web.FileResponse`` doing blocking I/O in the event loop. *Related issues and pull requests on GitHub:* :issue:`8012`. - Fixed double compress when compression enabled and compressed file exists in server file responses. *Related issues and pull requests on GitHub:* :issue:`8014`. - Added runtime type check for ``ClientSession`` ``timeout`` parameter. *Related issues and pull requests on GitHub:* :issue:`8021`. - Fixed an unhandled exception in the Python HTTP parser on header lines starting with a colon -- by :user:`pajod`. Invalid request lines with anything but a dot between the HTTP major and minor version are now rejected. Invalid header field names containing question mark or slash are now rejected. Such requests are incompatible with :rfc:`9110section-5.6.2` and are not known to be of any legitimate use. *Related issues and pull requests on GitHub:* :issue:`8074`. - Improved validation of paths for static resources requests to the server -- by :user:`bdraco`. *Related issues and pull requests on GitHub:* :issue:`8079`. Features -------- - Added support for passing :py:data:`True` to ``ssl`` parameter in ``ClientSession`` while deprecating :py:data:`None` -- by :user:`xiangyan99`. *Related issues and pull requests on GitHub:* :issue:`7698`. Breaking changes ---------------- - Fixed an unhandled exception in the Python HTTP parser on header lines starting with a colon -- by :user:`pajod`. Invalid request lines with anything but a dot between the HTTP major and minor version are now rejected. Invalid header field names containing question mark or slash are now rejected. Such requests are incompatible with :rfc:`9110section-5.6.2` and are not known to be of any legitimate use. *Related issues and pull requests on GitHub:* :issue:`8074`. Improved documentation ---------------------- - Fixed examples of ``fallback_charset_resolver`` function in the :doc:`client_advanced` document. -- by :user:`henry0312`. *Related issues and pull requests on GitHub:* :issue:`7995`. - The Sphinx setup was updated to avoid showing the empty changelog draft section in the tagged release documentation builds on Read The Docs -- by :user:`webknjaz`. *Related issues and pull requests on GitHub:* :issue:`8067`. Packaging updates and notes for downstreams ------------------------------------------- - The changelog categorization was made clearer. The contributors can now mark their fragment files more accurately -- by :user:`webknjaz`. The new category tags are: * ``bugfix`` * ``feature`` * ``deprecation`` * ``breaking`` (previously, ``removal``) * ``doc`` * ``packaging`` * ``contrib`` * ``misc`` *Related issues and pull requests on GitHub:* :issue:`8066`. Contributor-facing changes -------------------------- - Updated :ref:`contributing/Tests coverage <aiohttp-contributing>` section to show how we use ``codecov`` -- by :user:`Dreamsorcerer`. *Related issues and pull requests on GitHub:* :issue:`7916`. - The changelog categorization was made clearer. The contributors can now mark their fragment files more accurately -- by :user:`webknjaz`. The new category tags are: * ``bugfix`` * ``feature`` * ``deprecation`` * ``breaking`` (previously, ``removal``) * ``doc`` * ``packaging`` * ``contrib`` * ``misc`` *Related issues and pull requests on GitHub:* :issue:`8066`. Miscellaneous internal changes ------------------------------ - Replaced all ``tmpdir`` fixtures with ``tmp_path`` in test suite. *Related issues and pull requests on GitHub:* :issue:`3551`. ---- ``` ### 3.9.1 ``` ================== Bugfixes -------- - Fixed importing aiohttp under PyPy on Windows. `7848 <https://github.com/aio-libs/aiohttp/issues/7848>`_ - Fixed async concurrency safety in websocket compressor. `7865 <https://github.com/aio-libs/aiohttp/issues/7865>`_ - Fixed ``ClientResponse.close()`` releasing the connection instead of closing. `7869 <https://github.com/aio-libs/aiohttp/issues/7869>`_ - Fixed a regression where connection may get closed during upgrade. -- by :user:`Dreamsorcerer` `7879 <https://github.com/aio-libs/aiohttp/issues/7879>`_ - Fixed messages being reported as upgraded without an Upgrade header in Python parser. -- by :user:`Dreamsorcerer` `7895 <https://github.com/aio-libs/aiohttp/issues/7895>`_ ---- ``` ### 3.9.0 ``` ================== Features -------- - Introduced ``AppKey`` for static typing support of ``Application`` storage. See https://docs.aiohttp.org/en/stable/web_advanced.html#application-s-config `5864 <https://github.com/aio-libs/aiohttp/issues/5864>`_ - Added a graceful shutdown period which allows pending tasks to complete before the application's cleanup is called. The period can be adjusted with the ``shutdown_timeout`` parameter. -- by :user:`Dreamsorcerer`. See https://docs.aiohttp.org/en/latest/web_advanced.html#graceful-shutdown `7188 <https://github.com/aio-libs/aiohttp/issues/7188>`_ - Added `handler_cancellation <https://docs.aiohttp.org/en/stable/web_advanced.html#web-handler-cancellation>`_ parameter to cancel web handler on client disconnection. -- by :user:`mosquito` This (optionally) reintroduces a feature removed in a previous release. Recommended for those looking for an extra level of protection against denial-of-service attacks. `7056 <https://github.com/aio-libs/aiohttp/issues/7056>`_ - Added support for setting response header parameters ``max_line_size`` and ``max_field_size``. `2304 <https://github.com/aio-libs/aiohttp/issues/2304>`_ - Added ``auto_decompress`` parameter to ``ClientSession.request`` to override ``ClientSession._auto_decompress``. -- by :user:`Daste745` `3751 <https://github.com/aio-libs/aiohttp/issues/3751>`_ - Changed ``raise_for_status`` to allow a coroutine. `3892 <https://github.com/aio-libs/aiohttp/issues/3892>`_ - Added client brotli compression support (optional with runtime check). `5219 <https://github.com/aio-libs/aiohttp/issues/5219>`_ - Added ``client_max_size`` to ``BaseRequest.clone()`` to allow overriding the request body size. -- :user:`anesabml`. `5704 <https://github.com/aio-libs/aiohttp/issues/5704>`_ - Added a middleware type alias ``aiohttp.typedefs.Middleware``. `5898 <https://github.com/aio-libs/aiohttp/issues/5898>`_ - Exported ``HTTPMove`` which can be used to catch any redirection request that has a location -- :user:`dreamsorcerer`. `6594 <https://github.com/aio-libs/aiohttp/issues/6594>`_ - Changed the ``path`` parameter in ``web.run_app()`` to accept a ``pathlib.Path`` object. `6839 <https://github.com/aio-libs/aiohttp/issues/6839>`_ - Performance: Skipped filtering ``CookieJar`` when the jar is empty or all cookies have expired. `7819 <https://github.com/aio-libs/aiohttp/issues/7819>`_ - Performance: Only check origin if insecure scheme and there are origins to treat as secure, in ``CookieJar.filter_cookies()``. `7821 <https://github.com/aio-libs/aiohttp/issues/7821>`_ - Performance: Used timestamp instead of ``datetime`` to achieve faster cookie expiration in ``CookieJar``. `7824 <https://github.com/aio-libs/aiohttp/issues/7824>`_ - Added support for passing a custom server name parameter to HTTPS connection. `7114 <https://github.com/aio-libs/aiohttp/issues/7114>`_ - Added support for using Basic Auth credentials from :file:`.netrc` file when making HTTP requests with the :py:class:`~aiohttp.ClientSession` ``trust_env`` argument is set to ``True``. -- by :user:`yuvipanda`. `7131 <https://github.com/aio-libs/aiohttp/issues/7131>`_ - Turned access log into no-op when the logger is disabled. `7240 <https://github.com/aio-libs/aiohttp/issues/7240>`_ - Added typing information to ``RawResponseMessage``. -- by :user:`Gobot1234` `7365 <https://github.com/aio-libs/aiohttp/issues/7365>`_ - Removed ``async-timeout`` for Python 3.11+ (replaced with ``asyncio.timeout()`` on newer releases). `7502 <https://github.com/aio-libs/aiohttp/issues/7502>`_ - Added support for ``brotlicffi`` as an alternative to ``brotli`` (fixing Brotli support on PyPy). `7611 <https://github.com/aio-libs/aiohttp/issues/7611>`_ - Added ``WebSocketResponse.get_extra_info()`` to access a protocol transport's extra info. `7078 <https://github.com/aio-libs/aiohttp/issues/7078>`_ - Allow ``link`` argument to be set to None/empty in HTTP 451 exception. `7689 <https://github.com/aio-libs/aiohttp/issues/7689>`_ Bugfixes -------- - Implemented stripping the trailing dots from fully-qualified domain names in ``Host`` headers and TLS context when acting as an HTTP client. This allows the client to connect to URLs with FQDN host name like ``https://example.com./``. -- by :user:`martin-sucha`. `3636 <https://github.com/aio-libs/aiohttp/issues/3636>`_ - Fixed client timeout not working when incoming data is always available without waiting. -- by :user:`Dreamsorcerer`. `5854 <https://github.com/aio-libs/aiohttp/issues/5854>`_ - Fixed ``readuntil`` to work with a delimiter of more than one character. `6701 <https://github.com/aio-libs/aiohttp/issues/6701>`_ - Added ``__repr__`` to ``EmptyStreamReader`` to avoid ``AttributeError``. `6916 <https://github.com/aio-libs/aiohttp/issues/6916>`_ - Fixed bug when using ``TCPConnector`` with ``ttl_dns_cache=0``. `7014 <https://github.com/aio-libs/aiohttp/issues/7014>`_ - Fixed response returned from expect handler being thrown away. -- by :user:`Dreamsorcerer` `7025 <https://github.com/aio-libs/aiohttp/issues/7025>`_ - Avoided raising ``UnicodeDecodeError`` in multipart and in HTTP headers parsing. `7044 <https://github.com/aio-libs/aiohttp/issues/7044>`_ - Changed ``sock_read`` timeout to start after writing has finished, avoiding read timeouts caused by an unfinished write. -- by :user:`dtrifiro` `7149 <https://github.com/aio-libs/aiohttp/issues/7149>`_ - Fixed missing query in tracing method URLs when using ``yarl`` 1.9+. `7259 <https://github.com/aio-libs/aiohttp/issues/7259>`_ - Changed max 32-bit timestamp to an aware datetime object, for consistency with the non-32-bit one, and to avoid a ``DeprecationWarning`` on Python 3.12. `7302 <https://github.com/aio-libs/aiohttp/issues/7302>`_ - Fixed ``EmptyStreamReader.iter_chunks()`` never ending. -- by :user:`mind1m` `7616 <https://github.com/aio-libs/aiohttp/issues/7616>`_ - Fixed a rare ``RuntimeError: await wasn't used with future`` exception. -- by :user:`stalkerg` `7785 <https://github.com/aio-libs/aiohttp/issues/7785>`_ - Fixed issue with insufficient HTTP method and version validation. `7700 <https://github.com/aio-libs/aiohttp/issues/7700>`_ - Added check to validate that absolute URIs have schemes. `7712 <https://github.com/aio-libs/aiohttp/issues/7712>`_ - Fixed unhandled exception when Python HTTP parser encounters unpaired Unicode surrogates. `7715 <https://github.com/aio-libs/aiohttp/issues/7715>`_ - Updated parser to disallow invalid characters in header field names and stop accepting LF as a request line separator. `7719 <https://github.com/aio-libs/aiohttp/issues/7719>`_ - Fixed Python HTTP parser not treating 204/304/1xx as an empty body. `7755 <https://github.com/aio-libs/aiohttp/issues/7755>`_ - Ensure empty body response for 1xx/204/304 per RFC 9112 sec 6.3. `7756 <https://github.com/aio-libs/aiohttp/issues/7756>`_ - Fixed an issue when a client request is closed before completing a chunked payload. -- by :user:`Dreamsorcerer` `7764 <https://github.com/aio-libs/aiohttp/issues/7764>`_ - Edge Case Handling for ResponseParser for missing reason value. `7776 <https://github.com/aio-libs/aiohttp/issues/7776>`_ - Fixed ``ClientWebSocketResponse.close_code`` being erroneously set to ``None`` when there are concurrent async tasks receiving data and closing the connection. `7306 <https://github.com/aio-libs/aiohttp/issues/7306>`_ - Added HTTP method validation. `6533 <https://github.com/aio-libs/aiohttp/issues/6533>`_ - Fixed arbitrary sequence types being allowed to inject values via version parameter. -- by :user:`Dreamsorcerer` `7835 <https://github.com/aio-libs/aiohttp/issues/7835>`_ - Performance: Fixed increase in latency with small messages from websocket compression changes. `7797 <https://github.com/aio-libs/aiohttp/issues/7797>`_ Improved Documentation ---------------------- - Fixed the `ClientResponse.release`'s type in the doc. Changed from `comethod` to `method`. `5836 <https://github.com/aio-libs/aiohttp/issues/5836>`_ - Added information on behavior of base_url parameter in `ClientSession`. `6647 <https://github.com/aio-libs/aiohttp/issues/6647>`_ - Fixed `ClientResponseError` docs. `6700 <https://github.com/aio-libs/aiohttp/issues/6700>`_ - Updated Redis code examples to follow the latest API. `6907 <https://github.com/aio-libs/aiohttp/issues/6907>`_ - Added a note about possibly needing to update headers when using ``on_response_prepare``. -- by :user:`Dreamsorcerer` `7283 <https://github.com/aio-libs/aiohttp/issues/7283>`_ - Completed ``trust_env`` parameter description to honor ``wss_proxy``, ``ws_proxy`` or ``no_proxy`` env. `7325 <https://github.com/aio-libs/aiohttp/issues/7325>`_ - Expanded SSL documentation with more examples (e.g. how to use certifi). -- by :user:`Dreamsorcerer` `7334 <https://github.com/aio-libs/aiohttp/issues/7334>`_ - Fix, update, and improve client exceptions documentation. `7733 <https://github.com/aio-libs/aiohttp/issues/7733>`_ Deprecations and Removals ------------------------- - Added ``shutdown_timeout`` parameter to ``BaseRunner``, while deprecating ``shutdown_timeout`` parameter from ``BaseSite``. -- by :user:`Dreamsorcerer` `7718 <https://github.com/aio-libs/aiohttp/issues/7718>`_ - Dropped Python 3.6 support. `6378 <https://github.com/aio-libs/aiohttp/issues/6378>`_ - Dropped Python 3.7 support. -- by :user:`Dreamsorcerer` `7336 <https://github.com/aio-libs/aiohttp/issues/7336>`_ - Removed support for abandoned ``tokio`` event loop. -- by :user:`Dreamsorcerer` `7281 <https://github.com/aio-libs/aiohttp/issues/7281>`_ Misc ---- - Made ``print`` argument in ``run_app()`` optional. `3690 <https://github.com/aio-libs/aiohttp/issues/3690>`_ - Improved performance of ``ceil_timeout`` in some cases. `6316 <https://github.com/aio-libs/aiohttp/issues/6316>`_ - Changed importing Gunicorn to happen on-demand, decreasing import time by ~53%. -- :user:`Dreamsorcerer` `6591 <https://github.com/aio-libs/aiohttp/issues/6591>`_ - Improved import time by replacing ``http.server`` with ``http.HTTPStatus``. `6903 <https://github.com/aio-libs/aiohttp/issues/6903>`_ - Fixed annotation of ``ssl`` parameter to disallow ``True``. -- by :user:`Dreamsorcerer`. `7335 <https://github.com/aio-libs/aiohttp/issues/7335>`_ ---- ``` ### 3.8.6 ``` ================== Security bugfixes ----------------- - Upgraded the vendored copy of llhttp_ to v9.1.3 -- by :user:`Dreamsorcerer` Thanks to :user:`kenballus` for reporting this, see https://github.com/aio-libs/aiohttp/security/advisories/GHSA-pjjw-qhg8-p2p9. .. _llhttp: https://llhttp.org `7647 <https://github.com/aio-libs/aiohttp/issues/7647>`_ - Updated Python parser to comply with RFCs 9110/9112 -- by :user:`Dreamorcerer` Thanks to :user:`kenballus` for reporting this, see https://github.com/aio-libs/aiohttp/security/advisories/GHSA-gfw2-4jvh-wgfg. `7663 <https://github.com/aio-libs/aiohttp/issues/7663>`_ Deprecation ----------- - Added ``fallback_charset_resolver`` parameter in ``ClientSession`` to allow a user-supplied character set detection function. Character set detection will no longer be included in 3.9 as a default. If this feature is needed, please use `fallback_charset_resolver <https://docs.aiohttp.org/en/stable/client_advanced.html#character-set-detection>`_. `7561 <https://github.com/aio-libs/aiohttp/issues/7561>`_ Features -------- - Enabled lenient response parsing for more flexible parsing in the client (this should resolve some regressions when dealing with badly formatted HTTP responses). -- by :user:`Dreamsorcerer` `7490 <https://github.com/aio-libs/aiohttp/issues/7490>`_ Bugfixes -------- - Fixed ``PermissionError`` when ``.netrc`` is unreadable due to permissions. `7237 <https://github.com/aio-libs/aiohttp/issues/7237>`_ - Fixed output of parsing errors pointing to a ``\n``. -- by :user:`Dreamsorcerer` `7468 <https://github.com/aio-libs/aiohttp/issues/7468>`_ - Fixed ``GunicornWebWorker`` max_requests_jitter not working. `7518 <https://github.com/aio-libs/aiohttp/issues/7518>`_ - Fixed sorting in ``filter_cookies`` to use cookie with longest path. -- by :user:`marq24`. `7577 <https://github.com/aio-libs/aiohttp/issues/7577>`_ - Fixed display of ``BadStatusLine`` messages from llhttp_. -- by :user:`Dreamsorcerer` `7651 <https://github.com/aio-libs/aiohttp/issues/7651>`_ ---- ``` ### 3.8.5 ``` ================== Security bugfixes ----------------- - Upgraded the vendored copy of llhttp_ to v8.1.1 -- by :user:`webknjaz` and :user:`Dreamsorcerer`. Thanks to :user:`sethmlarson` for reporting this and providing us with comprehensive reproducer, workarounds and fixing details! For more information, see https://github.com/aio-libs/aiohttp/security/advisories/GHSA-45c4-8wx5-qw6w. .. _llhttp: https://llhttp.org `7346 <https://github.com/aio-libs/aiohttp/issues/7346>`_ Features -------- - Added information to C parser exceptions to show which character caused the error. -- by :user:`Dreamsorcerer` `7366 <https://github.com/aio-libs/aiohttp/issues/7366>`_ Bugfixes -------- - Fixed a transport is :data:`None` error -- by :user:`Dreamsorcerer`. `3355 <https://github.com/aio-libs/aiohttp/issues/3355>`_ ---- ``` ### 3.8.4 ``` ================== Bugfixes -------- - Fixed incorrectly overwriting cookies with the same name and domain, but different path. `6638 <https://github.com/aio-libs/aiohttp/issues/6638>`_ - Fixed ``ConnectionResetError`` not being raised after client disconnection in SSL environments. `7180 <https://github.com/aio-libs/aiohttp/issues/7180>`_ ---- ``` ### 3.8.3 ``` ================== .. attention:: This is the last :doc:`aiohttp <index>` release tested under Python 3.6. The 3.9 stream is dropping it from the CI and the distribution package metadata. Bugfixes -------- - Increased the upper boundary of the :doc:`multidict:index` dependency to allow for the version 6 -- by :user:`hugovk`. It used to be limited below version 7 in :doc:`aiohttp <index>` v3.8.1 but was lowered in v3.8.2 via :pr:`6550` and never brought back, causing problems with dependency pins when upgrading. :doc:`aiohttp <index>` v3.8.3 fixes that by recovering the original boundary of ``< 7``. `6950 <https://github.com/aio-libs/aiohttp/issues/6950>`_ ---- ``` ### 3.8.2 ``` ===================================================== Bugfixes -------- - Support registering OPTIONS HTTP method handlers via RouteTableDef. `4663 <https://github.com/aio-libs/aiohttp/issues/4663>`_ - Started supporting ``authority-form`` and ``absolute-form`` URLs on the server-side. `6227 <https://github.com/aio-libs/aiohttp/issues/6227>`_ - Fix Python 3.11 alpha incompatibilities by using Cython 0.29.25 `6396 <https://github.com/aio-libs/aiohttp/issues/6396>`_ - Remove a deprecated usage of pytest.warns(None) `6663 <https://github.com/aio-libs/aiohttp/issues/6663>`_ - Fix regression where ``asyncio.CancelledError`` occurs on client disconnection. `6719 <https://github.com/aio-libs/aiohttp/issues/6719>`_ - Export :py:class:`~aiohttp.web.PrefixedSubAppResource` under :py:mod:`aiohttp.web` -- by :user:`Dreamsorcerer`. This fixes a regression introduced by :pr:`3469`. `6889 <https://github.com/aio-libs/aiohttp/issues/6889>`_ - Dropped the :class:`object` type possibility from the :py:attr:`aiohttp.ClientSession.timeout` property return type declaration. `6917 <https://github.com/aio-libs/aiohttp/issues/6917>`_, `6923 <https://github.com/aio-libs/aiohttp/issues/6923>`_ Improved Documentation ---------------------- - Added clarification on configuring the app object with settings such as a db connection. `4137 <https://github.com/aio-libs/aiohttp/issues/4137>`_ - Edited the web.run_app declaration. `6401 <https://github.com/aio-libs/aiohttp/issues/6401>`_ - Dropped the :class:`object` type possibility from the :py:attr:`aiohttp.ClientSession.timeout` property return type declaration. `6917 <https://github.com/aio-libs/aiohttp/issues/6917>`_, `6923 <https://github.com/aio-libs/aiohttp/issues/6923>`_ Deprecations and Removals ------------------------- - Drop Python 3.5 support, aiohttp works on 3.6+ now. `4046 <https://github.com/aio-libs/aiohttp/issues/4046>`_ Misc ---- - `6369 <https://github.com/aio-libs/aiohttp/issues/6369>`_, `#6399 <https://github.com/aio-libs/aiohttp/issues/6399>`_, `#6550 <https://github.com/aio-libs/aiohttp/issues/6550>`_, `#6708 <https://github.com/aio-libs/aiohttp/issues/6708>`_, `#6757 <https://github.com/aio-libs/aiohttp/issues/6757>`_, `#6857 <https://github.com/aio-libs/aiohttp/issues/6857>`_, `#6872 <https://github.com/aio-libs/aiohttp/issues/6872>`_ ---- ``` ### 3.8.1 ``` ================== Bugfixes -------- - Fix the error in handling the return value of `getaddrinfo`. `getaddrinfo` will return an `(int, bytes)` tuple, if CPython could not handle the address family. It will cause an index out of range error in aiohttp. For example, if user compile CPython with `--disable-ipv6` option, but his system enable the ipv6. `5901 <https://github.com/aio-libs/aiohttp/issues/5901>`_ - Do not install "examples" as a top-level package. `6189 <https://github.com/aio-libs/aiohttp/issues/6189>`_ - Restored ability to connect IPv6-only host. `6195 <https://github.com/aio-libs/aiohttp/issues/6195>`_ - Remove ``Signal`` from ``__all__``, replace ``aiohttp.Signal`` with ``aiosignal.Signal`` in docs `6201 <https://github.com/aio-libs/aiohttp/issues/6201>`_ - Made chunked encoding HTTP header check stricter. `6305 <https://github.com/aio-libs/aiohttp/issues/6305>`_ Improved Documentation ---------------------- - update quick starter demo codes. `6240 <https://github.com/aio-libs/aiohttp/issues/6240>`_ - Added an explanation of how tiny timeouts affect performance to the client reference document. `6274 <https://github.com/aio-libs/aiohttp/issues/6274>`_ - Add flake8-docstrings to flake8 configuration, enable subset of checks. `6276 <https://github.com/aio-libs/aiohttp/issues/6276>`_ - Added information on running complex applications with additional tasks/processes -- :user:`Dreamsorcerer`. `6278 <https://github.com/aio-libs/aiohttp/issues/6278>`_ Misc ---- - `6205 <https://github.com/aio-libs/aiohttp/issues/6205>`_ ---- ``` ### 3.8.0 ``` ================== Features -------- - Added a ``GunicornWebWorker`` feature for extending the aiohttp server configuration by allowing the 'wsgi' coroutine to return ``web.AppRunner`` object. `2988 <https://github.com/aio-libs/aiohttp/issues/2988>`_ - Switch from ``http-parser`` to ``llhttp`` `3561 <https://github.com/aio-libs/aiohttp/issues/3561>`_ - Use Brotli instead of brotlipy `3803 <https://github.com/aio-libs/aiohttp/issues/3803>`_ - Disable implicit switch-back to pure python mode. The build fails loudly if aiohttp cannot be compiled with C Accelerators. Use AIOHTTP_NO_EXTENSIONS=1 to explicitly disable C Extensions complication and switch to Pure-Python mode. Note that Pure-Python mode is significantly slower than compiled one. `3828 <https://github.com/aio-libs/aiohttp/issues/3828>`_ - Make access log use local time with timezone `3853 <https://github.com/aio-libs/aiohttp/issues/3853>`_ - Implemented ``readuntil`` in ``StreamResponse`` `4054 <https://github.com/aio-libs/aiohttp/issues/4054>`_ - FileResponse now supports ETag. `4594 <https://github.com/aio-libs/aiohttp/issues/4594>`_ - Add a request handler type alias ``aiohttp.typedefs.Handler``. `4686 <https://github.com/aio-libs/aiohttp/issues/4686>`_ - ``AioHTTPTestCase`` is more async friendly now. For people who use unittest and are used to use :py:exc:`~unittest.TestCase` it will be easier to write new test cases like the sync version of the :py:exc:`~unittest.TestCase` class, without using the decorator `unittest_run_loop`, just `async def test_*`. The only difference is that for the people using python3.7 and below a new dependency is needed, it is ``asynctestcase``. `4700 <https://github.com/aio-libs/aiohttp/issues/4700>`_ - Add validation of HTTP header keys and values to prevent header injection. `4818 <https://github.com/aio-libs/aiohttp/issues/4818>`_ - Add predicate to ``AbstractCookieJar.clear``. Add ``AbstractCookieJar.clear_domain`` to clean all domain and subdomains cookies only. `4942 <https://github.com/aio-libs/aiohttp/issues/4942>`_ - Add keepalive_timeout parameter to web.run_app. `5094 <https://github.com/aio-libs/aiohttp/issues/5094>`_ - Tracing for client sent headers `5105 <https://github.com/aio-libs/aiohttp/issues/5105>`_ - Make type hints for http parser stricter `5267 <https://github.com/aio-libs/aiohttp/issues/5267>`_ - Add final declarations for constants. `5275 <https://github.com/aio-libs/aiohttp/issues/5275>`_ - Switch to external frozenlist and aiosignal libraries. `5293 <https://github.com/aio-libs/aiohttp/issues/5293>`_ - Don't send secure cookies by insecure transports. By default, the transport is secure if https or wss scheme is used. Use `CookieJar(treat_as_secure_origin="http://127.0.0.1")` to override the default security checker. `5571 <https://github.com/aio-libs/aiohttp/issues/5571>`_ - Always create a new event loop in ``aiohttp.web.run_app()``. This adds better compatibility with ``asyncio.run()`` or if trying to run multiple apps in sequence. `5572 <https://github.com/aio-libs/aiohttp/issues/5572>`_ - Add ``aiohttp.pytest_plugin.AiohttpClient`` for static typing of pytest plugin. `5585 <https://github.com/aio-libs/aiohttp/issues/5585>`_ - Added a ``socket_factory`` argument to ``BaseTestServer``. `5844 <https://github.com/aio-libs/aiohttp/issues/5844>`_ - Add compression strategy parameter to enable_compression method. `5909 <https://github.com/aio-libs/aiohttp/issues/5909>`_ - Added support for Python 3.10 to Github Actions CI/CD workflows and fix the related deprecation warnings -- :user:`Hanaasagi`. `5927 <https://github.com/aio-libs/aiohttp/issues/5927>`_ - Switched ``chardet`` to ``charset-normalizer`` for guessing the HTTP payload body encoding -- :user:`Ousret`. `5930 <https://github.com/aio-libs/aiohttp/issues/5930>`_ - Added optional auto_decompress argument for HttpRequestParser `5957 <https://github.com/aio-libs/aiohttp/issues/5957>`_ - Added support for HTTPS proxies to the extent CPython's :py:mod:`asyncio` supports it -- by :user:`bmbouter`, :user:`jborean93` and :user:`webknjaz`. `5992 <https://github.com/aio-libs/aiohttp/issues/5992>`_ - Added ``base_url`` parameter to the initializer of :class:`~aiohttp.ClientSession`. `6013 <https://github.com/aio-libs/aiohttp/issues/6013>`_ - Add Trove classifier and create binary wheels for 3.10. -- :user:`hugovk`. `6079 <https://github.com/aio-libs/aiohttp/issues/6079>`_ - Started shipping platform-specific wheels with the ``musl`` tag targeting typical Alpine Linux runtimes — :user:`asvetlov`. `6139 <https://github.com/aio-libs/aiohttp/issues/6139>`_ - Started shipping platform-specific arm64 wheels for Apple Silicon — :user:`asvetlov`. `6139 <https://github.com/aio-libs/aiohttp/issues/6139>`_ Bugfixes -------- - Modify _drain_helper() to handle concurrent `await resp.write(...)` or `ws.send_json(...)` calls without race-condition. `2934 <https://github.com/aio-libs/aiohttp/issues/2934>`_ - Started using `MultiLoopChildWatcher` when it's available under POSIX while setting up the test I/O loop. `3450 <https://github.com/aio-libs/aiohttp/issues/3450>`_ - Only encode content-disposition filename parameter using percent-encoding. Other parameters are encoded to quoted-string or RFC2231 extended parameter value. `4012 <https://github.com/aio-libs/aiohttp/issues/4012>`_ - Fixed HTTP client requests to honor ``no_proxy`` environment variables. `4431 <https://github.com/aio-libs/aiohttp/issues/4431>`_ - Fix supporting WebSockets proxies configured via environment variables. `4648 <https://github.com/aio-libs/aiohttp/issues/4648>`_ - Change return type on URLDispatcher to UrlMappingMatchInfo to improve type annotations. `4748 <https://github.com/aio-libs/aiohttp/issues/4748>`_ - Ensure a cleanup context is cleaned up even when an exception occurs during startup. `4799 <https://github.com/aio-libs/aiohttp/issues/4799>`_ - Added a new exception type for Unix socket client errors which provides a more useful error message. `4984 <https://github.com/aio-libs/aiohttp/issues/4984>`_ - Remove Transfer-Encoding and Content-Type headers for 204 in StreamResponse `5106 <https://github.com/aio-libs/aiohttp/issues/5106>`_ - Only depend on typing_extensions for Python <3.8 `5107 <https://github.com/aio-libs/aiohttp/issues/5107>`_ - Add ABNORMAL_CLOSURE and BAD_GATEWAY to WSCloseCode `5192 <https://github.com/aio-libs/aiohttp/issues/5192>`_ - Fix cookies disappearing from HTTPExceptions. `5233 <https://github.com/aio-libs/aiohttp/issues/5233>`_ - StaticResource prefixes no longer match URLs with a non-folder prefix. For example ``routes.static('/foo', '/foo')`` no longer matches the URL ``/foobar``. Previously, this would attempt to load the file ``/foo/ar``. `5250 <https://github.com/aio-libs/aiohttp/issues/5250>`_ - Acquire the connection before running traces to prevent race condition. `5259 <https://github.com/aio-libs/aiohttp/issues/5259>`_ - Add missing slots to _RequestContextManager`` and ``_WSRequestContextManager`` `5329 <https://github.com/aio-libs/aiohttp/issues/5329>`_ - Ensure sending a zero byte file does not throw an exception (round 2) `5380 <https://github.com/aio-libs/aiohttp/issues/5380>`_ - Set "text/plain" when data is an empty string in client requests. `5392 <https://github.com/aio-libs/aiohttp/issues/5392>`_ - Stop automatically releasing the ``ClientResponse`` object on calls to the ``ok`` property for the failed requests. `5403 <https://github.com/aio-libs/aiohttp/issues/5403>`_ - Include query parameters from `params` keyword argument in tracing `URL`. `5432 <https://github.com/aio-libs/aiohttp/issues/5432>`_ - Fix annotations `5466 <https://github.com/aio-libs/aiohttp/issues/5466>`_ - Fixed the multipart POST requests processing to always release file descriptors for the ``tempfile.Temporaryfile``-created ``_io.BufferedRandom`` instances of files sent within multipart request bodies via HTTP POST requests -- by :user:`webknjaz`. `5494 <https://github.com/aio-libs/aiohttp/issues/5494>`_ - Fix 0 being incorrectly treated as an immediate timeout. `5527 <https://github.com/aio-libs/aiohttp/issues/5527>`_ - Fixes failing tests when an environment variable <scheme>_proxy is set. `5554 <https://github.com/aio-libs/aiohttp/issues/5554>`_ - Replace deprecated app handler design in ``tests/autobahn/server.py`` with call to ``web.run_app``; replace deprecated ``aiohttp.ws_connect`` calls in ``tests/autobahn/client.py`` with ``aiohttp.ClienSession.ws_connect``. `5606 <https://github.com/aio-libs/aiohttp/issues/5606>`_ - Fixed test for ``HTTPUnauthorized`` that access the ``text`` argument. This is not used in any part of the code, so it's removed now. `5657 <https://github.com/aio-libs/aiohttp/issues/5657>`_ - Remove incorrect default from docs `5727 <https://github.com/aio-libs/aiohttp/issues/5727>`_ - Remove external test dependency to http://httpbin.org `5840 <https://github.com/aio-libs/aiohttp/issues/5840>`_ - Don't cancel current task when entering a cancelled timer. `5853 <https://github.com/aio-libs/aiohttp/issues/5853>`_ - Added ``params`` keyword argument to ``ClientSession.ws_connect``. -- :user:`hoh`. `5868 <https://github.com/aio-libs/aiohttp/issues/5868>`_ - Uses :py:class:`~asyncio.ThreadedChildWatcher` under POSIX to allow setting up test loop in non-main thread. `5877 <https://github.com/aio-libs/aiohttp/issues/5877>`_ - Fix the error in handling the return value of `getaddrinfo`. `getaddrinfo` will return an `(int, bytes)` tuple, if CPython could not handle the address family. It will cause a index out of range error in aiohttp. For example, if user compile CPython with `--disable-ipv6` option but his system enable the ipv6. `5901 <https://github.com/aio-libs/aiohttp/issues/5901>`_ - Removed the deprecated ``loop`` argument from the ``asyncio.sleep``/``gather`` calls `5905 <https://github.com/aio-libs/aiohttp/issues/5905>`_ - Return ``None`` from ``request.if_modified_since``, ``request.if_unmodified_since``, ``request.if_range`` and ``response.last_modified`` when corresponding http date headers are invalid. `5925 <https://github.com/aio-libs/aiohttp/issues/5925>`_ - Fix resetting `SIGCHLD` signals in Gunicorn aiohttp Worker to fix `subprocesses` that capture output having an incorrect `returncode`. `6130 <https://github.com/aio-libs/aiohttp/issues/6130>`_ - Raise ``400: Content-Length can't be present with Transfer-Encoding`` if both ``Content-Length`` and ``Transfer-Encoding`` are sent by peer by both C and Python implementations `6182 <https://github.com/aio-libs/aiohttp/issues/6182>`_ Improved Documentation ---------------------- - Refactored OpenAPI/Swagger aiohttp addons, added ``aio-openapi`` `5326 <https://github.com/aio-libs/aiohttp/issues/5326>`_ - Fixed docs on request cookies type, so it matches what is actually used in the code (a read-only dictionary-like object). `5725 <https://github.com/aio-libs/aiohttp/issues/5725>`_ - Documented that the HTTP client ``Authorization`` header is removed on redirects to a different host or protocol. `5850 <https://github.com/aio-libs/aiohttp/issues/5850>`_ Misc ---- - `3927 <https://github.com/aio-libs/aiohttp/issues/3927>`_, `#4247 <https://github.com/aio-libs/aiohttp/issues/4247>`_, `#4247 <https://github.com/aio-libs/aiohttp/issues/4247>`_, `#5389 <https://github.com/aio-libs/aiohttp/issues/5389>`_, `#5457 <https://github.com/aio-libs/aiohttp/issues/5457>`_, `#5486 <https://github.com/aio-libs/aiohttp/issues/5486>`_, `#5494 <https://github.com/aio-libs/aiohttp/issues/5494>`_, `#5515 <https://github.com/aio-libs/aiohttp/issues/5515>`_, `#5625 <https://github.com/aio-libs/aiohttp/issues/5625>`_, `#5635 <https://github.com/aio-libs/aiohttp/issues/5635>`_, `#5648 <https://github.com/aio-libs/aiohttp/issues/5648>`_, `#5657 <https://github.com/aio-libs/aiohttp/issues/5657>`_, `#5890 <https://github.com/aio-libs/aiohttp/issues/5890>`_, `#5914 <https://github.com/aio-libs/aiohttp/issues/5914>`_, `#5932 <https://github.com/aio-libs/aiohttp/issues/5932>`_, `#6002 <https://github.com/aio-libs/aiohttp/issues/6002>`_, `#6045 <https://github.com/aio-libs/aiohttp/issues/6045>`_, `#6131 <https://github.com/aio-libs/aiohttp/issues/6131>`_, `#6156 <https://github.com/aio-libs/aiohttp/issues/6156>`_, `#6165 <https://github.com/aio-libs/aiohttp/issues/6165>`_, `#6166 <https://github.com/aio-libs/aiohttp/issues/6166>`_ ---- ```Links
- PyPI: https://pypi.org/project/aiohttp - Changelog: https://data.safetycli.com/changelogs/aiohttp/ - Repo: https://github.com/aio-libs/aiohttpUpdate aioredis from 1.3.1 to 2.0.1.
Changelog
### 2.0.1 ``` Features - Added Python 3.10 to CI & Updated the Docs (see 1160) - Enable mypy in CI (see 1101) - Synchronized reading the responses from a connection (see 1106) Fixes - Remove __del__ from Redis (Fixes 1115) (see 1227) - fix socket.error raises (see 1129) - Fix buffer is closed error when using PythonParser class (see 1213) ``` ### 2.0.0 ``` Features - Port redis-py's client implementation to aioredis. (see 891) - Make hiredis an optional dependency. (see 917) ```Links
- PyPI: https://pypi.org/project/aioredis - Changelog: https://data.safetycli.com/changelogs/aioredis/ - Repo: https://github.com/aio-libs/aioredis-pyUpdate alembic from 1.5.8 to 1.13.1.
The bot wasn't able to find a changelog for this release. Got an idea?
Links
- PyPI: https://pypi.org/project/alembic - Homepage: https://alembic.sqlalchemy.org - Docs: https://pythonhosted.org/alembic/Update apscheduler from 3.7.0 to 3.10.4.
The bot wasn't able to find a changelog for this release. Got an idea?
Links
- PyPI: https://pypi.org/project/apscheduler - Changelog: https://data.safetycli.com/changelogs/apscheduler/ - Repo: https://github.com/agronholm/apscheduler - Docs: https://pythonhosted.org/APScheduler/Update gunicorn from 20.1.0 to 21.2.0.
Changelog
### 21.2.0 ``` =================== - fix thread worker: revert change considering connection as idle . *** NOTE *** This is fixing the bad file description error. ``` ### 21.0.1 ``` =================== - fix documentation build ``` ### 21.0.0 ``` =================== - support python 3.11 - fix gevent and eventlet workers - fix threads support (gththread): improve performance and unblock requests - SSL: noaw use SSLContext object - HTTP parser: miscellaneous fixes - remove unecessary setuid calls - fix testing - improve logging - miscellaneous fixes to core engine *** RELEASE NOTE *** We made this release major to start our new release cycle. More info will be provided on our discussion forum. ```Links
- PyPI: https://pypi.org/project/gunicorn - Changelog: https://data.safetycli.com/changelogs/gunicorn/ - Homepage: https://gunicorn.orgUpdate marshmallow from 3.11.1 to 3.21.1.
Changelog
### 3.21.1 ``` ******************* Bug fixes: - Fix error message when field is declared as a class and not an instance (:issue:`2245`). Thanks :user:`travnick` for reporting. ``` ### 3.21.0 ``` ******************* Bug fixes: - Fix validation of ``URL`` fields to allow missing user field, per NWG RFC 3986 (:issue:`2232`). Thanks :user:`ddennerline3` for reporting and :user:`deckar01` for the PR. Other changes: - *Backwards-incompatible*: ``__version__``, ``__parsed_version__``, and ``__version_info__`` attributes are deprecated (:issue:`2227`). Use feature detection or ``importlib.metadata.version("marshmallow")`` instead. ``` ### 3.20.2 ``` ******************* Bug fixes: - Fix ``Nested`` field type hint for lambda ``Schema`` types (:pr:`2164`). Thanks :user:`somethingnew2-0` for the PR. Other changes: - Officially support Python 3.12 (:pr:`2188`). Thanks :user:`hugovk` for the PR. ``` ### 3.20.1 ``` ******************* Bug fixes: - Fix call to ``get_declared_fields``: pass ``dict_cls`` again (:issue:`2152`). Thanks :user:`Cheaterman` for reporting. ``` ### 3.20.0 ``` ******************* Features: - Add ``absolute`` parameter to ``URL`` validator and ``Url`` field (:pr:`2123`). Thanks :user:`sirosen` for the PR. - Use Abstract Base Classes to define ``FieldABC`` and ``SchemaABC`` (:issue:`1449`). Thanks :user:`aditkumar72` for the PR. - Use `OrderedSet` as default `set_class`. Schemas are now ordered by default. (:issue:`1744`) Bug fixes: - Handle ``OSError`` and ``OverflowError`` in ``utils.from_timestamp`` (:pr:`2102`). Thanks :user:`TheBigRoomXXL` for the PR. - Fix the default inheritance of nested partial schemas (:issue:`2149`). Thanks :user:`matejsp` for reporting. Other changes: - Officially support Python 3.11 (:pr:`2067`). - Drop support for Python 3.7 (:pr:`2135`). ``` ### 3.19.0 ``` ******************* Features: - Add ``timestamp`` and ``timestamp_ms`` formats to ``fields.DateTime`` (:issue:`612`). Thanks :user:`vgavro` for the suggestion and thanks :user:`vanHoi` for the PR. ``` ### 3.18.0 ``` ******************* Features: - Add ``Enum`` field (:pr:`2017`) and (:pr:`2044`). Bug fixes: - Fix typing in ``Field._serialize`` signature (:pr:`2046`). ``` ### 3.17.1 ``` ******************* Bug fixes: - Add return type to ``fields.Email.__init__`` (:pr:`2018`). Thanks :user:`kkirsche` for the PR. - Add missing type hint to IPInterface __init__ (:pr:`2036`). ``` ### 3.17.0 ``` ******************* Features: - Support serialization as float in ``TimeDelta`` field (:pr:`1998`). Thanks :user:`marcosatti` for the PR. - Add ``messages_dict`` property to ``ValidationError`` to facilitate type checking (:pr:`1976`). Thanks :user:`sirosen` for the PR. ``` ### 3.16.0 ``` ******************* Features: - Raise ``ValueError`` if an invalid value is passed to the ``unknown`` argument (:issue:`1721`, :issue:`1732`). Thanks :user:`sirosen` for the PR. Other changes: - Set lower bound for ``packaging`` requirement (:issue:`1957`). Thanks :user:`MatthewNicolTR` for reporting and thanks :user:`sirosen` for the PR. - Improve warning messages by passing ``stacklevel`` (:pr:`1986`). Thanks :user:`tirkarthi` for the PR. ``` ### 3.15.0 ``` ******************* Features: - Allow passing a ``dict`` to ``fields.Nested`` (:pr:`1935`). Thanks :user:`sirosen` for the PR. Other changes: - Address distutils deprecation warning in Python 3.10 (:pr:`1903`). Thanks :user:`kkirsche` for the PR. - Add py310 to black target-version (:pr:`1921`). - Drop support for Python 3.6 (:pr:`1923`). - Use postponed evaluation of annotations (:pr:`1932`). Thanks :user:`Isira-Seneviratne` for the PR. ``` ### 3.14.1 ``` ******************* Bug fixes: - Fix publishing type hints per `PEP-561 <https://www.python.org/dev/peps/pep-0561/>`_ (:pr:`1905`). Thanks :user:`bwindsor` for the catch and patch. ``` ### 3.14.0 ``` ******************* Bug fixes: - Fix ``fields.TimeDelta`` serialization precision (:issue:`1865`). Thanks :user:`yarsanich` for reporting. Other changes: - Fix type-hints for ``data`` arg in ``Schema.validate`` to accept list of dictionaries (:issue:`1790`, :pr:`1868`). Thanks :user:`yourun-proger` for PR. - Improve warning when passing metadata as keyword arguments (:pr:`1882`). Thanks :user:`traherom` for the PR. - Don't build universal wheels. We don't support Python 2 anymore. (:issue:`1860`) Thanks :user:`YKdvd` for reporting. - Make the build reproducible (:pr:`1862`). - Drop support for Python 3.5 (:pr:`1863`). - Test against Python 3.10 (:pr:`1888`). ``` ### 3.13.0 ``` ******************* Features: - Replace ``missing``/``default`` field parameters with ``load_default``/``dump_default`` (:pr:`1742`). Thanks :user:`sirosen` for the PR. Deprecations: - The use of ``missing``/``default`` field parameters is deprecated and will be removed in marshmallow 4. ``load_default``/``dump_default`` should be used instead. ``` ### 3.12.2 ``` ******************* Bug fixes: - Don't expose ``Field``\s as ``Schema`` attributes. This reverts a change introduced in 3.12.0 that causes issues when field names conflict with ``Schema`` attributes or methods. ``Fields``\s are still accessible on a ``Schema`` instance through the ``fields`` attribute. (:pr:`1843`) ``` ### 3.12.1 ``` ******************* Bug fixes: - Fix bug that raised an ``AttributeError`` when instantiating a ``Schema`` with a field named ``parent`` (:issue:`1808`). Thanks :user:`flying-sheep` for reporting and helping with the fix. ``` ### 3.12.0 ``` ******************* Features: - Add ``validate.And`` (:issue:`1768`). Thanks :user:`rugleb` for the suggestion. - Add type annotations to ``marshmallow.decorators`` (:issue:`1788`, :pr:`1789`). Thanks :user:`michaeldimchuk` for the PR. - Let ``Field``\s be accessed by name as ``Schema`` attributes (:pr:`1631`). Other changes: - Improve types in ``marshmallow.validate`` (:pr:`1786`). - Make ``marshmallow.validate.Validator`` an abstract base class (:pr:`1786`). - Remove unnecessary list cast (:pr:`1785`). ```Links
- PyPI: https://pypi.org/project/marshmallow - Changelog: https://data.safetycli.com/changelogs/marshmallow/Update sentry-sdk from 1.0.0 to 1.45.0.
The bot wasn't able to find a changelog for this release. Got an idea?
Links
- PyPI: https://pypi.org/project/sentry-sdk - Repo: https://github.com/getsentry/sentry-pythonUpdate psycopg2-binary from 2.8.6 to 2.9.9.
The bot wasn't able to find a changelog for this release. Got an idea?
Links
- PyPI: https://pypi.org/project/psycopg2-binary - Homepage: https://psycopg.org/Update pyyaml from 5.4.1 to 6.0.1.
The bot wasn't able to find a changelog for this release. Got an idea?
Links
- PyPI: https://pypi.org/project/pyyaml - Homepage: https://pyyaml.org/Update uvloop from 0.15.2 to 0.19.0.
Changelog
### 0.19.0 ``` Changes ======= * Drop support of Python 3.7 and update CI (578) (by fantix in ee5ad26a for 578) Fixes ===== * Restore uvloop.new_event_loop and other missing uvloop members to typing (573) (by graingert in 5c500ee2 for 573) * Fix docstring of loop.shutdown_default_executor (535) (by Gelbpunkt in 919da567 for 535) * Fix CI status badge (522) (by shuuji3 in 0e9ff6cd for 522) ``` ### 0.18.0 ``` Fixes ===== * CI fixes (520, 553) (by altendky in 7783f1c5, dulmandakh in 1dd40f17) * Make extract_stack resilient to lacking frames. (563) (by jhance in 06876434 for 563) * Port uvloop to Python 3.12 (570) (by 1st1, fantix in 9f82bd74 for 569) ``` ### 0.17.0 ``` This release adds Python 3.11 support, updates bundled libuv to 1.43.0 and fixes a handful of issues. Changes ======= * Expose uv_loop_t pointer for integration with other C-extensions (310) (by pranavtbhat in b332eb85 for 310) * Support python 3.11+ (473) (by zeroday0619 in 8e42921d for 473) * Expose libuv uv_fs_event functionality (474) (by jensbjorgensen fantix in 74d381e8 for 474) * Activate debug mode when `-X dev` is used (by jack1142 in 637a77a3) * Expose uv_version() for libuv API compatibility (491) (by fantix in 089f6cbf for 491) * Fix loop.getaddrinfo() and tests (495) (by fantix in 598b16fd for 495) * Bump to libuv 1.43.0 (by fantix in 94e5e535) Fixes ===== * _TransProtPair is no longer defined in asyncio.events (by jensbjorgensen in fae5f7fb) * use a TypeVar for asyncio.BaseProtocol (478) (by graingert in 3aacb352 for 478) * Fix segfault in TimerHandle.when() after cleared (by jensbjorgensen in c39afff8 for 469) * Avoid self._errpipe_write double close (466) (by graingert in 72140d7e for 466) * Fix typo in test (456) (by kianmeng in 033d52d0 for 456) * Fix potential infinite loop (446) (by kfur in ada43c06 for 446) * use a stack of self._fds_to_close to prevent double closes (481) (by graingert in 3214cf68 for 481) * Fix incorrect main thread id value forking from a thread (453) (by horpto fantix in e7934c88 for 453) * create_subprocess_exec should treat env={} as empty environment (439) (454) (by byllyfish in e04637e0 for 439) * Queue write only after processing all buffers (445) (by jakirkham fantix in 9c6ecb62 for 445) * Drop Python 3.6 support for thread ident (by fantix in 9c37930e) * bugfix: write to another transport in resume_writing() fails (498) (by fantix in d2deffef for 498) Build ===== * Upgrade GitHub Actions (477) (480) (by cclauss in fcbf422d for 477, 10086942 for 480) * typo `same as same` (by YoSTEALTH in fedba80a) * setup.py: allow to override extra_compile_args (443) (by giuliobenetti in a130375f for 443) * Drop hack in setup.py in finalize_options (492) (by fantix in 2f1bc83c for 492) * Fix tests invocation on release CI worklow (489) (by ben9923 in d6a2b597 for 489) Documentation ============= * use asyncio.Runner loop_factory on 3.11+ (472) (by graingert in 31ba48ca for 472) * Fix CI badge in docs, remove remaining Travis CI references from docs (by Nothing4You in c6901a74) * Fix typo in README (by monosans in 73d7253b) ``` ### 0.16.0 ``` This release adds Python 3.10 support, updates bundled libuv to 1.42.0 and fixes a handful of issues. Changes ======= * Python 3.10 support (432) (by elprans in 2519e2df for 432) * Bump vendored libuv to 1.42.0 (433) (by elprans in a62f7818 for 433) * Use cibuildwheel to build wheels (435) (by elprans in 20febe0b for 435) * Add support for `<timer handle>.when()` (by Jens Jorgensen in 62b2af9c) Fixes ===== * Fix ref issue when protocol is in Cython (by fantix in 70cafc82 for 2222) * Set `python_requires` in setup.py (by graingert in c808a663) * SSL: schedule first data after waiter wakeup (by fantix in 2081db89) * Fix a possible race condition in sslproto test (by fantix in b0526cd5 for 412) * Fix `call_soon_threadsafe` thread safety (by fantix in 4b803b15) ``` ### 0.15.3 ``` Bug Fixes * SSL: schedule first data after waiter wakeup (by fantix in 0df12282) * Fix a possible race condition in sslproto test (by fantix in 2e71c4c2 for 412) * Fix `call_soon_threadsafe` thread safety (by fantix and hehaha in 6387a4e4 for 408) ```Links
- PyPI: https://pypi.org/project/uvloop - Changelog: https://data.safetycli.com/changelogs/uvloop/Update sqlalchemy from 1.3.23 to 2.0.29.
Changelog
### 2.0.29 ``` :released: March 23, 2024 .. change:: :tags: bug, orm :tickets: 10611 Fixed Declarative issue where typing a relationship using :class:`_orm.Relationship` rather than :class:`_orm.Mapped` would inadvertently pull in the "dynamic" relationship loader strategy for that attribute. .. change:: :tags: postgresql, usecase :tickets: 10693 The PostgreSQL dialect now returns :class:`_postgresql.DOMAIN` instances when reflecting a column that has a domain as type. Previously, the domain data type was returned instead. As part of this change, the domain reflection was improved to also return the collation of the text types. Pull request courtesy of Thomas Stephenson. .. change:: :tags: bug, typing :tickets: 11055 Fixed typing issue allowing asyncio ``run_sync()`` methods to correctly type the parameters according to the callable that was passed, making use of :pep:`612` ``ParamSpec`` variables. Pull request courtesy Francisco R. Del Roio. .. change:: :tags: bug, orm :tickets: 11091 Fixed issue in ORM annotated declarative where using :func:`_orm.mapped_column()` with an :paramref:`_orm.mapped_column.index` or :paramref:`_orm.mapped_column.unique` setting of False would be overridden by an incoming ``Annotated`` element that featured that parameter set to ``True``, even though the immediate :func:`_orm.mapped_column()` element is more specific and should take precedence. The logic to reconcile the booleans has been enhanced to accommodate a local value of ``False`` as still taking precedence over an incoming ``True`` value from the annotated element. .. change:: :tags: usecase, orm :tickets: 11130 Added support for the :pep:`695` ``TypeAliasType`` construct as well as the python 3.12 native ``type`` keyword to work with ORM Annotated Declarative form when using these constructs to link to a :pep:`593` ``Annotated`` container, allowing the resolution of the ``Annotated`` to proceed when these constructs are used in a :class:`_orm.Mapped` typing container. .. change:: :tags: bug, engine :tickets: 11157 Fixed issue in :ref:`engine_insertmanyvalues` feature where using a primary key column with an "inline execute" default generator such as an explicit :class:`.Sequence` with an explcit schema name, while at the same time using the :paramref:`_engine.Connection.execution_options.schema_translate_map` feature would fail to render the sequence or the parameters properly, leading to errors. .. change:: :tags: bug, engine :tickets: 11160 Made a change to the adjustment made in version 2.0.10 for :ticket:`9618`, which added the behavior of reconciling RETURNING rows from a bulk INSERT to the parameters that were passed to it. This behavior included a comparison of already-DB-converted bound parameter values against returned row values that was not always "symmetrical" for SQL column types such as UUIDs, depending on specifics of how different DBAPIs receive such values versus how they return them, necessitating the need for additional "sentinel value resolver" methods on these column types. Unfortunately this broke third party column types such as UUID/GUID types in libraries like SQLModel which did not implement this special method, raising an error "Can't match sentinel values in result set to parameter sets". Rather than attempt to further explain and document this implementation detail of the "insertmanyvalues" feature including a public version of the new method, the approach is intead revised to no longer need this extra conversion step, and the logic that does the comparison now works on the pre-converted bound parameter value compared to the post-result-processed value, which should always be of a matching datatype. In the unusual case that a custom SQL column type that also happens to be used in a "sentinel" column for bulk INSERT is not receiving and returning the same value type, the "Can't match" error will be raised, however the mitigation is straightforward in that the same Python datatype should be passed as that returned. .. change:: :tags: bug, orm, regression :tickets: 11173 Fixed regression from version 2.0.28 caused by the fix for :ticket:`11085` where the newer method of adjusting post-cache bound parameter values would interefere with the implementation for the :func:`_orm.subqueryload` loader option, which has some more legacy patterns in use internally, when the additional loader criteria feature were used with this loader option. .. change:: :tags: bug, sql, regression :tickets: 11176 Fixed regression from the 1.4 series where the refactor of the :meth:`_types.TypeEngine.with_variant` method introduced at :ref:`change_6980` failed to accommodate for the ``.copy()`` method, which will lose the variant mappings that are set up. This becomes an issue for the very specific case of a "schema" type, which includes types such as :class:`.Enum` and :class:`.ARRAY`, when they are then used in the context of an ORM Declarative mapping with mixins where copying of types comes into play. The variant mapping is now copied as well. .. change:: :tags: bug, tests :tickets: 11187 Backported to SQLAlchemy 2.0 an improvement to the test suite with regards to how asyncio related tests are run, now using the newer Python 3.11 ``asyncio.Runner`` or a backported equivalent, rather than relying on the previous implementation based on ``asyncio.get_running_loop()``. This should hopefully prevent issues with large suite runs on CPU loaded hardware where the event loop seems to become corrupted, leading to cascading failures. .. changelog:: ``` ### 2.0.28 ``` :released: March 4, 2024 .. change:: :tags: engine, usecase :tickets: 10974 Added new core execution option :paramref:`_engine.Connection.execution_options.preserve_rowcount`. When set, the ``cursor.rowcount`` attribute from the DBAPI cursor will be unconditionally memoized at statement execution time, so that whatever value the DBAPI offers for any kind of statement will be available using the :attr:`_engine.CursorResult.rowcount` attribute from the :class:`_engine.CursorResult`. This allows the rowcount to be accessed for statements such as INSERT and SELECT, to the degree supported by the DBAPI in use. The :ref:`engine_insertmanyvalues` also supports this option and will ensure :attr:`_engine.CursorResult.rowcount` is correctly set for a bulk INSERT of rows when set. .. change:: :tags: bug, orm, regression :tickets: 11010 Fixed regression caused by :ticket:`9779` where using the "secondary" table in a relationship ``and_()`` expression would fail to be aliased to match how the "secondary" table normally renders within a :meth:`_sql.Select.join` expression, leading to an invalid query. .. change:: :tags: bug, orm, performance, regression :tickets: 11085 Adjusted the fix made in :ticket:`10570`, released in 2.0.23, where new logic was added to reconcile possibly changing bound parameter values across cache key generations used within the :func:`_orm.with_expression` construct. The new logic changes the approach by which the new bound parameter values are associated with the statement, avoiding the need to deep-copy the statement which can result in a significant performance penalty for very deep / complex SQL constructs. The new approach no longer requires this deep-copy step. .. change:: :tags: bug, asyncio :tickets: 8771 An error is raised if a :class:`.QueuePool` or other non-asyncio pool class is passed to :func:`_asyncio.create_async_engine`. This engine only accepts asyncio-compatible pool classes including :class:`.AsyncAdaptedQueuePool`. Other pool classes such as :class:`.NullPool` are compatible with both synchronous and asynchronous engines as they do not perform any locking. .. seealso:: :ref:`pool_api` .. ch