gdax-python-api
gdax-python-api copied to clipboard
Update aiohttp to 3.9.3
This PR updates aiohttp from 2.2.0 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:*
8097, 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:*
3957.
----
3.9.2
Bug fixes
---------
- Fixed server-side websocket connection leak.
*Related issues and pull requests on GitHub:*
7978.
- Fixed ``web.FileResponse`` doing blocking I/O in the event loop.
*Related issues and pull requests on GitHub:*
8012.
- Fixed double compress when compression enabled and compressed file exists in server file responses.
*Related issues and pull requests on GitHub:*
8014.
- Added runtime type check for ``ClientSession`` ``timeout`` parameter.
*Related issues and pull requests on GitHub:*
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:*
8074.
- Improved validation of paths for static resources requests to the server -- by :user:`bdraco`.
*Related issues and pull requests on GitHub:*
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:*
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:*
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:*
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:*
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:*
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:*
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:*
8066.
Miscellaneous internal changes
------------------------------
- Replaced all ``tmpdir`` fixtures with ``tmp_path`` in test suite.
*Related issues and pull requests on GitHub:*
3551.
----
3.9.1
Bugfixes
--------
- Fixed importing aiohttp under PyPy on Windows.
(7848)
- Fixed async concurrency safety in websocket compressor.
(7865)
- Fixed ``ClientResponse.close()`` releasing the connection instead of closing.
(7869)
- Fixed a regression where connection may get closed during upgrade. -- by :user:`Dreamsorcerer`
(7879)
- Fixed messages being reported as upgraded without an Upgrade header in Python parser. -- by :user:`Dreamsorcerer`
(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)
- 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)
- 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)
- Added support for setting response header parameters ``max_line_size`` and ``max_field_size``.
(2304)
- Added ``auto_decompress`` parameter to ``ClientSession.request`` to override ``ClientSession._auto_decompress``. -- by :user:`Daste745`
(3751)
- Changed ``raise_for_status`` to allow a coroutine.
(3892)
- Added client brotli compression support (optional with runtime check).
(5219)
- Added ``client_max_size`` to ``BaseRequest.clone()`` to allow overriding the request body size. -- :user:`anesabml`.
(5704)
- Added a middleware type alias ``aiohttp.typedefs.Middleware``.
(5898)
- Exported ``HTTPMove`` which can be used to catch any redirection request
that has a location -- :user:`dreamsorcerer`.
(6594)
- Changed the ``path`` parameter in ``web.run_app()`` to accept a ``pathlib.Path`` object.
(6839)
- Performance: Skipped filtering ``CookieJar`` when the jar is empty or all cookies have expired.
(7819)
- Performance: Only check origin if insecure scheme and there are origins to treat as secure, in ``CookieJar.filter_cookies()``.
(7821)
- Performance: Used timestamp instead of ``datetime`` to achieve faster cookie expiration in ``CookieJar``.
(7824)
- Added support for passing a custom server name parameter to HTTPS connection.
(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)
- Turned access log into no-op when the logger is disabled.
(7240)
- Added typing information to ``RawResponseMessage``. -- by :user:`Gobot1234`
(7365)
- Removed ``async-timeout`` for Python 3.11+ (replaced with ``asyncio.timeout()`` on newer releases).
(7502)
- Added support for ``brotlicffi`` as an alternative to ``brotli`` (fixing Brotli support on PyPy).
(7611)
- Added ``WebSocketResponse.get_extra_info()`` to access a protocol transport's extra info.
(7078)
- Allow ``link`` argument to be set to None/empty in HTTP 451 exception.
(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)
- Fixed client timeout not working when incoming data is always available without waiting. -- by :user:`Dreamsorcerer`.
(5854)
- Fixed ``readuntil`` to work with a delimiter of more than one character.
(6701)
- Added ``__repr__`` to ``EmptyStreamReader`` to avoid ``AttributeError``.
(6916)
- Fixed bug when using ``TCPConnector`` with ``ttl_dns_cache=0``.
(7014)
- Fixed response returned from expect handler being thrown away. -- by :user:`Dreamsorcerer`
(7025)
- Avoided raising ``UnicodeDecodeError`` in multipart and in HTTP headers parsing.
(7044)
- Changed ``sock_read`` timeout to start after writing has finished, avoiding read timeouts caused by an unfinished write. -- by :user:`dtrifiro`
(7149)
- Fixed missing query in tracing method URLs when using ``yarl`` 1.9+.
(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)
- Fixed ``EmptyStreamReader.iter_chunks()`` never ending. -- by :user:`mind1m`
(7616)
- Fixed a rare ``RuntimeError: await wasn't used with future`` exception. -- by :user:`stalkerg`
(7785)
- Fixed issue with insufficient HTTP method and version validation.
(7700)
- Added check to validate that absolute URIs have schemes.
(7712)
- Fixed unhandled exception when Python HTTP parser encounters unpaired Unicode surrogates.
(7715)
- Updated parser to disallow invalid characters in header field names and stop accepting LF as a request line separator.
(7719)
- Fixed Python HTTP parser not treating 204/304/1xx as an empty body.
(7755)
- Ensure empty body response for 1xx/204/304 per RFC 9112 sec 6.3.
(7756)
- Fixed an issue when a client request is closed before completing a chunked payload. -- by :user:`Dreamsorcerer`
(7764)
- Edge Case Handling for ResponseParser for missing reason value.
(7776)
- Fixed ``ClientWebSocketResponse.close_code`` being erroneously set to ``None`` when there are concurrent async tasks receiving data and closing the connection.
(7306)
- Added HTTP method validation.
(6533)
- Fixed arbitrary sequence types being allowed to inject values via version parameter. -- by :user:`Dreamsorcerer`
(7835)
- Performance: Fixed increase in latency with small messages from websocket compression changes.
(7797)
Improved Documentation
----------------------
- Fixed the `ClientResponse.release`'s type in the doc. Changed from `comethod` to `method`.
(5836)
- Added information on behavior of base_url parameter in `ClientSession`.
(6647)
- Fixed `ClientResponseError` docs.
(6700)
- Updated Redis code examples to follow the latest API.
(6907)
- Added a note about possibly needing to update headers when using ``on_response_prepare``. -- by :user:`Dreamsorcerer`
(7283)
- Completed ``trust_env`` parameter description to honor ``wss_proxy``, ``ws_proxy`` or ``no_proxy`` env.
(7325)
- Expanded SSL documentation with more examples (e.g. how to use certifi). -- by :user:`Dreamsorcerer`
(7334)
- Fix, update, and improve client exceptions documentation.
(7733)
Deprecations and Removals
-------------------------
- Added ``shutdown_timeout`` parameter to ``BaseRunner``, while
deprecating ``shutdown_timeout`` parameter from ``BaseSite``. -- by :user:`Dreamsorcerer`
(7718)
- Dropped Python 3.6 support.
(6378)
- Dropped Python 3.7 support. -- by :user:`Dreamsorcerer`
(7336)
- Removed support for abandoned ``tokio`` event loop. -- by :user:`Dreamsorcerer`
(7281)
Misc
----
- Made ``print`` argument in ``run_app()`` optional.
(3690)
- Improved performance of ``ceil_timeout`` in some cases.
(6316)
- Changed importing Gunicorn to happen on-demand, decreasing import time by ~53%. -- :user:`Dreamsorcerer`
(6591)
- Improved import time by replacing ``http.server`` with ``http.HTTPStatus``.
(6903)
- Fixed annotation of ``ssl`` parameter to disallow ``True``. -- by :user:`Dreamsorcerer`.
(7335)
----
3.9.0rc0
Features
--------
- Performance: Skipped filtering ``CookieJar`` when the jar is empty or all cookies have expired.
(7819)
- Performance: Only check origin if insecure scheme and there are origins to treat as secure, in ``CookieJar.filter_cookies()``.
(7821)
- Performance: Used timestamp instead of ``datetime`` to achieve faster cookie expiration in ``CookieJar``.
(7824)
Bugfixes
--------
- Fixed an issue where the client could go into an infinite loop. -- by :user:`Dreamsorcerer`
(7815)
- Added HTTP method validation.
(6533)
- Fixed arbitrary sequence types being allowed to inject values via version parameter. -- by :user:`Dreamsorcerer`
(7835)
- Performance: Fixed increase in latency with small messages from websocket compression changes.
(7797)
----
3.9.0b1
Features
--------
- Added ``WebSocketResponse.get_extra_info()`` to access a protocol transport's extra info.
(7078)
- Allow ``link`` argument to be set to None/empty in HTTP 451 exception.
(7689)
- Added ``shutdown_timeout`` parameter to ``BaseRunner``, while
deprecating ``shutdown_timeout`` parameter from ``BaseSite``. -- by :user:`Dreamsorcerer`
(7718)
Bugfixes
--------
- Fixed keep-alive connections stopping a graceful shutdown. -- by :user:`Dreamsorcerer`
(7718)
- Fixed ``ClientWebSocketResponse.close_code`` being erroneously set to ``None`` when there are concurrent async tasks receiving data and closing the connection.
(7306)
- Changed ``AppKey`` warning to ``web.NotAppKeyWarning`` and stop it being displayed by default. -- by :user:`Dreamsorcerer`
(7677)
- Fix issue with insufficient HTTP method and version validation.
(7700)
- Add check to validate that absolute URIs have schemes.
(7712)
- Fix unhandled exception when Python HTTP parser encounters unpaired Unicode surrogates.
(7715)
- Update parser to disallow invalid characters in header field names and stop accepting LF as a request line separator.
(7719)
- Fix py http parser not treating 204/304/1xx as an empty body
(7755)
- Ensure empty body response for 1xx/204/304 per RFC 9112 sec 6.3
(7756)
- Fixed an issue when a client request is closed before completing a chunked payload -- by :user:`Dreamsorcerer`
(7764)
- Edge Case Handling for ResponseParser for missing reason value
(7776)
- Fixed a rare `RuntimeError: await wasn't used with future` exception -- by :user:`stalkerg`
(7785)
Improved Documentation
----------------------
- Fix, update, and improve client exceptions documentation.
(7733)
----
3.9.0b0
Features
--------
- Introduced ``AppKey`` for static typing support of ``Application`` storage.
See https://docs.aiohttp.org/en/stable/web_advanced.html#application-s-config
(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)
- 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)
- Added support for setting response header parameters ``max_line_size`` and ``max_field_size``.
(2304)
- Added ``auto_decompress`` parameter to ``ClientSession.request`` to override ``ClientSession._auto_decompress``. -- by :user:`Daste745`
(3751)
- Changed ``raise_for_status`` to allow a coroutine.
(3892)
- Added client brotli compression support (optional with runtime check).
(5219)
- Added ``client_max_size`` to ``BaseRequest.clone()`` to allow overriding the request body size -- :user:`anesabml`.
(5704)
- Added a middleware type alias ``aiohttp.typedefs.Middleware``.
(5898)
- Exported ``HTTPMove`` which can be used to catch any redirection request
that has a location -- :user:`dreamsorcerer`.
(6594)
- Changed the ``path`` parameter in ``web.run_app()`` to accept a ``pathlib.Path`` object.
(6839)
- Added support for passing a custom server name parameter to HTTPS connection.
(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)
- Turned access log into no-op when the logger is disabled.
(7240)
- Added typing information to ``RawResponseMessage`` -- by :user:`Gobot1234`
(7365)
- Removed ``async-timeout`` for Python 3.11+ (replaced with ``asyncio.timeout()`` on newer releases).
(7502)
- Added support for ``brotlicffi`` as an alternative to ``brotli`` (fixing Brotli support on PyPy).
(7611)
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)
- Fixed client timeout not working when incoming data is always available without waiting -- by :user:`Dreamsorcerer`.
(5854)
- Fixed ``readuntil`` to work with a delimiter of more than one character
(6701)
- Added ``__repr__`` to ``EmptyStreamReader`` to avoid ``AttributeError``.
(6916)
- Fixed bug when using ``TCPConnector`` with ``ttl_dns_cache=0``.
(7014)
- Fixed response returned from expect handler being thrown away. -- by :user:`Dreamsorcerer`
(7025)
- Avoided raising ``UnicodeDecodeError`` in multipart and in HTTP headers parsing.
(7044)
- Changed ``sock_read`` timeout to start after writing has finished, avoiding read timeouts caused by an unfinished write. -- by :user:`dtrifiro`
(7149)
- Fixed missing query in tracing method URLs when using ``yarl`` 1.9+.
(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)
- Fixed ``EmptyStreamReader.iter_chunks()`` never ending. -- by :user:`mind1m`
(7616)
Improved Documentation
----------------------
- Fixed the `ClientResponse.release`'s type in the doc. Changed from `comethod` to `method`.
(5836)
- Added information on behavior of base_url parameter in `ClientSession`.
(6647)
- Fixed `ClientResponseError` docs.
(6700)
- Updated Redis code examples to follow the latest API.
(6907)
- Added a note about possibly needing to update headers when using ``on_response_prepare``. -- by :user:`Dreamsorcerer`
(7283)
- Completed ``trust_env`` parameter description to honor ``wss_proxy``, ``ws_proxy`` or ``no_proxy`` env.
(7325)
- Expanded SSL documentation with more examples (e.g. how to use certifi). -- by :user:`Dreamsorcerer`
(7334)
Deprecations and Removals
-------------------------
- Dropped Python 3.6 support.
(6378)
- Dropped Python 3.7 support. -- by :user:`Dreamsorcerer`
(7336)
- Removed support for abandoned ``tokio`` event loop. -- by :user:`Dreamsorcerer`
(7281)
Misc
----
- Made ``print`` argument in ``run_app()`` optional.
(3690)
- Improved performance of ``ceil_timeout`` in some cases.
(6316)
- Changed importing Gunicorn to happen on-demand, decreasing import time by ~53%. -- :user:`Dreamsorcerer`
(6591)
- Improved import time by replacing ``http.server`` with ``http.HTTPStatus``.
(6903)
- Fixed annotation of ``ssl`` parameter to disallow ``True``. -- by :user:`Dreamsorcerer`
(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)
- 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)
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)
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)
Bugfixes
--------
- Fixed ``PermissionError`` when ``.netrc`` is unreadable due to permissions.
(7237)
- Fixed output of parsing errors pointing to a ``\n``. -- by :user:`Dreamsorcerer`
(7468)
- Fixed ``GunicornWebWorker`` max_requests_jitter not working.
(7518)
- Fixed sorting in ``filter_cookies`` to use cookie with longest path. -- by :user:`marq24`.
(7577)
- Fixed display of ``BadStatusLine`` messages from llhttp_. -- by :user:`Dreamsorcerer`
(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)
Features
--------
- Added information to C parser exceptions to show which character caused the error. -- by :user:`Dreamsorcerer`
(7366)
Bugfixes
--------
- Fixed a transport is :data:`None` error -- by :user:`Dreamsorcerer`.
(3355)
----
3.8.4
Bugfixes
--------
- Fixed incorrectly overwriting cookies with the same name and domain, but different path.
(6638)
- Fixed ``ConnectionResetError`` not being raised after client disconnection in SSL environments.
(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)
----
3.8.2
.. note::
This release has some compatibility fixes for Python 3.11 but it may
still have some quirks. Some tests are still flaky in the CI.
.. 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
--------
- Added support for registering :rfc:`OPTIONS <9110OPTIONS>`
HTTP method handlers via :py:class:`~aiohttp.web.RouteTableDef`.
(4663)
- Started supporting :rfc:`authority-form <9112authority-form>` and
:rfc:`absolute-form <9112absolute-form>` URLs on the server-side.
(6227)
- Fixed Python 3.11 incompatibilities by using Cython 0.29.25.
(6396)
- Extended the ``sock`` argument typing declaration of the
:py:func:`~aiohttp.web.run_app` function as optionally
accepting iterables.
(6401)
- Fixed a regression where :py:exc:`~asyncio.CancelledError`
occurs on client disconnection.
(6719)
- Started exporting :py:class:`~aiohttp.web.PrefixedSubAppResource`
under :py:mod:`aiohttp.web` -- by :user:`Dreamsorcerer`.
This fixes a regression introduced by :pr:`3469`.
(6889)
- Dropped the :class:`object` type possibility from
the :py:attr:`aiohttp.ClientSession.timeout`
property return type declaration.
(6917),
(6923)
Improved Documentation
----------------------
- Added clarification on configuring the app object with
settings such as a database connection.
(4137)
- Extended the ``sock`` argument typing declaration of the
:py:func:`~aiohttp.web.run_app` function as optionally
accepting iterables.
(6401)
- Dropped the :class:`object` type possibility from
the :py:attr:`aiohttp.ClientSession.timeout`
property return type declaration.
(6917),
(6923)
Deprecations and Removals
-------------------------
- Dropped Python 3.5 support, :doc:`aiohttp <index>` only works
under Python 3.6 and higher from now on.
(4046)
Misc
----
- Removed a deprecated usage of :py:func:`pytest.warns(None)
<pytest.warns>` in tests.
(6663)
- (6369), (6399), (6550), (6708), (6757), (6857), (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 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)
- Do not install "examples" as a top-level package.
(6189)
- Restored ability to connect IPv6-only host.
(6195)
- Remove ``Signal`` from ``__all__``, replace ``aiohttp.Signal`` with ``aiosignal.Signal`` in docs
(6201)
- Made chunked encoding HTTP header check stricter.
(6305)
Improved Documentation
----------------------
- update quick starter demo codes.
(6240)
- Added an explanation of how tiny timeouts affect performance to the client reference document.
(6274)
- Add flake8-docstrings to flake8 configuration, enable subset of checks.
(6276)
- Added information on running complex applications with additional tasks/processes -- :user:`Dreamsorcerer`.
(6278)
Misc
----
- (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)_
- Switch from ``http-parser`` to ``llhttp``
(3561)_
- Use Brotli instead of brotlipy
(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)_
- Make access log use local time with timezone
(3853)_
- Implemented ``readuntil`` in ``StreamResponse``
(4054)_
- FileResponse now supports ETag.
(4594)_
- Add a request handler type alias ``aiohttp.typedefs.Handler``.
(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)_
- Add validation of HTTP header keys and values to prevent header injection.
(4818)_
- Add predicate to ``AbstractCookieJar.clear``.
Add ``AbstractCookieJar.clear_domain`` to clean all domain and subdomains cookies only.
(4942)_
- Add keepalive_timeout parameter to web.run_app.
(5094)_
- Tracing for client sent headers
(5105)_
- Make type hints for http parser stricter
(5267)_
- Add final declarations for constants.
(5275)_
- Switch to external frozenlist and aiosignal libraries.
(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)_
- 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)_
- Add ``aiohttp.pytest_plugin.AiohttpClient`` for static typing of pytest plugin.
(5585)_
- Added a ``socket_factory`` argument to ``BaseTestServer``.
(5844)_
- Add compression strategy parameter to enable_compression method.
(5909)_
- Added support for Python 3.10 to Github Actions CI/CD workflows and fix the related deprecation warnings -- :user:`Hanaasagi`.
(5927)_
- Switched ``chardet`` to ``charset-normalizer`` for guessing the HTTP payload body encoding -- :user:`Ousret`.
(5930)_
- Added optional auto_decompress argument for HttpRequestParser
(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)_
- Added ``base_url`` parameter to the initializer of :class:`~aiohttp.ClientSession`.
(6013)_
- Add Trove classifier and create binary wheels for 3.10. -- :user:`hugovk`.
(6079)_
- Started shipping platform-specific wheels with the ``musl`` tag targeting typical Alpine Linux runtimes — :user:`asvetlov`.
(6139)_
- Started shipping platform-specific arm64 wheels for Apple Silicon — :user:`asvetlov`.
(6139)_
Bugfixes
--------
- Modify _drain_helper() to handle concurrent `await resp.write(...)` or `ws.send_json(...)` calls without race-condition.
(2934)_
- Started using `MultiLoopChildWatcher` when it's available under POSIX while setting up the test I/O loop.
(3450)_
- Only encode content-disposition filename parameter using percent-encoding.
Other parameters are encoded to quoted-string or RFC2231 extended parameter
value.
(4012)_
- Fixed HTTP client requests to honor ``no_proxy`` environment variables.
(4431)_
- Fix supporting WebSockets proxies configured via environment variables.
(4648)_
- Change return type on URLDispatcher to UrlMappingMatchInfo to improve type annotations.
(4748)_
- Ensure a cleanup context is cleaned up even when an exception occurs during startup.
(4799)_
- Added a new exception type for Unix socket client errors which provides a more useful error message.
(4984)_
- Remove Transfer-Encoding and Content-Type headers for 204 in StreamResponse
(5106)_
- Only depend on typing_extensions for Python <3.8
(5107)_
- Add ABNORMAL_CLOSURE and BAD_GATEWAY to WSCloseCode
(5192)_
- Fix cookies disappearing from HTTPExceptions.
(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)_
- Acquire the connection before running traces to prevent race condition.
(5259)_
- Add missing slots to _RequestContextManager`` and ``_WSRequestContextManager``
(5329)_
- Ensure sending a zero byte file does not throw an exception (round 2)
(5380)_
- Set "text/plain" when data is an empty string in client requests.
(5392)_
- Stop automatically releasing the ``ClientResponse`` object on calls to the ``ok`` property for the failed requests.
(5403)_
- Include query parameters from `params` keyword argument in tracing `URL`.
(5432)_
- Fix annotations
(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)_
- Fix 0 being incorrectly treated as an immediate timeout.
(5527)_
- Fixes failing tests when an environment variable <scheme>_proxy is set.
(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)_
- 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)_
- Remove incorrect default from docs
(5727)_
- Remove external test dependency to http://httpbin.org
(5840)_
- Don't cancel current task when entering a cancelled timer.
(5853)_
- Added ``params`` keyword argument to ``ClientSession.ws_connect``. -- :user:`hoh`.
(5868)_
- Uses :py:class:`~asyncio.ThreadedChildWatcher` under POSIX to allow setting up test loop in non-main thread.
(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)_
- Removed the deprecated ``loop`` argument from the ``asyncio.sleep``/``gather`` calls
(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)_
- Fix resetting `SIGCHLD` signals in Gunicorn aiohttp Worker to fix `subprocesses` that capture output having an incorrect `returncode`.
(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)_
Improved Documentation
----------------------
- Refactored OpenAPI/Swagger aiohttp addons, added ``aio-openapi``
(5326)_
- Fixed docs on request cookies type, so it matches what is actually used in the code (a
read-only dictionary-like object).
(5725)_
- Documented that the HTTP client ``Authorization`` header is removed
on redirects to a different host or protocol.
(5850)_
Misc
----
- (3927)_, (4247)_, (4247)_, (5389)_, (5457)_, (5486)_, (5494)_, (5515)_, (5625)_, (5635)_, (5648)_, (5657)_, (5890)_, (5914)_, (5932)_, (6002)_, (6045)_, (6131)_, (6156)_, (6165)_, (6166)_
----
3.8.0b0
Features
--------
- Added a ``GunicornWebWorker`` feature for extending the aiohttp server configuration by allowing the 'wsgi' coroutine to return ``web.AppRunner`` object.
(2988)_
- Switch from ``http-parser`` to ``llhttp``
(3561)_
- Use Brotli instead of brotlipy
(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)_
- Make access log use local time with timezone
(3853)_
- Implemented ``readuntil`` in ``StreamResponse``
(4054)_
- FileResponse now supports ETag.
(4594)_
- Add a request handler type alias ``aiohttp.typedefs.Handler``.
(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)_
- Add validation of HTTP header keys and values to prevent header injection.
(4818)_
- Add predicate to ``AbstractCookieJar.clear``.
Add ``AbstractCookieJar.clear_domain`` to clean all domain and subdomains cookies only.
(4942)_
- Add keepalive_timeout parameter to web.run_app.
(5094)_
- Tracing for client sent headers
(5105)_
- Make type hints for http parser stricter
(5267)_
- Add final declarations for constants.
(5275)_
- Switch to external frozenlist and aiosignal libraries.
(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)_
- 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)_
- Add ``aiohttp.pytest_plugin.AiohttpClient`` for static typing of pytest plugin.
(5585)_
- Added a ``socket_factory`` argument to ``BaseTestServer``.
(5844)_
- Add compression strategy parameter to enable_compression method.
(5909)_
- Added support for Python 3.10 to Github Actions CI/CD workflows and fix the related deprecation warnings -- :user:`Hanaasagi`.
(5927)_
- Switched ``chardet`` to ``charset-normalizer`` for guessing the HTTP payload body encoding -- :user:`Ousret`.
(5930)_
- Added optional auto_decompress argument for HttpRequestParser
(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)_
- Added ``base_url`` parameter to the initializer of :class:`~aiohttp.ClientSession`.
(6013)_
- Add Trove classifier and create binary wheels for 3.10. -- :user:`hugovk`.
(6079)_
- Started shipping platform-specific wheels with the ``musl`` tag targeting typical Alpine Linux runtimes — :user:`asvetlov`.
(6139)_
- Started shipping platform-specific arm64 wheels for Apple Silicon — :user:`asvetlov`.
(6139)_
Bugfixes
--------
- Modify _drain_helper() to handle concurrent `await resp.write(...)` or `ws.send_json(...)` calls without race-condition.
(2934)_
- Started using `MultiLoopChildWatcher` when it's available under POSIX while setting up the test I/O loop.
(3450)_
- Only encode content-disposition filename parameter using percent-encoding.
Other parameters are encoded to quoted-string or RFC2231 extended parameter
value.
(4012)_
- Fixed HTTP client requests to honor ``no_proxy`` environment variables.
(4431)_
- Change return type on URLDispatcher to UrlMappingMatchInfo to improve type annotations.
(4748)_
- Ensure a cleanup context is cleaned up even when an exception occurs during startup.
(4799)_
- Added a new exception type for Unix socket client errors which provides a more useful error message.
(4984)_
- Remove Transfer-Encoding and Content-Type headers for 204 in StreamResponse
(5106)_
- Only depend on typing_extensions for Python <3.8
(5107)_
- Add ABNORMAL_CLOSURE and BAD_GATEWAY to WSCloseCode
(5192)_
- Fix cookies disappearing from HTTPExceptions.
(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)_
- Acquire the connection before running traces to prevent race condition.
(5259)_
- Add missing slots to _RequestContextManager`` and ``_WSRequestContextManager``
(5329)_
- Ensure sending a zero byte file does not throw an exception (round 2)
(5380)_
- Set "text/plain" when data is an empty string in client requests.
(5392)_
- Stop automatically releasing the ``ClientResponse`` object on calls to the ``ok`` property for the failed requests.
(5403)_
- Include query parameters from `params` keyword argument in tracing `URL`.
(5432)_
- Fix annotations
(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)_
- Fix 0 being incorrectly treated as an immediate timeout.
(5527)_
- 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)_
- 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)_
- Remove incorrect default from docs
(5727)_
- Remove external test dependency to http://httpbin.org
(5840)_
- Don't cancel current task when entering a cancelled timer.
(5853)_
- Added ``params`` keyword argument to ``ClientSession.ws_connect``. -- :user:`hoh`.
(5868)_
- Uses :py:class:`~asyncio.ThreadedChildWatcher` under POSIX to allow setting up test loop in non-main thread.
(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)_
- Removed the deprecated ``loop`` argument from the ``asyncio.sleep``/``gather`` calls
(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)_
- Fix resetting `SIGCHLD` signals in Gunicorn aiohttp Worker to fix `subprocesses` that capture output having an incorrect `returncode`.
(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)_
Improved Documentation
----------------------
- Refactored OpenAPI/Swagger aiohttp addons, added ``aio-openapi``
(5326)_
- Fixed docs on request cookies type, so it matches what is actually used in the code (a
read-only dictionary-like object).
(5725)_
- Documented that the HTTP client ``Authorization`` header is removed
on redirects to a different host or protocol.
(5850)_
Misc
----
- (3927)_, (4247)_, (4247)_, (5389)_, (5457)_, (5486)_, (5494)_, (5515)_, (5625)_, (5635)_, (5648)_, (5657)_, (5890)_, (5914)_, (5932)_, (6002)_, (6045)_, (6131)_, (6156)_, (6165)_, (6166)_
----
3.8.0a7
Features
--------
- Added a ``GunicornWebWorker`` feature for extending the aiohttp server configuration by allowing the 'wsgi' coroutine to return ``web.AppRunner`` object.
(2988)_
- Switch from ``http-parser`` to ``llhttp``
(3561)_
- Use Brotli instead of brotlipy
(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)_
- Make access log use local time with timezone
(3853)_
- Implemented ``readuntil`` in ``StreamResponse``
(4054)_
- FileResponse now supports ETag.
(4594)_
- Add a request handler type alias ``aiohttp.typedefs.Handler``.
(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)_
- Add validation of HTTP header keys and values to prevent header injection.
(4818)_
- Add predicate to ``AbstractCookieJar.clear``.
Add ``AbstractCookieJar.clear_domain`` to clean all domain and subdomains cookies only.
(4942)_
- Add keepalive_timeout parameter to web.run_app.
(5094)_
- Tracing for client sent headers
(5105)_
- Make type hints for http parser stricter
(5267)_
- Add final declarations for constants.
(5275)_
- Switch to external frozenlist and aiosignal libraries.
(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)_
- 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)_
- Add ``aiohttp.pytest_plugin.AiohttpClient`` for static typing of pytest plugin.
(5585)_
- Added a ``socket_factory`` argument to ``BaseTestServer``.
(5844)_
- Add compression strategy parameter to enable_compression method.
(5909)_
- Added support for Python 3.10 to Github Actions CI/CD workflows and fix the related deprecation warnings -- :user:`Hanaasagi`.
(5927)_
- Switched ``chardet`` to ``charset-normalizer`` for guessing the HTTP payload body encoding -- :user:`Ousret`.
(5930)_
- Added optional auto_decompress argument for HttpRequestParser
(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)_
- Add Trove classifier and create binary wheels for 3.10. -- :user:`hugovk`.
(6079)_
- Started shipping platform-specific wheels with the ``musl`` tag targeting typical Alpine Linux runtimes — :user:`asvetlov`.
(6139)_
- Started shipping platform-specific arm64 wheels for Apple Silicon — :user:`asvetlov`.
(6139)_
Bugfixes
--------
- Modify _drain_helper() to handle concurrent `await resp.write(...)` or `ws.send_json(...)` calls without race-condition.
(2934)_
- Started using `MultiLoopChildWatcher` when it's available under POSIX while setting up the test I/O loop.
(3450)_
- Only encode content-disposition filename parameter using percent-encoding.
Other parameters are encoded to quoted-string or RFC2231 extended parameter
value.
(4012)_
- Fixed HTTP client requests to honor ``no_proxy`` environment variables.
(4431)_
- Change return type on URLDispatcher to UrlMappingMatchInfo to improve type annotations.
(4748)_
- Ensure a cleanup context is cleaned up even when an exception occurs during startup.
(4799)_
- Added a new exception type for Unix socket client errors which provides a more useful error message.
(4984)_
- Remove Transfer-Encoding and Content-Type headers for 204 in StreamResponse
(5106)_
- Only depend on typing_extensions for Python <3.8
(5107)_
- Add ABNORMAL_CLOSURE and BAD_GATEWAY to WSCloseCode
(5192)_
- Fix cookies disappearing from HTTPExceptions.
(5233)_
- Acquire the connection before running traces to prevent race condition.
(5259)_
- Add missing slots to _RequestContextManager`` and ``_WSRequestContextManager``
(5329)_
- Ensure sending a zero byte file does not throw an exception (round 2)
(5380)_
- Set "text/plain" when data is an empty string in client requests.
(5392)_
- Stop automatically releasing the ``ClientResponse`` object on calls to the ``ok`` property for the failed requests.
(5403)_
- Include query parameters from `params` keyword argument in tracing `URL`.
(5432)_
- Fix annotations
(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)_
- Fix 0 being incorrectly treated as an immediate timeout.
(5527)_
- 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)_
- 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)_
- Remove incorrect default from docs
(5727)_
- Remove external test dependency to http://httpbin.org
(5840)_
- Don't cancel current task when entering a cancelled timer.
(5853)_
- Added ``params`` keyword argument to ``ClientSession.ws_connect``. -- :user:`hoh`.
(5868)_
- Uses :py:class:`~asyncio.ThreadedChildWatcher` under POSIX to allow setting up test loop in non-main thread.
(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)_
- Removed the deprecated ``loop`` argument from the ``asyncio.sleep``/``gather`` calls
(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)_
- Fix resetting `SIGCHLD` signals in Gunicorn aiohttp Worker to fix `subprocesses` that capture output having an incorrect `returncode`.
(6130)_
Improved Documentation
----------------------
- Refactored OpenAPI/Swagger aiohttp addons, added ``aio-openapi``
(5326)_
- Fixed docs on request cookies type, so it matches what is actually used in the code (a
read-only dictionary-like object).
(5725)_
- Documented that the HTTP client ``Authorization`` header is removed
on redirects to a different host or protocol.
(5850)_
Misc
----
- (3927)_, (4247)_, (4247)_, (5389)_, (5457)_, (5486)_, (5494)_, (5515)_, (5625)_, (5635)_, (5648)_, (5657)_, (5890)_, (5914)_, (5932)_, (6002)_, (6045)_, (6131)_, (6156)_, (6165)_, (6166)_
----
3.7.4.post0
========================
Misc
----
- Bumped upper bound of the ``chardet`` runtime dependency
to allow their v4.0 version stream.
(5366)_
----
3.7.3
Features
--------
- Use Brotli instead of brotlipy
`3803 <https://github.com/aio-libs/aiohttp/issues/3803>`_
- Made exceptions pickleable. Also changed the repr of some exceptions.
`4077 <https://github.com/aio-libs/aiohttp/issues/4077>`_
Bugfixes
--------
- Raise a ClientResponseError instead of an AssertionError for a blank
HTTP Reason Phrase.
`3532 <https://github.com/aio-libs/aiohttp/issues/3532>`_
- Fix ``web_middlewares.normalize_path_middleware`` behavior for patch without slash.
`3669 <https://github.com/aio-libs/aiohttp/issues/3669>`_
- Fix overshadowing of overlapped sub-applications prefixes.
`3701 <https://github.com/aio-libs/aiohttp/issues/3701>`_
- Make `BaseConnector.close()` a coroutine and wait until the client closes all connections. Drop deprecated "with Connector():" syntax.
`3736 <https://github.com/aio-libs/aiohttp/issues/3736>`_
- Reset the ``sock_read`` timeout each time data is received for a ``aiohttp.client`` response.
`3808 <https://github.com/aio-libs/aiohttp/issues/3808>`_
- Fixed type annotation for add_view method of UrlDispatcher to accept any subclass of View
`3880 <https://github.com/aio-libs/aiohttp/issues/3880>`_
- Fixed querying the address families from DNS that the current host supports.
`5156 <https://github.com/aio-libs/aiohttp/issues/5156>`_
- Change return type of MultipartReader.__aiter__() and BodyPartReader.__aiter__() to AsyncIterator.
`5163 <https://github.com/aio-libs/aiohttp/issues/5163>`_
- Provide x86 Windows wheels.
`5230 <https://github.com/aio-libs/aiohttp/issues/5230>`_
Improved Documentation
----------------------
- Add documentation for ``aiohttp.web.FileResponse``.
`3958 <https://github.com/aio-libs/aiohttp/issues/3958>`_
- Removed deprecation warning in tracing example docs
`3964 <https://github.com/aio-libs/aiohttp/issues/3964>`_
- Fixed wrong "Usage" docstring of ``aiohttp.client.request``.
`4603 <https://github.com/aio-libs/aiohttp/issues/4603>`_
- Add aiohttp-pydantic to third party libraries
`5228 <https://github.com/aio-libs/aiohttp/issues/5228>`_
Misc
----
- `4102 <https://github.com/aio-libs/aiohttp/issues/4102>`_
3.7.2
Bugfixes
--------
- Fixed static files handling for loops without ``.sendfile()`` support
`5149 <https://github.com/aio-libs/aiohttp/issues/5149>`_
3.7.1
Bugfixes
--------
- Fixed a type error caused by the conditional import of `Protocol`.
`5111 <https://github.com/aio-libs/aiohttp/issues/5111>`_
- Server doesn't send Content-Length for 1xx or 204
`4901 <https://github.com/aio-libs/aiohttp/issues/4901>`_
- Fix run_app typing
`4957 <https://github.com/aio-libs/aiohttp/issues/4957>`_
- Always require ``typing_extensions`` library.
`5107 <https://github.com/aio-libs/aiohttp/issues/5107>`_
- Fix a variable-shadowing bug causing `ThreadedResolver.resolve` to
return the resolved IP as the ``hostname`` in each record, which prevented
validation of HTTPS connections.
`5110 <https://github.com/aio-libs/aiohttp/issues/5110>`_
- Added annotations to all public attributes.
`5115 <https://github.com/aio-libs/aiohttp/issues/5115>`_
- Fix flaky test_when_timeout_smaller_second
`5116 <https://github.com/aio-libs/aiohttp/issues/5116>`_
- Ensure sending a zero byte file does not throw an exception
`5124 <https://github.com/aio-libs/aiohttp/issues/5124>`_
- Fix a bug in ``web.run_app()`` about Python version checking on Windows
`5127 <https://github.com/aio-libs/aiohttp/issues/5127>`_
3.7.0
Features
--------
- Response headers are now prepared prior to running ``on_response_prepare`` hooks, directly before headers are sent to the client.
`1958 <https://github.com/aio-libs/aiohttp/issues/1958>`_
- Add a ``quote_cookie`` option to ``CookieJar``, a way to skip quotation wrapping of cookies containing special characters.
`2571 <https://github.com/aio-libs/aiohttp/issues/2571>`_
- Call ``AccessLogger.log`` with the current exception available from ``sys.exc_info()``.
`3557 <https://github.com/aio-libs/aiohttp/issues/3557>`_
- `web.UrlDispatcher.add_routes` and `web.Application.add_routes` return a list
of registered `AbstractRoute` instances. `AbstractRouteDef.register` (and all
subclasses) return a list of registered resources registered resource.
`3866 <https://github.com/aio-libs/aiohttp/issues/3866>`_
- Added properties of default ClientSession params to ClientSession class so it is available for introspection
`3882 <https://github.com/aio-libs/aiohttp/issues/3882>`_
- Don't cancel web handler on peer disconnection, raise `OSError` on reading/writing instead.
`4080 <https://github.com/aio-libs/aiohttp/issues/4080>`_
- Implement BaseRequest.get_extra_info() to access a protocol transports' extra info.
`4189 <https://github.com/aio-libs/aiohttp/issues/4189>`_
- Added `ClientSession.timeout` property.
`4191 <https://github.com/aio-libs/aiohttp/issues/4191>`_
- allow use of SameSite in cookies.
`4224 <https://github.com/aio-libs/aiohttp/issues/4224>`_
- Use ``loop.sendfile()`` instead of custom implementation if available.
`4269 <https://github.com/aio-libs/aiohttp/issues/4269>`_
- Apply SO_REUSEADDR to test server's socket.
`4393 <https://github.com/aio-libs/aiohttp/issues/4393>`_
- Use .raw_host instead of slower .host in client API
`4402 <https://github.com/aio-libs/aiohttp/issues/4402>`_
- Allow configuring the buffer size of input stream by passing ``read_bufsize`` argument.
`4453 <https://github.com/aio-libs/aiohttp/issues/4453>`_
- Pass tests on Python 3.8 for Windows.
`4513 <https://github.com/aio-libs/aiohttp/issues/4513>`_
- Add `method` and `url` attributes to `TraceRequestChunkSentParams` and `TraceResponseChunkReceivedParams`.
`4674 <https://github.com/aio-libs/aiohttp/issues/4674>`_
- Add ClientResponse.ok property for checking status code under 400.
`4711 <https://github.com/aio-libs/aiohttp/issues/4711>`_
- Don't ceil timeouts that are smaller than 5 seconds.
`4850 <https://github.com/aio-libs/aiohttp/issues/4850>`_
- TCPSite now listens by default on all interfaces instead of just IPv4 when `None` is passed in as the host.
`4894 <https://github.com/aio-libs/aiohttp/issues/4894>`_
- Bump ``http_parser`` to 2.9.4
`5070 <https://github.com/aio-libs/aiohttp/issues/5070>`_
Bugfixes
--------
- Fix keepalive connections not being closed in time
`3296 <https://github.com/aio-libs/aiohttp/issues/3296>`_
- Fix failed websocket handshake leaving connection hanging.
`3380 <https://github.com/aio-libs/aiohttp/issues/3380>`_
- Fix tasks cancellation order on exit. The run_app task needs to be cancelled first for cleanup hooks to run with all tasks intact.
`3805 <https://github.com/aio-libs/aiohttp/issues/3805>`_
- Don't start heartbeat until _writer is set
`4062 <https://github.com/aio-libs/aiohttp/issues/4062>`_
- Fix handling of multipart file uploads without a content type.
`4089 <https://github.com/aio-libs/aiohttp/issues/4089>`_
- Preserve view handler function attributes across middlewares
`4174 <https://github.com/aio-libs/aiohttp/issues/4174>`_
- Fix the string representation of ``ServerDisconnectedError``.
`4175 <https://github.com/aio-libs/aiohttp/issues/4175>`_
- Raising RuntimeError when trying to get encoding from not read body
`4214 <https://github.com/aio-libs/aiohttp/issues/4214>`_
- Remove warning messages from noop.
`4282 <https://github.com/aio-libs/aiohttp/issues/4282>`_
- Raise ClientPayloadError if FormData re-processed.
`4345 <https://github.com/aio-libs/aiohttp/issues/4345>`_
- Fix a warning about unfinished task in ``web_protocol.py``
`4408 <https://github.com/aio-libs/aiohttp/issues/4408>`_
- Fixed 'deflate' compression. According to RFC 2616 now.
`4506 <https://github.com/aio-libs/aiohttp/issues/4506>`_
- Fixed OverflowError on platforms with 32-bit time_t
`4515 <https://github.com/aio-libs/aiohttp/issues/4515>`_
- Fixed request.body_exists returns wrong value for methods without body.
`4528 <https://github.com/aio-libs/aiohttp/issues/4528>`_
- Fix connecting to link-local IPv6 addresses.
`4554 <https://github.com/aio-libs/aiohttp/issues/4554>`_
- Fix a problem with connection waiters that are never awaited.
`4562 <https://github.com/aio-libs/aiohttp/issues/4562>`_
- Always make sure transport is not closing before reuse a connection.
Reuse a protocol based on keepalive in headers is unreliable.
For example, uWSGI will not support keepalive even it serves a
HTTP 1.1 request, except explicitly configure uWSGI with a
``--http-keepalive`` option.
Servers designed like uWSGI could cause aiohttp intermittently
raise a ConnectionResetException when the protocol poll runs
out and some protocol is reused.
`4587 <https://github.com/aio-libs/aiohttp/issues/4587>`_
- Handle the last CRLF correctly even if it is received via separate TCP segment.
`4630 <https://github.com/aio-libs/aiohttp/issues/4630>`_
- Fix the register_resource function to validate route name before splitting it so that route name can include python keywords.
`4691 <https://github.com/aio-libs/aiohttp/issues/4691>`_
- Improve typing annotations for ``web.Request``, ``aiohttp.ClientResponse`` and
``multipart`` module.
`4736 <https://github.com/aio-libs/aiohttp/issues/4736>`_
- Fix resolver task is not awaited when connector is cancelled
`4795 <https://github.com/aio-libs/aiohttp/issues/4795>`_
- Fix a bug "Aiohttp doesn't return any error on invalid request methods"
`4798 <https://github.com/aio-libs/aiohttp/issues/4798>`_
- Fix HEAD requests for static content.
`4809 <https://github.com/aio-libs/aiohttp/issues/4809>`_
- Fix incorrect size calculation for memoryview
`4890 <https://github.com/aio-libs/aiohttp/issues/4890>`_
- Add HTTPMove to _all__.
`4897 <https://github.com/aio-libs/aiohttp/issues/4897>`_
- Fixed the type annotations in the ``tracing`` module.
`4912 <https://github.com/aio-libs/aiohttp/issues/4912>`_
- Fix typing for multipart ``__aiter__``.
`4931 <https://github.com/aio-libs/aiohttp/issues/4931>`_
- Fix for race condition on connections in BaseConnector that leads to exceeding the connection limit.
`4936 <https://github.com/aio-libs/aiohttp/issues/4936>`_
- Add forced UTF-8 encoding for ``application/rdap+json`` responses.
`4938 <https://github.com/aio-libs/aiohttp/issues/4938>`_
- Fix inconsistency between Python and C http request parsers in parsing pct-encoded URL.
`4972 <https://github.com/aio-libs/aiohttp/issues/4972>`_
- Fix connection closing issue in HEAD request.
`5012 <https://github.com/aio-libs/aiohttp/issues/5012>`_
- Fix type hint on BaseRunner.addresses (from ``List[str]`` to ``List[Any]``)
`5086 <https://github.com/aio-libs/aiohttp/issues/5086>`_
- Make `web.run_app()` more responsive to Ctrl+C on Windows for Python < 3.8. It slightly
increases CPU load as a side effect.
`5098 <https://github.com/aio-libs/aiohttp/issues/5098>`_
Improved Documentation
----------------------
- Fix example code in client quick-start
`3376 <https://github.com/aio-libs/aiohttp/issues/3376>`_
- Updated the docs so there is no contradiction in ``ttl_dns_cache`` default value
`3512 <https://github.com/aio-libs/aiohttp/issues/3512>`_
- Add 'Deploy with SSL' to docs.
`4201 <https://github.com/aio-libs/aiohttp/issues/4201>`_
- Change typing of the secure argument on StreamResponse.set_cookie from ``Optional[str]`` to ``Optional[bool]``
`4204 <https://github.com/aio-libs/aiohttp/issues/4204>`_
- Changes ``ttl_dns_cache`` type from int to Optional[int].
`4270 <https://github.com/aio-libs/aiohttp/issues/4270>`_
- Simplify README hello word example and add a documentation page for people coming from requests.
`4272 <https://github.com/aio-libs/aiohttp/issues/4272>`_
- Improve some code examples in the documentation involving websockets and starting a simple HTTP site with an AppRunner.
`4285 <https://github.com/aio-libs/aiohttp/issues/4285>`_
- Fix typo in code example in Multipart docs
`4312 <https://github.com/aio-libs/aiohttp/issues/4312>`_
- Fix code example in Multipart section.
`4314 <https://github.com/aio-libs/aiohttp/issues/4314>`_
- Update contributing guide so new contributors read the most recent version of that guide. Update command used to create test coverage reporting.
`4810 <https://github.com/aio-libs/aiohttp/issues/4810>`_
- Spelling: Change "canonize" to "canonicalize".
`4986 <https://github.com/aio-libs/aiohttp/issues/4986>`_
- Add ``aiohttp-sse-client`` library to third party usage list.
`5084 <https://github.com/aio-libs/aiohttp/issues/5084>`_
Misc
----
- `2856 <https://github.com/aio-libs/aiohttp/issues/2856>`_, `#4218 <https://github.com/aio-libs/aiohttp/issues/4218>`_, `#4250 <https://github.com/aio-libs/aiohttp/issues/4250>`_
3.6.2
It contains several bufixes.
Changes
------------
Features
--------
- Made exceptions pickleable. Also changed the repr of some exceptions.
`4077 <https://github.com/aio-libs/aiohttp/issues/4077>`_
- Use ``Iterable`` type hint instead of ``Sequence`` for ``Application`` *middleware*
parameter. `4125 <https://github.com/aio-libs/aiohttp/issues/4125>`_
Bugfixes
--------
- Reset the ``sock_read`` timeout each time data is received for a
``aiohttp.ClientResponse``. `3808
<https://github.com/aio-libs/aiohttp/issues/3808>`_
- Fix handling of expired cookies so they are not stored in CookieJar.
`4063 <https://github.com/aio-libs/aiohttp/issues/4063>`_
- Fix misleading message in the string representation of ``ClientConnectorError``;
``self.ssl == None`` means default SSL context, not SSL disabled