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
### 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.27
```
:released: February 13, 2024
.. change::
:tags: bug, postgresql, regression
:tickets: 11005
Fixed regression caused by just-released fix for :ticket:`10863` where an
invalid exception class were added to the "except" block, which does not
get exercised unless such a catch actually happens. A mock-style test has
been added to ensure this catch is exercised in unit tests.
.. changelog::
```
### 2.0.26
```
:released: February 11, 2024
.. change::
:tags: usecase, postgresql, reflection
:tickets: 10777
Added support for reflection of PostgreSQL CHECK constraints marked with
"NO INHERIT", setting the key ``no_inherit=True`` in the reflected data.
Pull request courtesy Ellis Valentiner.
.. change::
:tags: bug, sql
:tickets: 10843
Fixed issues in :func:`_sql.case` where the logic for determining the
type of the expression could result in :class:`.NullType` if the last
element in the "whens" had no type, or in other cases where the type
could resolve to ``None``. The logic has been updated to scan all
given expressions so that the first non-null type is used, as well as
to always ensure a type is present. Pull request courtesy David Evans.
.. change::
:tags: bug, mysql
:tickets: 10850
Fixed issue where NULL/NOT NULL would not be properly reflected from a
MySQL column that also specified the VIRTUAL or STORED directives. Pull
request courtesy Georg Wicke-Arndt.
.. change::
:tags: bug, regression, postgresql
:tickets: 10863
Fixed regression in the asyncpg dialect caused by :ticket:`10717` in
release 2.0.24 where the change that now attempts to gracefully close the
asyncpg connection before terminating would not fall back to
``terminate()`` for other potential connection-related exceptions other
than a timeout error, not taking into account cases where the graceful
``.close()`` attempt fails for other reasons such as connection errors.
.. change::
:tags: oracle, bug, performance
:tickets: 10877
Changed the default arraysize of the Oracle dialects so that the value set
by the driver is used, that is 100 at the time of writing for both
cx_oracle and oracledb. Previously the value was set to 50 by default. The
setting of 50 could cause significant performance regressions compared to
when using cx_oracle/oracledb alone to fetch many hundreds of rows over
slower networks.
.. change::
:tags: bug, mysql
:tickets: 10893
Fixed issue in asyncio dialects asyncmy and aiomysql, where their
``.close()`` method is apparently not a graceful close. replace with
non-standard ``.ensure_closed()`` method that's awaitable and move
``.close()`` to the so-called "terminate" case.
.. change::
:tags: bug, orm
:tickets: 10896
Replaced the "loader depth is excessively deep" warning with a shorter
message added to the caching badge within SQL logging, for those statements
where the ORM disabled the cache due to a too-deep chain of loader options.
The condition which this warning highlights is difficult to resolve and is
generally just a limitation in the ORM's application of SQL caching. A
future feature may include the ability to tune the threshold where caching
is disabled, but for now the warning will no longer be a nuisance.
.. change::
:tags: bug, orm
:tickets: 10899
Fixed issue where it was not possible to use a type (such as an enum)
within a :class:`_orm.Mapped` container type if that type were declared
locally within the class body. The scope of locals used for the eval now
includes that of the class body itself. In addition, the expression within
:class:`_orm.Mapped` may also refer to the class name itself, if used as a
string or with future annotations mode.
.. change::
:tags: usecase, postgresql
:tickets: 10904
Support the ``USING <method>`` option for PostgreSQL ``CREATE TABLE`` to
specify the access method to use to store the contents for the new table.
Pull request courtesy Edgar Ramírez-Mondragón.
.. seealso::
:ref:`postgresql_table_options`
.. change::
:tags: bug, examples
:tickets: 10920
Fixed regression in history_meta example where the use of
:meth:`_schema.MetaData.to_metadata` to make a copy of the history table
would also copy indexes (which is a good thing), but causing naming
conflicts indexes regardless of naming scheme used for those indexes. A
"_history" suffix is now added to these indexes in the same way as is
achieved for the table name.
.. change::
:tags: bug, orm
:tickets: 10967
Fixed issue where using :meth:`_orm.Session.delete` along with the
:paramref:`_orm.Mapper.version_id_col` feature would fail to use the
correct version identifier in the case that an additional UPDATE were
emitted against the target object as a result of the use of
:paramref:`_orm.relationship.post_update` on the object. The issue is
similar to :ticket:`10800` just fixed in version 2.0.25 for the case of
updates alone.
.. change::
:tags: bug, orm
:tickets: 10990
Fixed issue where an assertion within the implementation for
:func:`_orm.with_expression` would raise if a SQL expression that was not
cacheable were used; this was a 2.0 regression since 1.4.
.. change::
:tags: postgresql, usecase
:tickets: 9736
Correctly type PostgreSQL RANGE and MULTIRANGE types as ``Range[T]``
and ``Sequence[Range[T]]``.
Introduced utility sequence :class:`_postgresql.MultiRange` to allow better
interoperability of MULTIRANGE types.
.. change::
:tags: postgresql, usecase
Differentiate between INT4 and INT8 ranges and multi-ranges types when
inferring the database type from a :class:`_postgresql.Range` or
:class:`_postgresql.MultiRange` instance, preferring INT4 if the values
fit into it.
.. change::
:tags: bug, typing
Fixed the type signature for the :meth:`.PoolEvents.checkin` event to
indicate that the given :class:`.DBAPIConnection` argument may be ``None``
in the case where the connection has been invalidated.
.. change::
:tags: bug, examples
Fixed the performance example scripts in examples/performance to mostly
work with the Oracle database, by adding the :class:`.Identity` construct
to all the tables and allowing primary generation to occur on this backend.
A few of the "raw DBAPI" cases still are not compatible with Oracle.
.. change::
:tags: bug, mssql
Fixed an issue regarding the use of the :class:`.Uuid` datatype with the
:paramref:`.Uuid.as_uuid` parameter set to False, when using the pymssql
dialect. ORM-optimized INSERT statements (e.g. the "insertmanyvalues"
feature) would not correctly align primary key UUID values for bulk INSERT
statements, resulting in errors. Similar issues were fixed for the
PostgreSQL drivers as well.
.. change::
:tags: bug, postgresql
Fixed an issue regarding the use of the :class:`.Uuid` datatype with the
:paramref:`.Uuid.as_uuid` parameter set to False, when using PostgreSQL
dialects. ORM-optimized INSERT statements (e.g. the "insertmanyvalues"
feature) would not correctly align primary key UUID values for bulk INSERT
statements, resulting in errors. Similar issues were fixed for the
pymssql driver as well.
.. changelog::
```
### 2.0.25
```
:released: January 2, 2024
.. change::
:tags: oracle, asyncio
:tickets: 10679
Added support for :ref:`oracledb` in asyncio mode, using the newly released
version of the ``oracledb`` DBAPI that includes asyncio support. For the
2.0 series, this is a preview release, where the current implementation
does not yet have include support for
:meth:`_asyncio.AsyncConnection.stream`. Improved support is planned for
the 2.1 release of SQLAlchemy.
.. change::
:tags: bug, orm
:tickets: 10800
Fixed issue where when making use of the
:paramref:`_orm.relationship.post_update` feature at the same time as using
a mapper version_id_col could lead to a situation where the second UPDATE
statement emitted by the post-update feature would fail to make use of the
correct version identifier, assuming an UPDATE was already emitted in that
flush which had already bumped the version counter.
.. change::
:tags: bug, typing
:tickets: 10801, 10818
Fixed regressions caused by typing added to the ``sqlalchemy.sql.functions``
module in version 2.0.24, as part of :ticket:`6810`:
* Further enhancements to pep-484 typing to allow SQL functions from
:attr:`_sql.func` derived elements to work more effectively with ORM-mapped
attributes (:ticket:`10801`)
* Fixed the argument types passed to functions so that literal expressions
like strings and ints are again interpreted correctly (:ticket:`10818`)
.. change::
:tags: usecase, orm
:tickets: 10807
Added preliminary support for Python 3.12 pep-695 type alias structures,
when resolving custom type maps for ORM Annotated Declarative mappings.
.. change::
:tags: bug, orm
:tickets: 10815
Fixed issue where ORM Annotated Declarative would mis-interpret the left
hand side of a relationship without any collection specified as
uselist=True if the left type were given as a class and not a string,
without using future-style annotations.
.. change::
:tags: bug, sql
:tickets: 10817
Improved compilation of :func:`_sql.any_` / :func:`_sql.all_` in the
context of a negation of boolean comparison, will now render ``NOT (expr)``
rather than reversing the equality operator to not equals, allowing
finer-grained control of negations for these non-typical operators.
.. changelog::
```
### 2.0.24
```
:released: December 28, 2023
.. change::
:tags: bug, orm
:tickets: 10597
Fixed issue where use of :func:`_orm.foreign` annotation on a
non-initialized :func:`_orm.mapped_column` construct would produce an
expression without a type, which was then not updated at initialization
time of the actual column, leading to issues such as relationships not
determining ``use_get`` appropriately.
.. change::
:tags: bug, schema
:tickets: 10654
Fixed issue where error reporting for unexpected schema item when creating
objects like :class:`_schema.Table` would incorrectly handle an argument
that was itself passed as a tuple, leading to a formatting error. The
error message has been modernized to use f-strings.
.. change::
:tags: bug, engine
:tickets: 10662
Fixed URL-encoding of the username and password components of
:class:`.engine.URL` objects when converting them to string using the
:meth:`_engine.URL.render_as_string` method, by using Python standard
library ``urllib.parse.quote`` while allowing for plus signs and spaces to
remain unchanged as supported by SQLAlchemy's non-standard URL parsing,
rather than the legacy home-grown routine from many years ago. Pull request
courtesy of Xavier NUNN.
.. change::
:tags: bug, orm
:tickets: 10668
Improved the error message produced when the unit of work process sets the
value of a primary key column to NULL due to a related object with a
dependency rule on that column being deleted, to include not just the
destination object and column name but also the source column from which
the NULL value is originating. Pull request courtesy Jan Vollmer.
.. change::
:tags: bug, postgresql
:tickets: 10717
Adjusted the asyncpg dialect such that when the ``terminate()`` method is
used to discard an invalidated connection, the dialect will first attempt
to gracefully close the connection using ``.close()`` with a timeout, if
the operation is proceeding within an async event loop context only. This
allows the asyncpg driver to attend to finalizing a ``TimeoutError``
including being able to close a long-running query server side, which
otherwise can keep running after the program has exited.
.. change::
:tags: bug, orm
:tickets: 10732
Modified the ``__init_subclass__()`` method used by
:class:`_orm.MappedAsDataclass`, :class:`_orm.DeclarativeBase` and
:class:`_orm.DeclarativeBaseNoMeta` to accept arbitrary ``**kw`` and to
propagate them to the ``super()`` call, allowing greater flexibility in
arranging custom superclasses and mixins which make use of
``__init_subclass__()`` keyword arguments. Pull request courtesy Michael
Oliver.
.. change::
:tags: bug, tests
:tickets: 10747
Improvements to the test suite to further harden its ability to run
when Python ``greenlet`` is not installed. There is now a tox
target that includes the token "nogreenlet" that will run the suite
with greenlet not installed (note that it still temporarily installs
greenlet as part of the tox config, however).
.. change::
:tags: bug, sql
:tickets: 10753
Fixed issue in stringify for SQL elements, where a specific dialect is not
passed, where a dialect-specific element such as the PostgreSQL "on
conflict do update" construct is encountered and then fails to provide for
a stringify dialect with the appropriate state to render the construct,
leading to internal errors.
.. change::
:tags: bug, sql
Fixed issue where stringifying or compiling a :class:`.CTE` that was
against a DML construct such as an :func:`_sql.insert` construct would fail
to stringify, due to a mis-detection that the statement overall is an
INSERT, leading to internal errors.
.. change::
:tags: bug, orm
:tickets: 10776
Ensured the use case of :class:`.Bundle` objects used in the
``returning()`` portion of ORM-enabled INSERT, UPDATE and DELETE statements
is tested and works fully. This was never explicitly implemented or
tested previously and did not work correctly in the 1.4 series; in the 2.0
series, ORM UPDATE/DELETE with WHER
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.3.
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.20.2.
The bot wasn't able to find a changelog for this release. Got an idea?
Links
- PyPI: https://pypi.org/project/marshmallow - Repo: https://github.com/marshmallow-code/marshmallowUpdate sentry-sdk from 1.0.0 to 1.40.4.
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.27.
Changelog
### 2.0.27 ``` :released: February 13, 2024 .. change:: :tags: bug, postgresql, regression :tickets: 11005 Fixed regression caused by just-released fix for :ticket:`10863` where an invalid exception class were added to the "except" block, which does not get exercised unless such a catch actually happens. A mock-style test has been added to ensure this catch is exercised in unit tests. .. changelog:: ``` ### 2.0.26 ``` :released: February 11, 2024 .. change:: :tags: usecase, postgresql, reflection :tickets: 10777 Added support for reflection of PostgreSQL CHECK constraints marked with "NO INHERIT", setting the key ``no_inherit=True`` in the reflected data. Pull request courtesy Ellis Valentiner. .. change:: :tags: bug, sql :tickets: 10843 Fixed issues in :func:`_sql.case` where the logic for determining the type of the expression could result in :class:`.NullType` if the last element in the "whens" had no type, or in other cases where the type could resolve to ``None``. The logic has been updated to scan all given expressions so that the first non-null type is used, as well as to always ensure a type is present. Pull request courtesy David Evans. .. change:: :tags: bug, mysql :tickets: 10850 Fixed issue where NULL/NOT NULL would not be properly reflected from a MySQL column that also specified the VIRTUAL or STORED directives. Pull request courtesy Georg Wicke-Arndt. .. change:: :tags: bug, regression, postgresql :tickets: 10863 Fixed regression in the asyncpg dialect caused by :ticket:`10717` in release 2.0.24 where the change that now attempts to gracefully close the asyncpg connection before terminating would not fall back to ``terminate()`` for other potential connection-related exceptions other than a timeout error, not taking into account cases where the graceful ``.close()`` attempt fails for other reasons such as connection errors. .. change:: :tags: oracle, bug, performance :tickets: 10877 Changed the default arraysize of the Oracle dialects so that the value set by the driver is used, that is 100 at the time of writing for both cx_oracle and oracledb. Previously the value was set to 50 by default. The setting of 50 could cause significant performance regressions compared to when using cx_oracle/oracledb alone to fetch many hundreds of rows over slower networks. .. change:: :tags: bug, mysql :tickets: 10893 Fixed issue in asyncio dialects asyncmy and aiomysql, where their ``.close()`` method is apparently not a graceful close. replace with non-standard ``.ensure_closed()`` method that's awaitable and move ``.close()`` to the so-called "terminate" case. .. change:: :tags: bug, orm :tickets: 10896 Replaced the "loader depth is excessively deep" warning with a shorter message added to the caching badge within SQL logging, for those statements where the ORM disabled the cache due to a too-deep chain of loader options. The condition which this warning highlights is difficult to resolve and is generally just a limitation in the ORM's application of SQL caching. A future feature may include the ability to tune the threshold where caching is disabled, but for now the warning will no longer be a nuisance. .. change:: :tags: bug, orm :tickets: 10899 Fixed issue where it was not possible to use a type (such as an enum) within a :class:`_orm.Mapped` container type if that type were declared locally within the class body. The scope of locals used for the eval now includes that of the class body itself. In addition, the expression within :class:`_orm.Mapped` may also refer to the class name itself, if used as a string or with future annotations mode. .. change:: :tags: usecase, postgresql :tickets: 10904 Support the ``USING <method>`` option for PostgreSQL ``CREATE TABLE`` to specify the access method to use to store the contents for the new table. Pull request courtesy Edgar Ramírez-Mondragón. .. seealso:: :ref:`postgresql_table_options` .. change:: :tags: bug, examples :tickets: 10920 Fixed regression in history_meta example where the use of :meth:`_schema.MetaData.to_metadata` to make a copy of the history table would also copy indexes (which is a good thing), but causing naming conflicts indexes regardless of naming scheme used for those indexes. A "_history" suffix is now added to these indexes in the same way as is achieved for the table name. .. change:: :tags: bug, orm :tickets: 10967 Fixed issue where using :meth:`_orm.Session.delete` along with the :paramref:`_orm.Mapper.version_id_col` feature would fail to use the correct version identifier in the case that an additional UPDATE were emitted against the target object as a result of the use of :paramref:`_orm.relationship.post_update` on the object. The issue is similar to :ticket:`10800` just fixed in version 2.0.25 for the case of updates alone. .. change:: :tags: bug, orm :tickets: 10990 Fixed issue where an assertion within the implementation for :func:`_orm.with_expression` would raise if a SQL expression that was not cacheable were used; this was a 2.0 regression since 1.4. .. change:: :tags: postgresql, usecase :tickets: 9736 Correctly type PostgreSQL RANGE and MULTIRANGE types as ``Range[T]`` and ``Sequence[Range[T]]``. Introduced utility sequence :class:`_postgresql.MultiRange` to allow better interoperability of MULTIRANGE types. .. change:: :tags: postgresql, usecase Differentiate between INT4 and INT8 ranges and multi-ranges types when inferring the database type from a :class:`_postgresql.Range` or :class:`_postgresql.MultiRange` instance, preferring INT4 if the values fit into it. .. change:: :tags: bug, typing Fixed the type signature for the :meth:`.PoolEvents.checkin` event to indicate that the given :class:`.DBAPIConnection` argument may be ``None`` in the case where the connection has been invalidated. .. change:: :tags: bug, examples Fixed the performance example scripts in examples/performance to mostly work with the Oracle database, by adding the :class:`.Identity` construct to all the tables and allowing primary generation to occur on this backend. A few of the "raw DBAPI" cases still are not compatible with Oracle. .. change:: :tags: bug, mssql Fixed an issue regarding the use of the :class:`.Uuid` datatype with the :paramref:`.Uuid.as_uuid` parameter set to False, when using the pymssql dialect. ORM-optimized INSERT statements (e.g. the "insertmanyvalues" feature) would not correctly align primary key UUID values for bulk INSERT statements, resulting in errors. Similar issues were fixed for the PostgreSQL drivers as well. .. change:: :tags: bug, postgresql Fixed an issue regarding the use of the :class:`.Uuid` datatype with the :paramref:`.Uuid.as_uuid` parameter set to False, when using PostgreSQL dialects. ORM-optimized INSERT statements (e.g. the "insertmanyvalues" feature) would not correctly align primary key UUID values for bulk INSERT statements, resulting in errors. Similar issues were fixed for the pymssql driver as well. .. changelog:: ``` ### 2.0.25 ``` :released: January 2, 2024 .. change:: :tags: oracle, asyncio :tickets: 10679 Added support for :ref:`oracledb` in asyncio mode, using the newly released version of the ``oracledb`` DBAPI that includes asyncio support. For the 2.0 series, this is a preview release, where the current implementation does not yet have include support for :meth:`_asyncio.AsyncConnection.stream`. Improved support is planned for the 2.1 release of SQLAlchemy. .. change:: :tags: bug, orm :tickets: 10800 Fixed issue where when making use of the :paramref:`_orm.relationship.post_update` feature at the same time as using a mapper version_id_col could lead to a situation where the second UPDATE statement emitted by the post-update feature would fail to make use of the correct version identifier, assuming an UPDATE was already emitted in that flush which had already bumped the version counter. .. change:: :tags: bug, typing :tickets: 10801, 10818 Fixed regressions caused by typing added to the ``sqlalchemy.sql.functions`` module in version 2.0.24, as part of :ticket:`6810`: * Further enhancements to pep-484 typing to allow SQL functions from :attr:`_sql.func` derived elements to work more effectively with ORM-mapped attributes (:ticket:`10801`) * Fixed the argument types passed to functions so that literal expressions like strings and ints are again interpreted correctly (:ticket:`10818`) .. change:: :tags: usecase, orm :tickets: 10807 Added preliminary support for Python 3.12 pep-695 type alias structures, when resolving custom type maps for ORM Annotated Declarative mappings. .. change:: :tags: bug, orm :tickets: 10815 Fixed issue where ORM Annotated Declarative would mis-interpret the left hand side of a relationship without any collection specified as uselist=True if the left type were given as a class and not a string, without using future-style annotations. .. change:: :tags: bug, sql :tickets: 10817 Improved compilation of :func:`_sql.any_` / :func:`_sql.all_` in the context of a negation of boolean comparison, will now render ``NOT (expr)`` rather than reversing the equality operator to not equals, allowing finer-grained control of negations for these non-typical operators. .. changelog:: ``` ### 2.0.24 ``` :released: December 28, 2023 .. change:: :tags: bug, orm :tickets: 10597 Fixed issue where use of :func:`_orm.foreign` annotation on a non-initialized :func:`_orm.mapped_column` construct would produce an expression without a type, which was then not updated at initialization time of the actual column, leading to issues such as relationships not determining ``use_get`` appropriately. .. change:: :tags: bug, schema :tickets: 10654 Fixed issue where error reporting for unexpected schema item when creating objects like :class:`_schema.Table` would incorrectly handle an argument that was itself passed as a tuple, leading to a formatting error. The error message has been modernized to use f-strings. .. change:: :tags: bug, engine :tickets: 10662 Fixed URL-encoding of the username and password components of :class:`.engine.URL` objects when converting them to string using the :meth:`_engine.URL.render_as_string` method, by using Python standard library ``urllib.parse.quote`` while allowing for plus signs and spaces to remain unchanged as supported by SQLAlchemy's non-standard URL parsing, rather than the legacy home-grown routine from many years ago. Pull request courtesy of Xavier NUNN. .. change:: :tags: bug, orm :tickets: 10668 Improved the error message produced when the unit of work process sets the value of a primary key column to NULL due to a related object with a dependency rule on that column being deleted, to include not just the destination object and column name but also the source column from which the NULL value is originating. Pull request courtesy Jan Vollmer. .. change:: :tags: bug, postgresql :tickets: 10717 Adjusted the asyncpg dialect such that when the ``terminate()`` method is used to discard an invalidated connection, the dialect will first attempt to gracefully close the connection using ``.close()`` with a timeout, if the operation is proceeding within an async event loop context only. This allows the asyncpg driver to attend to finalizing a ``TimeoutError`` including being able to close a long-running query server side, which otherwise can keep running after the program has exited. .. change:: :tags: bug, orm :tickets: 10732 Modified the ``__init_subclass__()`` method used by :class:`_orm.MappedAsDataclass`, :class:`_orm.DeclarativeBase` and :class:`_orm.DeclarativeBaseNoMeta` to accept arbitrary ``**kw`` and to propagate them to the ``super()`` call, allowing greater flexibility in arranging custom superclasses and mixins which make use of ``__init_subclass__()`` keyword arguments. Pull request courtesy Michael Oliver. .. change:: :tags: bug, tests :tickets: 10747 Improvements to the test suite to further harden its ability to run when Python ``greenlet`` is not installed. There is now a tox target that includes the token "nogreenlet" that will run the suite with greenlet not installed (note that it still temporarily installs greenlet as part of the tox config, however). .. change:: :tags: bug, sql :tickets: 10753 Fixed issue in stringify for SQL elements, where a specific dialect is not passed, where a dialect-specific element such as the PostgreSQL "on conflict do update" construct is encountered and then fails to provide for a stringify dialect with the appropriate state to render the construct, leading to internal errors. .. change:: :tags: bug, sql Fixed issue where stringifying or compiling a :class:`.CTE` that was against a DML construct such as an :func:`_sql.insert` construct would fail to stringify, due to a mis-detection that the statement overall is an INSERT, leading to internal errors. .. change:: :tags: bug, orm :tickets: 10776 Ensured the use case of :class:`.Bundle` objects used in the ``returning()`` portion of ORM-enabled INSERT, UPDATE and DELETE statements is tested and works fully. This was never explicitly implemented or tested previously and did not work correctly in the 1.4 series; in the 2.0 series, ORM UPDATE/DELETE with WHER