diff --git a/CHANGES.rst b/CHANGES.rst index 5b02623067a..95b573b1125 100644 --- a/CHANGES.rst +++ b/CHANGES.rst @@ -10,6 +10,276 @@ .. towncrier release notes start +3.10.0b0 (2024-07-22) +========================= + +Bug fixes +--------- + +- Fixed server response headers for ``Content-Type`` and ``Content-Encoding`` for + static compressed files -- by :user:`steverep`. + + Server will now respond with a ``Content-Type`` appropriate for the compressed + file (e.g. ``"application/gzip"``), and omit the ``Content-Encoding`` header. + Users should expect that most clients will no longer decompress such responses + by default. + + + *Related issues and pull requests on GitHub:* + :issue:`4462`. + + + +- Fix duplicate cookie expiration calls in the CookieJar implementation + + + *Related issues and pull requests on GitHub:* + :issue:`7784`. + + + +- Fix ``AsyncResolver`` to match ``ThreadedResolver`` behavior + -- by :user:`bdraco`. + + On system with IPv6 support, the :py:class:`~aiohttp.resolver.AsyncResolver` would not fallback + to providing A records when AAAA records were not available. + Additionally, unlike the :py:class:`~aiohttp.resolver.ThreadedResolver`, the :py:class:`~aiohttp.resolver.AsyncResolver` + did not handle link-local addresses correctly. + + This change makes the behavior consistent with the :py:class:`~aiohttp.resolver.ThreadedResolver`. + + + *Related issues and pull requests on GitHub:* + :issue:`8270`. + + + +- Fix ``ws_connect`` not respecting `receive_timeout`` on WS(S) connection. + -- by :user:`arcivanov`. + + + *Related issues and pull requests on GitHub:* + :issue:`8444`. + + + +- Removed blocking I/O in the event loop for static resources and refactored + exception handling -- by :user:`steverep`. + + File system calls when handling requests for static routes were moved to a + separate thread to potentially improve performance. Exception handling + was tightened in order to only return 403 Forbidden or 404 Not Found responses + for expected scenarios; 500 Internal Server Error would be returned for any + unknown errors. + + + *Related issues and pull requests on GitHub:* + :issue:`8507`. + + + + +Features +-------- + +- Add a Request.wait_for_disconnection() method, as means of allowing request handlers to be notified of premature client disconnections. + + + *Related issues and pull requests on GitHub:* + :issue:`2492`. + + + +- Added 5 new exceptions: :py:exc:`~aiohttp.InvalidUrlClientError`, :py:exc:`~aiohttp.RedirectClientError`, + :py:exc:`~aiohttp.NonHttpUrlClientError`, :py:exc:`~aiohttp.InvalidUrlRedirectClientError`, + :py:exc:`~aiohttp.NonHttpUrlRedirectClientError` + + :py:exc:`~aiohttp.InvalidUrlRedirectClientError`, :py:exc:`~aiohttp.NonHttpUrlRedirectClientError` + are raised instead of :py:exc:`ValueError` or :py:exc:`~aiohttp.InvalidURL` when the redirect URL is invalid. Classes + :py:exc:`~aiohttp.InvalidUrlClientError`, :py:exc:`~aiohttp.RedirectClientError`, + :py:exc:`~aiohttp.NonHttpUrlClientError` are base for them. + + The :py:exc:`~aiohttp.InvalidURL` now exposes a ``description`` property with the text explanation of the error details. + + -- by :user:`setla`, :user:`AraHaan`, and :user:`bdraco` + + + *Related issues and pull requests on GitHub:* + :issue:`2507`, :issue:`3315`, :issue:`6722`, :issue:`8481`, :issue:`8482`. + + + +- Added a feature to retry closed connections automatically for idempotent methods. -- by :user:`Dreamsorcerer` + + + *Related issues and pull requests on GitHub:* + :issue:`7297`. + + + +- Implement filter_cookies() with domain-matching and path-matching on the keys, instead of testing every single cookie. + This may break existing cookies that have been saved with `CookieJar.save()`. Cookies can be migrated with this script:: + + import pickle + with file_path.open("rb") as f: + cookies = pickle.load(f) + + morsels = [(name, m) for c in cookies.values() for name, m in c.items()] + cookies.clear() + for name, m in morsels: + cookies[(m["domain"], m["path"].rstrip("/"))][name] = m + + with file_path.open("wb") as f: + pickle.dump(cookies, f, pickle.HIGHEST_PROTOCOL) + + + *Related issues and pull requests on GitHub:* + :issue:`7583`. + + + +- Separated connection and socket timeout errors, from ServerTimeoutError. + + + *Related issues and pull requests on GitHub:* + :issue:`7801`. + + + +- Implement happy eyeballs + + + *Related issues and pull requests on GitHub:* + :issue:`7954`. + + + +- Added server capability to check for static files with Brotli compression via a ``.br`` extension -- by :user:`steverep`. + + + *Related issues and pull requests on GitHub:* + :issue:`8062`. + + + + +Improved documentation +---------------------- + +- Add documentation for ``aiohttp.web.FileResponse``. + + + *Related issues and pull requests on GitHub:* + :issue:`3958`. + + + +- Improve the docs for the `ssl` params. + + + *Related issues and pull requests on GitHub:* + :issue:`8403`. + + + + +Contributor-facing changes +-------------------------- + +- Enabled HTTP parser tests originally intended for 3.9.2 release -- by :user:`pajod`. + + + *Related issues and pull requests on GitHub:* + :issue:`8088`. + + + + +Miscellaneous internal changes +------------------------------ + +- Improved URL handler resolution time by indexing resources in the UrlDispatcher. + For applications with a large number of handlers, this should increase performance significantly. + -- by :user:`bdraco` + + + *Related issues and pull requests on GitHub:* + :issue:`7829`. + + + +- Add `nacl_middleware `_ to the list of middlewares in the third party section of the documentation. + + + *Related issues and pull requests on GitHub:* + :issue:`8346`. + + + +- Minor improvements to static typing -- by :user:`Dreamsorcerer`. + + + *Related issues and pull requests on GitHub:* + :issue:`8364`. + + + +- Added a 3.11-specific overloads to ``ClientSession`` -- by :user:`max-muoto`. + + + *Related issues and pull requests on GitHub:* + :issue:`8463`. + + + +- Simplified path checks for ``UrlDispatcher.add_static()`` method -- by :user:`steverep`. + + + *Related issues and pull requests on GitHub:* + :issue:`8491`. + + + +- Avoid creating a future on every websocket receive -- by :user:`bdraco`. + + + *Related issues and pull requests on GitHub:* + :issue:`8498`. + + + +- Use identity checks for all ``WSMsgType`` type compares -- by :user:`bdraco`. + + + *Related issues and pull requests on GitHub:* + :issue:`8501`. + + + +- When using Python 3.12 or later, the writer is no longer scheduled on the event loop if it can finish synchronously. Avoiding event loop scheduling reduces latency and improves performance. -- by :user:`bdraco`. + + + *Related issues and pull requests on GitHub:* + :issue:`8510`. + + + +- Restore :py:class:`~aiohttp.resolver.AsyncResolver` to be the default resolver. -- by :user:`bdraco`. + + :py:class:`~aiohttp.resolver.AsyncResolver` was disabled by default because + of IPv6 compatibility issues. These issues have been resolved and + :py:class:`~aiohttp.resolver.AsyncResolver` is again now the default resolver. + + + *Related issues and pull requests on GitHub:* + :issue:`8522`. + + + + +---- + + 3.9.5 (2024-04-16) ================== diff --git a/CHANGES/2492.feature b/CHANGES/2492.feature deleted file mode 100644 index 5c98dbbbcf2..00000000000 --- a/CHANGES/2492.feature +++ /dev/null @@ -1 +0,0 @@ -Add a Request.wait_for_disconnection() method, as means of allowing request handlers to be notified of premature client disconnections. diff --git a/CHANGES/2507.feature.rst b/CHANGES/2507.feature.rst deleted file mode 120000 index f569cd92882..00000000000 --- a/CHANGES/2507.feature.rst +++ /dev/null @@ -1 +0,0 @@ -6722.feature \ No newline at end of file diff --git a/CHANGES/3315.feature.rst b/CHANGES/3315.feature.rst deleted file mode 120000 index f569cd92882..00000000000 --- a/CHANGES/3315.feature.rst +++ /dev/null @@ -1 +0,0 @@ -6722.feature \ No newline at end of file diff --git a/CHANGES/3958.doc b/CHANGES/3958.doc deleted file mode 100644 index 9f3a9de1743..00000000000 --- a/CHANGES/3958.doc +++ /dev/null @@ -1 +0,0 @@ -Add documentation for ``aiohttp.web.FileResponse``. diff --git a/CHANGES/4462.bugfix.rst b/CHANGES/4462.bugfix.rst deleted file mode 100644 index fe897a08b39..00000000000 --- a/CHANGES/4462.bugfix.rst +++ /dev/null @@ -1,7 +0,0 @@ -Fixed server response headers for ``Content-Type`` and ``Content-Encoding`` for -static compressed files -- by :user:`steverep`. - -Server will now respond with a ``Content-Type`` appropriate for the compressed -file (e.g. ``"application/gzip"``), and omit the ``Content-Encoding`` header. -Users should expect that most clients will no longer decompress such responses -by default. diff --git a/CHANGES/6722.feature b/CHANGES/6722.feature deleted file mode 100644 index 580efa5c5e2..00000000000 --- a/CHANGES/6722.feature +++ /dev/null @@ -1,12 +0,0 @@ -Added 5 new exceptions: :py:exc:`~aiohttp.InvalidUrlClientError`, :py:exc:`~aiohttp.RedirectClientError`, -:py:exc:`~aiohttp.NonHttpUrlClientError`, :py:exc:`~aiohttp.InvalidUrlRedirectClientError`, -:py:exc:`~aiohttp.NonHttpUrlRedirectClientError` - -:py:exc:`~aiohttp.InvalidUrlRedirectClientError`, :py:exc:`~aiohttp.NonHttpUrlRedirectClientError` -are raised instead of :py:exc:`ValueError` or :py:exc:`~aiohttp.InvalidURL` when the redirect URL is invalid. Classes -:py:exc:`~aiohttp.InvalidUrlClientError`, :py:exc:`~aiohttp.RedirectClientError`, -:py:exc:`~aiohttp.NonHttpUrlClientError` are base for them. - -The :py:exc:`~aiohttp.InvalidURL` now exposes a ``description`` property with the text explanation of the error details. - --- by :user:`setla`, :user:`AraHaan`, and :user:`bdraco` diff --git a/CHANGES/7297.feature b/CHANGES/7297.feature deleted file mode 100644 index 91d769a4b32..00000000000 --- a/CHANGES/7297.feature +++ /dev/null @@ -1 +0,0 @@ -Added a feature to retry closed connections automatically for idempotent methods. -- by :user:`Dreamsorcerer` diff --git a/CHANGES/7583.feature b/CHANGES/7583.feature deleted file mode 100644 index c05e64be780..00000000000 --- a/CHANGES/7583.feature +++ /dev/null @@ -1,14 +0,0 @@ -Implement filter_cookies() with domain-matching and path-matching on the keys, instead of testing every single cookie. -This may break existing cookies that have been saved with `CookieJar.save()`. Cookies can be migrated with this script:: - - import pickle - with file_path.open("rb") as f: - cookies = pickle.load(f) - - morsels = [(name, m) for c in cookies.values() for name, m in c.items()] - cookies.clear() - for name, m in morsels: - cookies[(m["domain"], m["path"].rstrip("/"))][name] = m - - with file_path.open("wb") as f: - pickle.dump(cookies, f, pickle.HIGHEST_PROTOCOL) diff --git a/CHANGES/7784.bugfix b/CHANGES/7784.bugfix deleted file mode 100644 index 1f8ba8ddb44..00000000000 --- a/CHANGES/7784.bugfix +++ /dev/null @@ -1 +0,0 @@ -Fix duplicate cookie expiration calls in the CookieJar implementation diff --git a/CHANGES/7801.feature b/CHANGES/7801.feature deleted file mode 100644 index a6fb4d8a58e..00000000000 --- a/CHANGES/7801.feature +++ /dev/null @@ -1 +0,0 @@ -Separated connection and socket timeout errors, from ServerTimeoutError. diff --git a/CHANGES/7829.misc b/CHANGES/7829.misc deleted file mode 100644 index 9eb060f4713..00000000000 --- a/CHANGES/7829.misc +++ /dev/null @@ -1,3 +0,0 @@ -Improved URL handler resolution time by indexing resources in the UrlDispatcher. -For applications with a large number of handlers, this should increase performance significantly. --- by :user:`bdraco` diff --git a/CHANGES/7954.feature b/CHANGES/7954.feature deleted file mode 100644 index e536ee4b1c4..00000000000 --- a/CHANGES/7954.feature +++ /dev/null @@ -1 +0,0 @@ -Implement happy eyeballs diff --git a/CHANGES/8062.feature.rst b/CHANGES/8062.feature.rst deleted file mode 100644 index 6e9814f09a0..00000000000 --- a/CHANGES/8062.feature.rst +++ /dev/null @@ -1 +0,0 @@ -Added server capability to check for static files with Brotli compression via a ``.br`` extension -- by :user:`steverep`. diff --git a/CHANGES/8088.contrib.rst b/CHANGES/8088.contrib.rst deleted file mode 100644 index b3aec71bdf7..00000000000 --- a/CHANGES/8088.contrib.rst +++ /dev/null @@ -1 +0,0 @@ -Enabled HTTP parser tests originally intended for 3.9.2 release -- by :user:`pajod`. diff --git a/CHANGES/8270.bugfix.rst b/CHANGES/8270.bugfix.rst deleted file mode 100644 index bda77223959..00000000000 --- a/CHANGES/8270.bugfix.rst +++ /dev/null @@ -1,9 +0,0 @@ -Fix ``AsyncResolver`` to match ``ThreadedResolver`` behavior --- by :user:`bdraco`. - -On system with IPv6 support, the :py:class:`~aiohttp.resolver.AsyncResolver` would not fallback -to providing A records when AAAA records were not available. -Additionally, unlike the :py:class:`~aiohttp.resolver.ThreadedResolver`, the :py:class:`~aiohttp.resolver.AsyncResolver` -did not handle link-local addresses correctly. - -This change makes the behavior consistent with the :py:class:`~aiohttp.resolver.ThreadedResolver`. diff --git a/CHANGES/8346.misc.rst b/CHANGES/8346.misc.rst deleted file mode 100644 index e3e1a309be1..00000000000 --- a/CHANGES/8346.misc.rst +++ /dev/null @@ -1 +0,0 @@ -Add `nacl_middleware `_ to the list of middlewares in the third party section of the documentation. diff --git a/CHANGES/8364.misc.rst b/CHANGES/8364.misc.rst deleted file mode 100644 index 493916f0421..00000000000 --- a/CHANGES/8364.misc.rst +++ /dev/null @@ -1 +0,0 @@ -Minor improvements to static typing -- by :user:`Dreamsorcerer`. diff --git a/CHANGES/8403.doc.rst b/CHANGES/8403.doc.rst deleted file mode 100644 index 71618c3c99c..00000000000 --- a/CHANGES/8403.doc.rst +++ /dev/null @@ -1 +0,0 @@ -Improve the docs for the `ssl` params. diff --git a/CHANGES/8444.bugfix b/CHANGES/8444.bugfix deleted file mode 100644 index 774e13064a7..00000000000 --- a/CHANGES/8444.bugfix +++ /dev/null @@ -1,2 +0,0 @@ -Fix ``ws_connect`` not respecting `receive_timeout`` on WS(S) connection. --- by :user:`arcivanov`. diff --git a/CHANGES/8463.misc.rst b/CHANGES/8463.misc.rst deleted file mode 100644 index 1d42136ebd7..00000000000 --- a/CHANGES/8463.misc.rst +++ /dev/null @@ -1 +0,0 @@ -Added a 3.11-specific overloads to ``ClientSession`` -- by :user:`max-muoto`. diff --git a/CHANGES/8481.feature.rst b/CHANGES/8481.feature.rst deleted file mode 120000 index f569cd92882..00000000000 --- a/CHANGES/8481.feature.rst +++ /dev/null @@ -1 +0,0 @@ -6722.feature \ No newline at end of file diff --git a/CHANGES/8482.feature.rst b/CHANGES/8482.feature.rst deleted file mode 120000 index f569cd92882..00000000000 --- a/CHANGES/8482.feature.rst +++ /dev/null @@ -1 +0,0 @@ -6722.feature \ No newline at end of file diff --git a/CHANGES/8491.misc.rst b/CHANGES/8491.misc.rst deleted file mode 100644 index 223c549b2e2..00000000000 --- a/CHANGES/8491.misc.rst +++ /dev/null @@ -1 +0,0 @@ -Simplified path checks for ``UrlDispatcher.add_static()`` method -- by :user:`steverep`. diff --git a/CHANGES/8498.misc.rst b/CHANGES/8498.misc.rst deleted file mode 100644 index 5fcf3efd884..00000000000 --- a/CHANGES/8498.misc.rst +++ /dev/null @@ -1 +0,0 @@ -Avoid creating a future on every websocket receive -- by :user:`bdraco`. diff --git a/CHANGES/8501.misc.rst b/CHANGES/8501.misc.rst deleted file mode 100644 index 183c370178e..00000000000 --- a/CHANGES/8501.misc.rst +++ /dev/null @@ -1 +0,0 @@ -Use identity checks for all ``WSMsgType`` type compares -- by :user:`bdraco`. diff --git a/CHANGES/8507.bugfix.rst b/CHANGES/8507.bugfix.rst deleted file mode 100644 index 9739536202d..00000000000 --- a/CHANGES/8507.bugfix.rst +++ /dev/null @@ -1,8 +0,0 @@ -Removed blocking I/O in the event loop for static resources and refactored -exception handling -- by :user:`steverep`. - -File system calls when handling requests for static routes were moved to a -separate thread to potentially improve performance. Exception handling -was tightened in order to only return 403 Forbidden or 404 Not Found responses -for expected scenarios; 500 Internal Server Error would be returned for any -unknown errors. diff --git a/CHANGES/8510.misc.rst b/CHANGES/8510.misc.rst deleted file mode 100644 index d0a90c7388f..00000000000 --- a/CHANGES/8510.misc.rst +++ /dev/null @@ -1 +0,0 @@ -When using Python 3.12 or later, the writer is no longer scheduled on the event loop if it can finish synchronously. Avoiding event loop scheduling reduces latency and improves performance. -- by :user:`bdraco`. diff --git a/CHANGES/8522.misc.rst b/CHANGES/8522.misc.rst deleted file mode 100644 index 04f7edcc92d..00000000000 --- a/CHANGES/8522.misc.rst +++ /dev/null @@ -1,5 +0,0 @@ -Restore :py:class:`~aiohttp.resolver.AsyncResolver` to be the default resolver. -- by :user:`bdraco`. - -:py:class:`~aiohttp.resolver.AsyncResolver` was disabled by default because -of IPv6 compatibility issues. These issues have been resolved and -:py:class:`~aiohttp.resolver.AsyncResolver` is again now the default resolver. diff --git a/aiohttp/__init__.py b/aiohttp/__init__.py index 5064b043006..1e4324de694 100644 --- a/aiohttp/__init__.py +++ b/aiohttp/__init__.py @@ -1,4 +1,4 @@ -__version__ = "3.10.0.dev0" +__version__ = "3.10.0b0" from typing import TYPE_CHECKING, Tuple