From cdf84ef9714d2171f33ec4a637181b90a69d8f72 Mon Sep 17 00:00:00 2001 From: "J. Nick Koston" Date: Tue, 30 Jul 2024 13:16:52 -0500 Subject: [PATCH 01/24] Restore CHANGES part 1 --- CHANGES/2492.feature | 1 + CHANGES/2507.feature.rst | 1 + CHANGES/3315.feature.rst | 1 + CHANGES/3958.doc | 1 + CHANGES/4462.bugfix.rst | 7 +++++++ CHANGES/6722.feature | 12 ++++++++++++ CHANGES/7297.feature | 1 + CHANGES/7583.feature | 14 ++++++++++++++ CHANGES/7784.bugfix | 1 + CHANGES/7801.feature | 1 + CHANGES/7829.misc | 3 +++ CHANGES/7954.feature | 1 + CHANGES/8062.feature.rst | 1 + CHANGES/8088.contrib.rst | 1 + CHANGES/8270.bugfix.rst | 9 +++++++++ CHANGES/8346.misc.rst | 1 + CHANGES/8364.misc.rst | 1 + CHANGES/8403.doc.rst | 1 + CHANGES/8444.bugfix | 2 ++ CHANGES/8463.misc.rst | 1 + CHANGES/8481.feature.rst | 1 + CHANGES/8482.feature.rst | 1 + CHANGES/8491.misc.rst | 1 + CHANGES/8498.misc.rst | 1 + CHANGES/8501.misc.rst | 1 + CHANGES/8507.bugfix.rst | 8 ++++++++ CHANGES/8510.misc.rst | 1 + CHANGES/8522.misc.rst | 5 +++++ 28 files changed, 80 insertions(+) create mode 100644 CHANGES/2492.feature create mode 120000 CHANGES/2507.feature.rst create mode 120000 CHANGES/3315.feature.rst create mode 100644 CHANGES/3958.doc create mode 100644 CHANGES/4462.bugfix.rst create mode 100644 CHANGES/6722.feature create mode 100644 CHANGES/7297.feature create mode 100644 CHANGES/7583.feature create mode 100644 CHANGES/7784.bugfix create mode 100644 CHANGES/7801.feature create mode 100644 CHANGES/7829.misc create mode 100644 CHANGES/7954.feature create mode 100644 CHANGES/8062.feature.rst create mode 100644 CHANGES/8088.contrib.rst create mode 100644 CHANGES/8270.bugfix.rst create mode 100644 CHANGES/8346.misc.rst create mode 100644 CHANGES/8364.misc.rst create mode 100644 CHANGES/8403.doc.rst create mode 100644 CHANGES/8444.bugfix create mode 100644 CHANGES/8463.misc.rst create mode 120000 CHANGES/8481.feature.rst create mode 120000 CHANGES/8482.feature.rst create mode 100644 CHANGES/8491.misc.rst create mode 100644 CHANGES/8498.misc.rst create mode 100644 CHANGES/8501.misc.rst create mode 100644 CHANGES/8507.bugfix.rst create mode 100644 CHANGES/8510.misc.rst create mode 100644 CHANGES/8522.misc.rst diff --git a/CHANGES/2492.feature b/CHANGES/2492.feature new file mode 100644 index 00000000000..5c98dbbbcf2 --- /dev/null +++ b/CHANGES/2492.feature @@ -0,0 +1 @@ +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 new file mode 120000 index 00000000000..f569cd92882 --- /dev/null +++ b/CHANGES/2507.feature.rst @@ -0,0 +1 @@ +6722.feature \ No newline at end of file diff --git a/CHANGES/3315.feature.rst b/CHANGES/3315.feature.rst new file mode 120000 index 00000000000..f569cd92882 --- /dev/null +++ b/CHANGES/3315.feature.rst @@ -0,0 +1 @@ +6722.feature \ No newline at end of file diff --git a/CHANGES/3958.doc b/CHANGES/3958.doc new file mode 100644 index 00000000000..9f3a9de1743 --- /dev/null +++ b/CHANGES/3958.doc @@ -0,0 +1 @@ +Add documentation for ``aiohttp.web.FileResponse``. diff --git a/CHANGES/4462.bugfix.rst b/CHANGES/4462.bugfix.rst new file mode 100644 index 00000000000..fe897a08b39 --- /dev/null +++ b/CHANGES/4462.bugfix.rst @@ -0,0 +1,7 @@ +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 new file mode 100644 index 00000000000..580efa5c5e2 --- /dev/null +++ b/CHANGES/6722.feature @@ -0,0 +1,12 @@ +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 new file mode 100644 index 00000000000..91d769a4b32 --- /dev/null +++ b/CHANGES/7297.feature @@ -0,0 +1 @@ +Added a feature to retry closed connections automatically for idempotent methods. -- by :user:`Dreamsorcerer` diff --git a/CHANGES/7583.feature b/CHANGES/7583.feature new file mode 100644 index 00000000000..c05e64be780 --- /dev/null +++ b/CHANGES/7583.feature @@ -0,0 +1,14 @@ +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 new file mode 100644 index 00000000000..1f8ba8ddb44 --- /dev/null +++ b/CHANGES/7784.bugfix @@ -0,0 +1 @@ +Fix duplicate cookie expiration calls in the CookieJar implementation diff --git a/CHANGES/7801.feature b/CHANGES/7801.feature new file mode 100644 index 00000000000..a6fb4d8a58e --- /dev/null +++ b/CHANGES/7801.feature @@ -0,0 +1 @@ +Separated connection and socket timeout errors, from ServerTimeoutError. diff --git a/CHANGES/7829.misc b/CHANGES/7829.misc new file mode 100644 index 00000000000..9eb060f4713 --- /dev/null +++ b/CHANGES/7829.misc @@ -0,0 +1,3 @@ +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 new file mode 100644 index 00000000000..e536ee4b1c4 --- /dev/null +++ b/CHANGES/7954.feature @@ -0,0 +1 @@ +Implement happy eyeballs diff --git a/CHANGES/8062.feature.rst b/CHANGES/8062.feature.rst new file mode 100644 index 00000000000..6e9814f09a0 --- /dev/null +++ b/CHANGES/8062.feature.rst @@ -0,0 +1 @@ +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 new file mode 100644 index 00000000000..b3aec71bdf7 --- /dev/null +++ b/CHANGES/8088.contrib.rst @@ -0,0 +1 @@ +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 new file mode 100644 index 00000000000..bda77223959 --- /dev/null +++ b/CHANGES/8270.bugfix.rst @@ -0,0 +1,9 @@ +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 new file mode 100644 index 00000000000..e3e1a309be1 --- /dev/null +++ b/CHANGES/8346.misc.rst @@ -0,0 +1 @@ +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 new file mode 100644 index 00000000000..493916f0421 --- /dev/null +++ b/CHANGES/8364.misc.rst @@ -0,0 +1 @@ +Minor improvements to static typing -- by :user:`Dreamsorcerer`. diff --git a/CHANGES/8403.doc.rst b/CHANGES/8403.doc.rst new file mode 100644 index 00000000000..71618c3c99c --- /dev/null +++ b/CHANGES/8403.doc.rst @@ -0,0 +1 @@ +Improve the docs for the `ssl` params. diff --git a/CHANGES/8444.bugfix b/CHANGES/8444.bugfix new file mode 100644 index 00000000000..774e13064a7 --- /dev/null +++ b/CHANGES/8444.bugfix @@ -0,0 +1,2 @@ +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 new file mode 100644 index 00000000000..1d42136ebd7 --- /dev/null +++ b/CHANGES/8463.misc.rst @@ -0,0 +1 @@ +Added a 3.11-specific overloads to ``ClientSession`` -- by :user:`max-muoto`. diff --git a/CHANGES/8481.feature.rst b/CHANGES/8481.feature.rst new file mode 120000 index 00000000000..f569cd92882 --- /dev/null +++ b/CHANGES/8481.feature.rst @@ -0,0 +1 @@ +6722.feature \ No newline at end of file diff --git a/CHANGES/8482.feature.rst b/CHANGES/8482.feature.rst new file mode 120000 index 00000000000..f569cd92882 --- /dev/null +++ b/CHANGES/8482.feature.rst @@ -0,0 +1 @@ +6722.feature \ No newline at end of file diff --git a/CHANGES/8491.misc.rst b/CHANGES/8491.misc.rst new file mode 100644 index 00000000000..223c549b2e2 --- /dev/null +++ b/CHANGES/8491.misc.rst @@ -0,0 +1 @@ +Simplified path checks for ``UrlDispatcher.add_static()`` method -- by :user:`steverep`. diff --git a/CHANGES/8498.misc.rst b/CHANGES/8498.misc.rst new file mode 100644 index 00000000000..5fcf3efd884 --- /dev/null +++ b/CHANGES/8498.misc.rst @@ -0,0 +1 @@ +Avoid creating a future on every websocket receive -- by :user:`bdraco`. diff --git a/CHANGES/8501.misc.rst b/CHANGES/8501.misc.rst new file mode 100644 index 00000000000..183c370178e --- /dev/null +++ b/CHANGES/8501.misc.rst @@ -0,0 +1 @@ +Use identity checks for all ``WSMsgType`` type compares -- by :user:`bdraco`. diff --git a/CHANGES/8507.bugfix.rst b/CHANGES/8507.bugfix.rst new file mode 100644 index 00000000000..9739536202d --- /dev/null +++ b/CHANGES/8507.bugfix.rst @@ -0,0 +1,8 @@ +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 new file mode 100644 index 00000000000..d0a90c7388f --- /dev/null +++ b/CHANGES/8510.misc.rst @@ -0,0 +1 @@ +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 new file mode 100644 index 00000000000..04f7edcc92d --- /dev/null +++ b/CHANGES/8522.misc.rst @@ -0,0 +1,5 @@ +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. From a4dfc7cf66f5cf6327222db26dd90762e24f6d0c Mon Sep 17 00:00:00 2001 From: "J. Nick Koston" Date: Tue, 30 Jul 2024 13:17:44 -0500 Subject: [PATCH 02/24] Restore CHANGES part 2 --- CHANGES/8182.bugfix.rst | 10 ++++++++++ CHANGES/8495.breaking.rst | 12 ++++++++++++ CHANGES/8535.misc.rst | 3 +++ 3 files changed, 25 insertions(+) create mode 100644 CHANGES/8182.bugfix.rst create mode 100644 CHANGES/8495.breaking.rst create mode 100644 CHANGES/8535.misc.rst diff --git a/CHANGES/8182.bugfix.rst b/CHANGES/8182.bugfix.rst new file mode 100644 index 00000000000..c960597587c --- /dev/null +++ b/CHANGES/8182.bugfix.rst @@ -0,0 +1,10 @@ +Adjusted ``FileResponse`` to check file existence and access when preparing the response -- by :user:`steverep`. + +The :py:class:`~aiohttp.web.FileResponse` class was modified to respond with + 403 Forbidden or 404 Not Found as appropriate. Previously, it would cause a + server error if the path did not exist or could not be accessed. Checks for + existence, non-regular files, and permissions were expected to be done in the + route handler. For static routes, this now permits a compressed file to exist + without its uncompressed variant and still be served. In addition, this + changes the response status for files without read permission to 403, and for + non-regular files from 404 to 403 for consistency. diff --git a/CHANGES/8495.breaking.rst b/CHANGES/8495.breaking.rst new file mode 100644 index 00000000000..d0b1da5ca47 --- /dev/null +++ b/CHANGES/8495.breaking.rst @@ -0,0 +1,12 @@ +The shutdown logic in 3.9 waited on all tasks, which caused issues with some libraries. +In 3.10 we've changed this logic to only wait on request handlers. This means that it's +important for developers to correctly handle the lifecycle of background tasks using a +library such as ``aiojobs``. If an application is using ``handler_cancellation=True`` then +it is also a good idea to ensure that any :func:`asyncio.shield` calls are replaced with +:func:`aiojobs.aiohttp.shield`. + +Please read the updated documentation on these points: +https://docs.aiohttp.org/en/stable/web_advanced.html#graceful-shutdown +https://docs.aiohttp.org/en/stable/web_advanced.html#web-handler-cancellation + +-- by :user:`Dreamsorcerer` diff --git a/CHANGES/8535.misc.rst b/CHANGES/8535.misc.rst new file mode 100644 index 00000000000..e1acc438695 --- /dev/null +++ b/CHANGES/8535.misc.rst @@ -0,0 +1,3 @@ +Improve performance of filtering cookies -- by :user:`bdraco`. + +This change is a followup to the improvements in :issue:`7583` From 8058217a3bb1cd0b2b3c1b654a00ad07a5cfac6f Mon Sep 17 00:00:00 2001 From: "J. Nick Koston" Date: Tue, 30 Jul 2024 13:18:28 -0500 Subject: [PATCH 03/24] revert CHANGES.rst --- CHANGES.rst | 320 ---------------------------------------------------- 1 file changed, 320 deletions(-) diff --git a/CHANGES.rst b/CHANGES.rst index bd7a45b01f5..5b02623067a 100644 --- a/CHANGES.rst +++ b/CHANGES.rst @@ -10,326 +10,6 @@ .. towncrier release notes start -3.10.0 (2024-07-30) -======================== - -Bug fixes ---------- - -- Adjusted ``FileResponse`` to check file existence and access when preparing the response -- by :user:`steverep`. - - The :py:class:`~aiohttp.web.FileResponse` class was modified to respond with - 403 Forbidden or 404 Not Found as appropriate. Previously, it would cause a - server error if the path did not exist or could not be accessed. Checks for - existence, non-regular files, and permissions were expected to be done in the - route handler. For static routes, this now permits a compressed file to exist - without its uncompressed variant and still be served. In addition, this - changes the response status for files without read permission to 403, and for - non-regular files from 404 to 403 for consistency. - - - *Related issues and pull requests on GitHub:* - :issue:`8182`. - - - -- 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`. - - - - -Removals and backward incompatible breaking changes ---------------------------------------------------- - -- The shutdown logic in 3.9 waited on all tasks, which caused issues with some libraries. - In 3.10 we've changed this logic to only wait on request handlers. This means that it's - important for developers to correctly handle the lifecycle of background tasks using a - library such as ``aiojobs``. If an application is using ``handler_cancellation=True`` then - it is also a good idea to ensure that any :func:`asyncio.shield` calls are replaced with - :func:`aiojobs.aiohttp.shield`. - - Please read the updated documentation on these points: - https://docs.aiohttp.org/en/stable/web_advanced.html#graceful-shutdown - https://docs.aiohttp.org/en/stable/web_advanced.html#web-handler-cancellation - - -- by :user:`Dreamsorcerer` - - - *Related issues and pull requests on GitHub:* - :issue:`8495`. - - - - -Miscellaneous internal changes ------------------------------- - -- Improve performance of filtering cookies -- by :user:`bdraco`. - - This change is a followup to the improvements in :issue:`7583` - - - *Related issues and pull requests on GitHub:* - :issue:`8535`. - - - -- 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) ================== From 416037c2054f88a50575cc484f7671a01111246b Mon Sep 17 00:00:00 2001 From: "J. Nick Koston" Date: Tue, 30 Jul 2024 13:24:28 -0500 Subject: [PATCH 04/24] Make 8535 a symlink to 7583 --- CHANGES/8535.misc | 1 + CHANGES/8535.misc.rst | 3 --- 2 files changed, 1 insertion(+), 3 deletions(-) create mode 120000 CHANGES/8535.misc delete mode 100644 CHANGES/8535.misc.rst diff --git a/CHANGES/8535.misc b/CHANGES/8535.misc new file mode 120000 index 00000000000..449a88eb908 --- /dev/null +++ b/CHANGES/8535.misc @@ -0,0 +1 @@ +7583.feature \ No newline at end of file diff --git a/CHANGES/8535.misc.rst b/CHANGES/8535.misc.rst deleted file mode 100644 index e1acc438695..00000000000 --- a/CHANGES/8535.misc.rst +++ /dev/null @@ -1,3 +0,0 @@ -Improve performance of filtering cookies -- by :user:`bdraco`. - -This change is a followup to the improvements in :issue:`7583` From 9aab5bbf910a37348a1666283fff5f2311963b9e Mon Sep 17 00:00:00 2001 From: "J. Nick Koston" Date: Tue, 30 Jul 2024 13:25:36 -0500 Subject: [PATCH 05/24] Make links a list --- CHANGES/8495.breaking.rst | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/CHANGES/8495.breaking.rst b/CHANGES/8495.breaking.rst index d0b1da5ca47..90e78ea1d66 100644 --- a/CHANGES/8495.breaking.rst +++ b/CHANGES/8495.breaking.rst @@ -6,7 +6,7 @@ it is also a good idea to ensure that any :func:`asyncio.shield` calls are repla :func:`aiojobs.aiohttp.shield`. Please read the updated documentation on these points: -https://docs.aiohttp.org/en/stable/web_advanced.html#graceful-shutdown -https://docs.aiohttp.org/en/stable/web_advanced.html#web-handler-cancellation +- https://docs.aiohttp.org/en/stable/web_advanced.html#graceful-shutdown +- https://docs.aiohttp.org/en/stable/web_advanced.html#web-handler-cancellation -- by :user:`Dreamsorcerer` From 3e14db8404043edcd23c94b2476a527f2024a5da Mon Sep 17 00:00:00 2001 From: "J. Nick Koston" Date: Tue, 30 Jul 2024 13:27:10 -0500 Subject: [PATCH 06/24] Run towncrier --- CHANGES.rst | 331 ++++++++++++++++++++++++++++++++++++++ CHANGES/2492.feature | 1 - CHANGES/2507.feature.rst | 1 - CHANGES/3315.feature.rst | 1 - CHANGES/3958.doc | 1 - CHANGES/4462.bugfix.rst | 7 - CHANGES/6722.feature | 12 -- CHANGES/7297.feature | 1 - CHANGES/7583.feature | 14 -- CHANGES/7784.bugfix | 1 - CHANGES/7801.feature | 1 - CHANGES/7829.misc | 3 - CHANGES/7954.feature | 1 - CHANGES/8062.feature.rst | 1 - CHANGES/8088.contrib.rst | 1 - CHANGES/8182.bugfix.rst | 10 -- CHANGES/8270.bugfix.rst | 9 -- CHANGES/8346.misc.rst | 1 - CHANGES/8364.misc.rst | 1 - CHANGES/8403.doc.rst | 1 - CHANGES/8444.bugfix | 2 - CHANGES/8463.misc.rst | 1 - CHANGES/8481.feature.rst | 1 - CHANGES/8482.feature.rst | 1 - CHANGES/8491.misc.rst | 1 - CHANGES/8495.breaking.rst | 12 -- CHANGES/8498.misc.rst | 1 - CHANGES/8501.misc.rst | 1 - CHANGES/8507.bugfix.rst | 8 - CHANGES/8510.misc.rst | 1 - CHANGES/8522.misc.rst | 5 - CHANGES/8535.misc | 1 - 32 files changed, 331 insertions(+), 103 deletions(-) delete mode 100644 CHANGES/2492.feature delete mode 120000 CHANGES/2507.feature.rst delete mode 120000 CHANGES/3315.feature.rst delete mode 100644 CHANGES/3958.doc delete mode 100644 CHANGES/4462.bugfix.rst delete mode 100644 CHANGES/6722.feature delete mode 100644 CHANGES/7297.feature delete mode 100644 CHANGES/7583.feature delete mode 100644 CHANGES/7784.bugfix delete mode 100644 CHANGES/7801.feature delete mode 100644 CHANGES/7829.misc delete mode 100644 CHANGES/7954.feature delete mode 100644 CHANGES/8062.feature.rst delete mode 100644 CHANGES/8088.contrib.rst delete mode 100644 CHANGES/8182.bugfix.rst delete mode 100644 CHANGES/8270.bugfix.rst delete mode 100644 CHANGES/8346.misc.rst delete mode 100644 CHANGES/8364.misc.rst delete mode 100644 CHANGES/8403.doc.rst delete mode 100644 CHANGES/8444.bugfix delete mode 100644 CHANGES/8463.misc.rst delete mode 120000 CHANGES/8481.feature.rst delete mode 120000 CHANGES/8482.feature.rst delete mode 100644 CHANGES/8491.misc.rst delete mode 100644 CHANGES/8495.breaking.rst delete mode 100644 CHANGES/8498.misc.rst delete mode 100644 CHANGES/8501.misc.rst delete mode 100644 CHANGES/8507.bugfix.rst delete mode 100644 CHANGES/8510.misc.rst delete mode 100644 CHANGES/8522.misc.rst delete mode 120000 CHANGES/8535.misc diff --git a/CHANGES.rst b/CHANGES.rst index 5b02623067a..684f965477b 100644 --- a/CHANGES.rst +++ b/CHANGES.rst @@ -10,6 +10,337 @@ .. towncrier release notes start +3.10.0 (2024-07-30) +======================== + +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`. + + + +- Adjusted ``FileResponse`` to check file existence and access when preparing the response -- by :user:`steverep`. + + The :py:class:`~aiohttp.web.FileResponse` class was modified to respond with + 403 Forbidden or 404 Not Found as appropriate. Previously, it would cause a + server error if the path did not exist or could not be accessed. Checks for + existence, non-regular files, and permissions were expected to be done in the + route handler. For static routes, this now permits a compressed file to exist + without its uncompressed variant and still be served. In addition, this + changes the response status for files without read permission to 403, and for + non-regular files from 404 to 403 for consistency. + + + *Related issues and pull requests on GitHub:* + :issue:`8182`. + + + +- 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`. + + + + +Removals and backward incompatible breaking changes +--------------------------------------------------- + +- The shutdown logic in 3.9 waited on all tasks, which caused issues with some libraries. + In 3.10 we've changed this logic to only wait on request handlers. This means that it's + important for developers to correctly handle the lifecycle of background tasks using a + library such as ``aiojobs``. If an application is using ``handler_cancellation=True`` then + it is also a good idea to ensure that any :func:`asyncio.shield` calls are replaced with + :func:`aiojobs.aiohttp.shield`. + + Please read the updated documentation on these points: + - https://docs.aiohttp.org/en/stable/web_advanced.html#graceful-shutdown + - https://docs.aiohttp.org/en/stable/web_advanced.html#web-handler-cancellation + + -- by :user:`Dreamsorcerer` + + + *Related issues and pull requests on GitHub:* + :issue:`8495`. + + + + +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`. + + + +- 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:`8535`. + + + + +---- + + 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/8182.bugfix.rst b/CHANGES/8182.bugfix.rst deleted file mode 100644 index c960597587c..00000000000 --- a/CHANGES/8182.bugfix.rst +++ /dev/null @@ -1,10 +0,0 @@ -Adjusted ``FileResponse`` to check file existence and access when preparing the response -- by :user:`steverep`. - -The :py:class:`~aiohttp.web.FileResponse` class was modified to respond with - 403 Forbidden or 404 Not Found as appropriate. Previously, it would cause a - server error if the path did not exist or could not be accessed. Checks for - existence, non-regular files, and permissions were expected to be done in the - route handler. For static routes, this now permits a compressed file to exist - without its uncompressed variant and still be served. In addition, this - changes the response status for files without read permission to 403, and for - non-regular files from 404 to 403 for consistency. 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/8495.breaking.rst b/CHANGES/8495.breaking.rst deleted file mode 100644 index 90e78ea1d66..00000000000 --- a/CHANGES/8495.breaking.rst +++ /dev/null @@ -1,12 +0,0 @@ -The shutdown logic in 3.9 waited on all tasks, which caused issues with some libraries. -In 3.10 we've changed this logic to only wait on request handlers. This means that it's -important for developers to correctly handle the lifecycle of background tasks using a -library such as ``aiojobs``. If an application is using ``handler_cancellation=True`` then -it is also a good idea to ensure that any :func:`asyncio.shield` calls are replaced with -:func:`aiojobs.aiohttp.shield`. - -Please read the updated documentation on these points: -- https://docs.aiohttp.org/en/stable/web_advanced.html#graceful-shutdown -- https://docs.aiohttp.org/en/stable/web_advanced.html#web-handler-cancellation - --- by :user:`Dreamsorcerer` 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/CHANGES/8535.misc b/CHANGES/8535.misc deleted file mode 120000 index 449a88eb908..00000000000 --- a/CHANGES/8535.misc +++ /dev/null @@ -1 +0,0 @@ -7583.feature \ No newline at end of file From b19de9c103e9d6fe0c82ac8899b7a9423aa6b02f Mon Sep 17 00:00:00 2001 From: "J. Nick Koston" Date: Tue, 30 Jul 2024 13:33:13 -0500 Subject: [PATCH 07/24] use line blocks instead --- CHANGES.rst | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/CHANGES.rst b/CHANGES.rst index 684f965477b..867f18156f1 100644 --- a/CHANGES.rst +++ b/CHANGES.rst @@ -191,8 +191,8 @@ Removals and backward incompatible breaking changes :func:`aiojobs.aiohttp.shield`. Please read the updated documentation on these points: - - https://docs.aiohttp.org/en/stable/web_advanced.html#graceful-shutdown - - https://docs.aiohttp.org/en/stable/web_advanced.html#web-handler-cancellation + | https://docs.aiohttp.org/en/stable/web_advanced.html#graceful-shutdown + | https://docs.aiohttp.org/en/stable/web_advanced.html#web-handler-cancellation -- by :user:`Dreamsorcerer` From 367b753b28409eb653e52d72a1cc619ebf26d5bd Mon Sep 17 00:00:00 2001 From: "J. Nick Koston" Date: Tue, 30 Jul 2024 13:35:30 -0500 Subject: [PATCH 08/24] Revert "use line blocks instead" This reverts commit b19de9c103e9d6fe0c82ac8899b7a9423aa6b02f. --- CHANGES.rst | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/CHANGES.rst b/CHANGES.rst index 867f18156f1..684f965477b 100644 --- a/CHANGES.rst +++ b/CHANGES.rst @@ -191,8 +191,8 @@ Removals and backward incompatible breaking changes :func:`aiojobs.aiohttp.shield`. Please read the updated documentation on these points: - | https://docs.aiohttp.org/en/stable/web_advanced.html#graceful-shutdown - | https://docs.aiohttp.org/en/stable/web_advanced.html#web-handler-cancellation + - https://docs.aiohttp.org/en/stable/web_advanced.html#graceful-shutdown + - https://docs.aiohttp.org/en/stable/web_advanced.html#web-handler-cancellation -- by :user:`Dreamsorcerer` From 963eed1333b6c324894c764fd8266658a30c0425 Mon Sep 17 00:00:00 2001 From: "J. Nick Koston" Date: Tue, 30 Jul 2024 13:35:31 -0500 Subject: [PATCH 09/24] Revert "Run towncrier" This reverts commit 3e14db8404043edcd23c94b2476a527f2024a5da. --- CHANGES.rst | 331 -------------------------------------- CHANGES/2492.feature | 1 + CHANGES/2507.feature.rst | 1 + CHANGES/3315.feature.rst | 1 + CHANGES/3958.doc | 1 + CHANGES/4462.bugfix.rst | 7 + CHANGES/6722.feature | 12 ++ CHANGES/7297.feature | 1 + CHANGES/7583.feature | 14 ++ CHANGES/7784.bugfix | 1 + CHANGES/7801.feature | 1 + CHANGES/7829.misc | 3 + CHANGES/7954.feature | 1 + CHANGES/8062.feature.rst | 1 + CHANGES/8088.contrib.rst | 1 + CHANGES/8182.bugfix.rst | 10 ++ CHANGES/8270.bugfix.rst | 9 ++ CHANGES/8346.misc.rst | 1 + CHANGES/8364.misc.rst | 1 + CHANGES/8403.doc.rst | 1 + CHANGES/8444.bugfix | 2 + CHANGES/8463.misc.rst | 1 + CHANGES/8481.feature.rst | 1 + CHANGES/8482.feature.rst | 1 + CHANGES/8491.misc.rst | 1 + CHANGES/8495.breaking.rst | 12 ++ CHANGES/8498.misc.rst | 1 + CHANGES/8501.misc.rst | 1 + CHANGES/8507.bugfix.rst | 8 + CHANGES/8510.misc.rst | 1 + CHANGES/8522.misc.rst | 5 + CHANGES/8535.misc | 1 + 32 files changed, 103 insertions(+), 331 deletions(-) create mode 100644 CHANGES/2492.feature create mode 120000 CHANGES/2507.feature.rst create mode 120000 CHANGES/3315.feature.rst create mode 100644 CHANGES/3958.doc create mode 100644 CHANGES/4462.bugfix.rst create mode 100644 CHANGES/6722.feature create mode 100644 CHANGES/7297.feature create mode 100644 CHANGES/7583.feature create mode 100644 CHANGES/7784.bugfix create mode 100644 CHANGES/7801.feature create mode 100644 CHANGES/7829.misc create mode 100644 CHANGES/7954.feature create mode 100644 CHANGES/8062.feature.rst create mode 100644 CHANGES/8088.contrib.rst create mode 100644 CHANGES/8182.bugfix.rst create mode 100644 CHANGES/8270.bugfix.rst create mode 100644 CHANGES/8346.misc.rst create mode 100644 CHANGES/8364.misc.rst create mode 100644 CHANGES/8403.doc.rst create mode 100644 CHANGES/8444.bugfix create mode 100644 CHANGES/8463.misc.rst create mode 120000 CHANGES/8481.feature.rst create mode 120000 CHANGES/8482.feature.rst create mode 100644 CHANGES/8491.misc.rst create mode 100644 CHANGES/8495.breaking.rst create mode 100644 CHANGES/8498.misc.rst create mode 100644 CHANGES/8501.misc.rst create mode 100644 CHANGES/8507.bugfix.rst create mode 100644 CHANGES/8510.misc.rst create mode 100644 CHANGES/8522.misc.rst create mode 120000 CHANGES/8535.misc diff --git a/CHANGES.rst b/CHANGES.rst index 684f965477b..5b02623067a 100644 --- a/CHANGES.rst +++ b/CHANGES.rst @@ -10,337 +10,6 @@ .. towncrier release notes start -3.10.0 (2024-07-30) -======================== - -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`. - - - -- Adjusted ``FileResponse`` to check file existence and access when preparing the response -- by :user:`steverep`. - - The :py:class:`~aiohttp.web.FileResponse` class was modified to respond with - 403 Forbidden or 404 Not Found as appropriate. Previously, it would cause a - server error if the path did not exist or could not be accessed. Checks for - existence, non-regular files, and permissions were expected to be done in the - route handler. For static routes, this now permits a compressed file to exist - without its uncompressed variant and still be served. In addition, this - changes the response status for files without read permission to 403, and for - non-regular files from 404 to 403 for consistency. - - - *Related issues and pull requests on GitHub:* - :issue:`8182`. - - - -- 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`. - - - - -Removals and backward incompatible breaking changes ---------------------------------------------------- - -- The shutdown logic in 3.9 waited on all tasks, which caused issues with some libraries. - In 3.10 we've changed this logic to only wait on request handlers. This means that it's - important for developers to correctly handle the lifecycle of background tasks using a - library such as ``aiojobs``. If an application is using ``handler_cancellation=True`` then - it is also a good idea to ensure that any :func:`asyncio.shield` calls are replaced with - :func:`aiojobs.aiohttp.shield`. - - Please read the updated documentation on these points: - - https://docs.aiohttp.org/en/stable/web_advanced.html#graceful-shutdown - - https://docs.aiohttp.org/en/stable/web_advanced.html#web-handler-cancellation - - -- by :user:`Dreamsorcerer` - - - *Related issues and pull requests on GitHub:* - :issue:`8495`. - - - - -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`. - - - -- 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:`8535`. - - - - ----- - - 3.9.5 (2024-04-16) ================== diff --git a/CHANGES/2492.feature b/CHANGES/2492.feature new file mode 100644 index 00000000000..5c98dbbbcf2 --- /dev/null +++ b/CHANGES/2492.feature @@ -0,0 +1 @@ +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 new file mode 120000 index 00000000000..f569cd92882 --- /dev/null +++ b/CHANGES/2507.feature.rst @@ -0,0 +1 @@ +6722.feature \ No newline at end of file diff --git a/CHANGES/3315.feature.rst b/CHANGES/3315.feature.rst new file mode 120000 index 00000000000..f569cd92882 --- /dev/null +++ b/CHANGES/3315.feature.rst @@ -0,0 +1 @@ +6722.feature \ No newline at end of file diff --git a/CHANGES/3958.doc b/CHANGES/3958.doc new file mode 100644 index 00000000000..9f3a9de1743 --- /dev/null +++ b/CHANGES/3958.doc @@ -0,0 +1 @@ +Add documentation for ``aiohttp.web.FileResponse``. diff --git a/CHANGES/4462.bugfix.rst b/CHANGES/4462.bugfix.rst new file mode 100644 index 00000000000..fe897a08b39 --- /dev/null +++ b/CHANGES/4462.bugfix.rst @@ -0,0 +1,7 @@ +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 new file mode 100644 index 00000000000..580efa5c5e2 --- /dev/null +++ b/CHANGES/6722.feature @@ -0,0 +1,12 @@ +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 new file mode 100644 index 00000000000..91d769a4b32 --- /dev/null +++ b/CHANGES/7297.feature @@ -0,0 +1 @@ +Added a feature to retry closed connections automatically for idempotent methods. -- by :user:`Dreamsorcerer` diff --git a/CHANGES/7583.feature b/CHANGES/7583.feature new file mode 100644 index 00000000000..c05e64be780 --- /dev/null +++ b/CHANGES/7583.feature @@ -0,0 +1,14 @@ +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 new file mode 100644 index 00000000000..1f8ba8ddb44 --- /dev/null +++ b/CHANGES/7784.bugfix @@ -0,0 +1 @@ +Fix duplicate cookie expiration calls in the CookieJar implementation diff --git a/CHANGES/7801.feature b/CHANGES/7801.feature new file mode 100644 index 00000000000..a6fb4d8a58e --- /dev/null +++ b/CHANGES/7801.feature @@ -0,0 +1 @@ +Separated connection and socket timeout errors, from ServerTimeoutError. diff --git a/CHANGES/7829.misc b/CHANGES/7829.misc new file mode 100644 index 00000000000..9eb060f4713 --- /dev/null +++ b/CHANGES/7829.misc @@ -0,0 +1,3 @@ +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 new file mode 100644 index 00000000000..e536ee4b1c4 --- /dev/null +++ b/CHANGES/7954.feature @@ -0,0 +1 @@ +Implement happy eyeballs diff --git a/CHANGES/8062.feature.rst b/CHANGES/8062.feature.rst new file mode 100644 index 00000000000..6e9814f09a0 --- /dev/null +++ b/CHANGES/8062.feature.rst @@ -0,0 +1 @@ +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 new file mode 100644 index 00000000000..b3aec71bdf7 --- /dev/null +++ b/CHANGES/8088.contrib.rst @@ -0,0 +1 @@ +Enabled HTTP parser tests originally intended for 3.9.2 release -- by :user:`pajod`. diff --git a/CHANGES/8182.bugfix.rst b/CHANGES/8182.bugfix.rst new file mode 100644 index 00000000000..c960597587c --- /dev/null +++ b/CHANGES/8182.bugfix.rst @@ -0,0 +1,10 @@ +Adjusted ``FileResponse`` to check file existence and access when preparing the response -- by :user:`steverep`. + +The :py:class:`~aiohttp.web.FileResponse` class was modified to respond with + 403 Forbidden or 404 Not Found as appropriate. Previously, it would cause a + server error if the path did not exist or could not be accessed. Checks for + existence, non-regular files, and permissions were expected to be done in the + route handler. For static routes, this now permits a compressed file to exist + without its uncompressed variant and still be served. In addition, this + changes the response status for files without read permission to 403, and for + non-regular files from 404 to 403 for consistency. diff --git a/CHANGES/8270.bugfix.rst b/CHANGES/8270.bugfix.rst new file mode 100644 index 00000000000..bda77223959 --- /dev/null +++ b/CHANGES/8270.bugfix.rst @@ -0,0 +1,9 @@ +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 new file mode 100644 index 00000000000..e3e1a309be1 --- /dev/null +++ b/CHANGES/8346.misc.rst @@ -0,0 +1 @@ +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 new file mode 100644 index 00000000000..493916f0421 --- /dev/null +++ b/CHANGES/8364.misc.rst @@ -0,0 +1 @@ +Minor improvements to static typing -- by :user:`Dreamsorcerer`. diff --git a/CHANGES/8403.doc.rst b/CHANGES/8403.doc.rst new file mode 100644 index 00000000000..71618c3c99c --- /dev/null +++ b/CHANGES/8403.doc.rst @@ -0,0 +1 @@ +Improve the docs for the `ssl` params. diff --git a/CHANGES/8444.bugfix b/CHANGES/8444.bugfix new file mode 100644 index 00000000000..774e13064a7 --- /dev/null +++ b/CHANGES/8444.bugfix @@ -0,0 +1,2 @@ +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 new file mode 100644 index 00000000000..1d42136ebd7 --- /dev/null +++ b/CHANGES/8463.misc.rst @@ -0,0 +1 @@ +Added a 3.11-specific overloads to ``ClientSession`` -- by :user:`max-muoto`. diff --git a/CHANGES/8481.feature.rst b/CHANGES/8481.feature.rst new file mode 120000 index 00000000000..f569cd92882 --- /dev/null +++ b/CHANGES/8481.feature.rst @@ -0,0 +1 @@ +6722.feature \ No newline at end of file diff --git a/CHANGES/8482.feature.rst b/CHANGES/8482.feature.rst new file mode 120000 index 00000000000..f569cd92882 --- /dev/null +++ b/CHANGES/8482.feature.rst @@ -0,0 +1 @@ +6722.feature \ No newline at end of file diff --git a/CHANGES/8491.misc.rst b/CHANGES/8491.misc.rst new file mode 100644 index 00000000000..223c549b2e2 --- /dev/null +++ b/CHANGES/8491.misc.rst @@ -0,0 +1 @@ +Simplified path checks for ``UrlDispatcher.add_static()`` method -- by :user:`steverep`. diff --git a/CHANGES/8495.breaking.rst b/CHANGES/8495.breaking.rst new file mode 100644 index 00000000000..90e78ea1d66 --- /dev/null +++ b/CHANGES/8495.breaking.rst @@ -0,0 +1,12 @@ +The shutdown logic in 3.9 waited on all tasks, which caused issues with some libraries. +In 3.10 we've changed this logic to only wait on request handlers. This means that it's +important for developers to correctly handle the lifecycle of background tasks using a +library such as ``aiojobs``. If an application is using ``handler_cancellation=True`` then +it is also a good idea to ensure that any :func:`asyncio.shield` calls are replaced with +:func:`aiojobs.aiohttp.shield`. + +Please read the updated documentation on these points: +- https://docs.aiohttp.org/en/stable/web_advanced.html#graceful-shutdown +- https://docs.aiohttp.org/en/stable/web_advanced.html#web-handler-cancellation + +-- by :user:`Dreamsorcerer` diff --git a/CHANGES/8498.misc.rst b/CHANGES/8498.misc.rst new file mode 100644 index 00000000000..5fcf3efd884 --- /dev/null +++ b/CHANGES/8498.misc.rst @@ -0,0 +1 @@ +Avoid creating a future on every websocket receive -- by :user:`bdraco`. diff --git a/CHANGES/8501.misc.rst b/CHANGES/8501.misc.rst new file mode 100644 index 00000000000..183c370178e --- /dev/null +++ b/CHANGES/8501.misc.rst @@ -0,0 +1 @@ +Use identity checks for all ``WSMsgType`` type compares -- by :user:`bdraco`. diff --git a/CHANGES/8507.bugfix.rst b/CHANGES/8507.bugfix.rst new file mode 100644 index 00000000000..9739536202d --- /dev/null +++ b/CHANGES/8507.bugfix.rst @@ -0,0 +1,8 @@ +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 new file mode 100644 index 00000000000..d0a90c7388f --- /dev/null +++ b/CHANGES/8510.misc.rst @@ -0,0 +1 @@ +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 new file mode 100644 index 00000000000..04f7edcc92d --- /dev/null +++ b/CHANGES/8522.misc.rst @@ -0,0 +1,5 @@ +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/CHANGES/8535.misc b/CHANGES/8535.misc new file mode 120000 index 00000000000..449a88eb908 --- /dev/null +++ b/CHANGES/8535.misc @@ -0,0 +1 @@ +7583.feature \ No newline at end of file From c031909fa79ce40bbbd9c8605bd1d1d58e52627d Mon Sep 17 00:00:00 2001 From: "J. Nick Koston" Date: Tue, 30 Jul 2024 13:35:57 -0500 Subject: [PATCH 10/24] Make sure type matches --- CHANGES/{8535.misc => 8535.feature} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename CHANGES/{8535.misc => 8535.feature} (100%) diff --git a/CHANGES/8535.misc b/CHANGES/8535.feature similarity index 100% rename from CHANGES/8535.misc rename to CHANGES/8535.feature From 1bf7d54f875447c3c9a163d76b6b7ebaa610b3db Mon Sep 17 00:00:00 2001 From: "J. Nick Koston" Date: Tue, 30 Jul 2024 13:36:34 -0500 Subject: [PATCH 11/24] use line blocks instead since its already in a list --- CHANGES/8495.breaking.rst | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/CHANGES/8495.breaking.rst b/CHANGES/8495.breaking.rst index 90e78ea1d66..e4639c89899 100644 --- a/CHANGES/8495.breaking.rst +++ b/CHANGES/8495.breaking.rst @@ -6,7 +6,7 @@ it is also a good idea to ensure that any :func:`asyncio.shield` calls are repla :func:`aiojobs.aiohttp.shield`. Please read the updated documentation on these points: -- https://docs.aiohttp.org/en/stable/web_advanced.html#graceful-shutdown -- https://docs.aiohttp.org/en/stable/web_advanced.html#web-handler-cancellation +| https://docs.aiohttp.org/en/stable/web_advanced.html#graceful-shutdown +| https://docs.aiohttp.org/en/stable/web_advanced.html#web-handler-cancellation -- by :user:`Dreamsorcerer` From 208431023592c0c381d9f655f61fa17a9922c9d5 Mon Sep 17 00:00:00 2001 From: "J. Nick Koston" Date: Tue, 30 Jul 2024 13:39:24 -0500 Subject: [PATCH 12/24] use line blocks instead since its already in a list --- CHANGES/8495.breaking.rst | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/CHANGES/8495.breaking.rst b/CHANGES/8495.breaking.rst index e4639c89899..289d539bfbe 100644 --- a/CHANGES/8495.breaking.rst +++ b/CHANGES/8495.breaking.rst @@ -6,7 +6,7 @@ it is also a good idea to ensure that any :func:`asyncio.shield` calls are repla :func:`aiojobs.aiohttp.shield`. Please read the updated documentation on these points: -| https://docs.aiohttp.org/en/stable/web_advanced.html#graceful-shutdown -| https://docs.aiohttp.org/en/stable/web_advanced.html#web-handler-cancellation +https://docs.aiohttp.org/en/stable/web_advanced.html#graceful-shutdown |br| +https://docs.aiohttp.org/en/stable/web_advanced.html#web-handler-cancellation -- by :user:`Dreamsorcerer` From 4171e32b85a018e18dbd6fa450fc16daaaf08c65 Mon Sep 17 00:00:00 2001 From: "J. Nick Koston" Date: Tue, 30 Jul 2024 13:39:49 -0500 Subject: [PATCH 13/24] Update changes again --- CHANGES.rst | 310 ++++++++++++++++++++++++++++++++++++++ CHANGES/2492.feature | 1 - CHANGES/2507.feature.rst | 1 - CHANGES/3315.feature.rst | 1 - CHANGES/3958.doc | 1 - CHANGES/4462.bugfix.rst | 7 - CHANGES/6722.feature | 12 -- CHANGES/7297.feature | 1 - CHANGES/7583.feature | 14 -- CHANGES/7784.bugfix | 1 - CHANGES/7801.feature | 1 - CHANGES/7829.misc | 3 - CHANGES/7954.feature | 1 - CHANGES/8062.feature.rst | 1 - CHANGES/8088.contrib.rst | 1 - CHANGES/8182.bugfix.rst | 10 -- CHANGES/8270.bugfix.rst | 9 -- CHANGES/8346.misc.rst | 1 - CHANGES/8364.misc.rst | 1 - CHANGES/8403.doc.rst | 1 - CHANGES/8444.bugfix | 2 - CHANGES/8463.misc.rst | 1 - CHANGES/8481.feature.rst | 1 - CHANGES/8482.feature.rst | 1 - CHANGES/8491.misc.rst | 1 - CHANGES/8495.breaking.rst | 12 -- CHANGES/8498.misc.rst | 1 - CHANGES/8501.misc.rst | 1 - CHANGES/8507.bugfix.rst | 8 - CHANGES/8510.misc.rst | 1 - CHANGES/8522.misc.rst | 5 - CHANGES/8535.feature | 1 - 32 files changed, 310 insertions(+), 103 deletions(-) delete mode 100644 CHANGES/2492.feature delete mode 120000 CHANGES/2507.feature.rst delete mode 120000 CHANGES/3315.feature.rst delete mode 100644 CHANGES/3958.doc delete mode 100644 CHANGES/4462.bugfix.rst delete mode 100644 CHANGES/6722.feature delete mode 100644 CHANGES/7297.feature delete mode 100644 CHANGES/7583.feature delete mode 100644 CHANGES/7784.bugfix delete mode 100644 CHANGES/7801.feature delete mode 100644 CHANGES/7829.misc delete mode 100644 CHANGES/7954.feature delete mode 100644 CHANGES/8062.feature.rst delete mode 100644 CHANGES/8088.contrib.rst delete mode 100644 CHANGES/8182.bugfix.rst delete mode 100644 CHANGES/8270.bugfix.rst delete mode 100644 CHANGES/8346.misc.rst delete mode 100644 CHANGES/8364.misc.rst delete mode 100644 CHANGES/8403.doc.rst delete mode 100644 CHANGES/8444.bugfix delete mode 100644 CHANGES/8463.misc.rst delete mode 120000 CHANGES/8481.feature.rst delete mode 120000 CHANGES/8482.feature.rst delete mode 100644 CHANGES/8491.misc.rst delete mode 100644 CHANGES/8495.breaking.rst delete mode 100644 CHANGES/8498.misc.rst delete mode 100644 CHANGES/8501.misc.rst delete mode 100644 CHANGES/8507.bugfix.rst delete mode 100644 CHANGES/8510.misc.rst delete mode 100644 CHANGES/8522.misc.rst delete mode 120000 CHANGES/8535.feature diff --git a/CHANGES.rst b/CHANGES.rst index 5b02623067a..75383050c6d 100644 --- a/CHANGES.rst +++ b/CHANGES.rst @@ -10,6 +10,316 @@ .. towncrier release notes start +3.10.0 (2024-07-30) +======================== + +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`. + + + +- Adjusted ``FileResponse`` to check file existence and access when preparing the response -- by :user:`steverep`. + + The :py:class:`~aiohttp.web.FileResponse` class was modified to respond with + 403 Forbidden or 404 Not Found as appropriate. Previously, it would cause a + server error if the path did not exist or could not be accessed. Checks for + existence, non-regular files, and permissions were expected to be done in the + route handler. For static routes, this now permits a compressed file to exist + without its uncompressed variant and still be served. In addition, this + changes the response status for files without read permission to 403, and for + non-regular files from 404 to 403 for consistency. + + + *Related issues and pull requests on GitHub:* + :issue:`8182`. + + + +- 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`, :issue:`8535`. + + + +- 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`. + + + + +Removals and backward incompatible breaking changes +--------------------------------------------------- + +- The shutdown logic in 3.9 waited on all tasks, which caused issues with some libraries. + In 3.10 we've changed this logic to only wait on request handlers. This means that it's + important for developers to correctly handle the lifecycle of background tasks using a + library such as ``aiojobs``. If an application is using ``handler_cancellation=True`` then + it is also a good idea to ensure that any :func:`asyncio.shield` calls are replaced with + :func:`aiojobs.aiohttp.shield`. + + Please read the updated documentation on these points: + https://docs.aiohttp.org/en/stable/web_advanced.html#graceful-shutdown |br| + https://docs.aiohttp.org/en/stable/web_advanced.html#web-handler-cancellation + + -- by :user:`Dreamsorcerer` + + + *Related issues and pull requests on GitHub:* + :issue:`8495`. + + + + +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/8182.bugfix.rst b/CHANGES/8182.bugfix.rst deleted file mode 100644 index c960597587c..00000000000 --- a/CHANGES/8182.bugfix.rst +++ /dev/null @@ -1,10 +0,0 @@ -Adjusted ``FileResponse`` to check file existence and access when preparing the response -- by :user:`steverep`. - -The :py:class:`~aiohttp.web.FileResponse` class was modified to respond with - 403 Forbidden or 404 Not Found as appropriate. Previously, it would cause a - server error if the path did not exist or could not be accessed. Checks for - existence, non-regular files, and permissions were expected to be done in the - route handler. For static routes, this now permits a compressed file to exist - without its uncompressed variant and still be served. In addition, this - changes the response status for files without read permission to 403, and for - non-regular files from 404 to 403 for consistency. 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/8495.breaking.rst b/CHANGES/8495.breaking.rst deleted file mode 100644 index 289d539bfbe..00000000000 --- a/CHANGES/8495.breaking.rst +++ /dev/null @@ -1,12 +0,0 @@ -The shutdown logic in 3.9 waited on all tasks, which caused issues with some libraries. -In 3.10 we've changed this logic to only wait on request handlers. This means that it's -important for developers to correctly handle the lifecycle of background tasks using a -library such as ``aiojobs``. If an application is using ``handler_cancellation=True`` then -it is also a good idea to ensure that any :func:`asyncio.shield` calls are replaced with -:func:`aiojobs.aiohttp.shield`. - -Please read the updated documentation on these points: -https://docs.aiohttp.org/en/stable/web_advanced.html#graceful-shutdown |br| -https://docs.aiohttp.org/en/stable/web_advanced.html#web-handler-cancellation - --- by :user:`Dreamsorcerer` 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/CHANGES/8535.feature b/CHANGES/8535.feature deleted file mode 120000 index 449a88eb908..00000000000 --- a/CHANGES/8535.feature +++ /dev/null @@ -1 +0,0 @@ -7583.feature \ No newline at end of file From 89761f4d8019e5c18f7a87381eff4a175c72a1d7 Mon Sep 17 00:00:00 2001 From: "J. Nick Koston" Date: Tue, 30 Jul 2024 13:41:54 -0500 Subject: [PATCH 14/24] Revert "Update changes again" This reverts commit 4171e32b85a018e18dbd6fa450fc16daaaf08c65. --- CHANGES.rst | 310 -------------------------------------- CHANGES/2492.feature | 1 + CHANGES/2507.feature.rst | 1 + CHANGES/3315.feature.rst | 1 + CHANGES/3958.doc | 1 + CHANGES/4462.bugfix.rst | 7 + CHANGES/6722.feature | 12 ++ CHANGES/7297.feature | 1 + CHANGES/7583.feature | 14 ++ CHANGES/7784.bugfix | 1 + CHANGES/7801.feature | 1 + CHANGES/7829.misc | 3 + CHANGES/7954.feature | 1 + CHANGES/8062.feature.rst | 1 + CHANGES/8088.contrib.rst | 1 + CHANGES/8182.bugfix.rst | 10 ++ CHANGES/8270.bugfix.rst | 9 ++ CHANGES/8346.misc.rst | 1 + CHANGES/8364.misc.rst | 1 + CHANGES/8403.doc.rst | 1 + CHANGES/8444.bugfix | 2 + CHANGES/8463.misc.rst | 1 + CHANGES/8481.feature.rst | 1 + CHANGES/8482.feature.rst | 1 + CHANGES/8491.misc.rst | 1 + CHANGES/8495.breaking.rst | 12 ++ CHANGES/8498.misc.rst | 1 + CHANGES/8501.misc.rst | 1 + CHANGES/8507.bugfix.rst | 8 + CHANGES/8510.misc.rst | 1 + CHANGES/8522.misc.rst | 5 + CHANGES/8535.feature | 1 + 32 files changed, 103 insertions(+), 310 deletions(-) create mode 100644 CHANGES/2492.feature create mode 120000 CHANGES/2507.feature.rst create mode 120000 CHANGES/3315.feature.rst create mode 100644 CHANGES/3958.doc create mode 100644 CHANGES/4462.bugfix.rst create mode 100644 CHANGES/6722.feature create mode 100644 CHANGES/7297.feature create mode 100644 CHANGES/7583.feature create mode 100644 CHANGES/7784.bugfix create mode 100644 CHANGES/7801.feature create mode 100644 CHANGES/7829.misc create mode 100644 CHANGES/7954.feature create mode 100644 CHANGES/8062.feature.rst create mode 100644 CHANGES/8088.contrib.rst create mode 100644 CHANGES/8182.bugfix.rst create mode 100644 CHANGES/8270.bugfix.rst create mode 100644 CHANGES/8346.misc.rst create mode 100644 CHANGES/8364.misc.rst create mode 100644 CHANGES/8403.doc.rst create mode 100644 CHANGES/8444.bugfix create mode 100644 CHANGES/8463.misc.rst create mode 120000 CHANGES/8481.feature.rst create mode 120000 CHANGES/8482.feature.rst create mode 100644 CHANGES/8491.misc.rst create mode 100644 CHANGES/8495.breaking.rst create mode 100644 CHANGES/8498.misc.rst create mode 100644 CHANGES/8501.misc.rst create mode 100644 CHANGES/8507.bugfix.rst create mode 100644 CHANGES/8510.misc.rst create mode 100644 CHANGES/8522.misc.rst create mode 120000 CHANGES/8535.feature diff --git a/CHANGES.rst b/CHANGES.rst index 75383050c6d..5b02623067a 100644 --- a/CHANGES.rst +++ b/CHANGES.rst @@ -10,316 +10,6 @@ .. towncrier release notes start -3.10.0 (2024-07-30) -======================== - -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`. - - - -- Adjusted ``FileResponse`` to check file existence and access when preparing the response -- by :user:`steverep`. - - The :py:class:`~aiohttp.web.FileResponse` class was modified to respond with - 403 Forbidden or 404 Not Found as appropriate. Previously, it would cause a - server error if the path did not exist or could not be accessed. Checks for - existence, non-regular files, and permissions were expected to be done in the - route handler. For static routes, this now permits a compressed file to exist - without its uncompressed variant and still be served. In addition, this - changes the response status for files without read permission to 403, and for - non-regular files from 404 to 403 for consistency. - - - *Related issues and pull requests on GitHub:* - :issue:`8182`. - - - -- 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`, :issue:`8535`. - - - -- 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`. - - - - -Removals and backward incompatible breaking changes ---------------------------------------------------- - -- The shutdown logic in 3.9 waited on all tasks, which caused issues with some libraries. - In 3.10 we've changed this logic to only wait on request handlers. This means that it's - important for developers to correctly handle the lifecycle of background tasks using a - library such as ``aiojobs``. If an application is using ``handler_cancellation=True`` then - it is also a good idea to ensure that any :func:`asyncio.shield` calls are replaced with - :func:`aiojobs.aiohttp.shield`. - - Please read the updated documentation on these points: - https://docs.aiohttp.org/en/stable/web_advanced.html#graceful-shutdown |br| - https://docs.aiohttp.org/en/stable/web_advanced.html#web-handler-cancellation - - -- by :user:`Dreamsorcerer` - - - *Related issues and pull requests on GitHub:* - :issue:`8495`. - - - - -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 new file mode 100644 index 00000000000..5c98dbbbcf2 --- /dev/null +++ b/CHANGES/2492.feature @@ -0,0 +1 @@ +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 new file mode 120000 index 00000000000..f569cd92882 --- /dev/null +++ b/CHANGES/2507.feature.rst @@ -0,0 +1 @@ +6722.feature \ No newline at end of file diff --git a/CHANGES/3315.feature.rst b/CHANGES/3315.feature.rst new file mode 120000 index 00000000000..f569cd92882 --- /dev/null +++ b/CHANGES/3315.feature.rst @@ -0,0 +1 @@ +6722.feature \ No newline at end of file diff --git a/CHANGES/3958.doc b/CHANGES/3958.doc new file mode 100644 index 00000000000..9f3a9de1743 --- /dev/null +++ b/CHANGES/3958.doc @@ -0,0 +1 @@ +Add documentation for ``aiohttp.web.FileResponse``. diff --git a/CHANGES/4462.bugfix.rst b/CHANGES/4462.bugfix.rst new file mode 100644 index 00000000000..fe897a08b39 --- /dev/null +++ b/CHANGES/4462.bugfix.rst @@ -0,0 +1,7 @@ +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 new file mode 100644 index 00000000000..580efa5c5e2 --- /dev/null +++ b/CHANGES/6722.feature @@ -0,0 +1,12 @@ +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 new file mode 100644 index 00000000000..91d769a4b32 --- /dev/null +++ b/CHANGES/7297.feature @@ -0,0 +1 @@ +Added a feature to retry closed connections automatically for idempotent methods. -- by :user:`Dreamsorcerer` diff --git a/CHANGES/7583.feature b/CHANGES/7583.feature new file mode 100644 index 00000000000..c05e64be780 --- /dev/null +++ b/CHANGES/7583.feature @@ -0,0 +1,14 @@ +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 new file mode 100644 index 00000000000..1f8ba8ddb44 --- /dev/null +++ b/CHANGES/7784.bugfix @@ -0,0 +1 @@ +Fix duplicate cookie expiration calls in the CookieJar implementation diff --git a/CHANGES/7801.feature b/CHANGES/7801.feature new file mode 100644 index 00000000000..a6fb4d8a58e --- /dev/null +++ b/CHANGES/7801.feature @@ -0,0 +1 @@ +Separated connection and socket timeout errors, from ServerTimeoutError. diff --git a/CHANGES/7829.misc b/CHANGES/7829.misc new file mode 100644 index 00000000000..9eb060f4713 --- /dev/null +++ b/CHANGES/7829.misc @@ -0,0 +1,3 @@ +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 new file mode 100644 index 00000000000..e536ee4b1c4 --- /dev/null +++ b/CHANGES/7954.feature @@ -0,0 +1 @@ +Implement happy eyeballs diff --git a/CHANGES/8062.feature.rst b/CHANGES/8062.feature.rst new file mode 100644 index 00000000000..6e9814f09a0 --- /dev/null +++ b/CHANGES/8062.feature.rst @@ -0,0 +1 @@ +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 new file mode 100644 index 00000000000..b3aec71bdf7 --- /dev/null +++ b/CHANGES/8088.contrib.rst @@ -0,0 +1 @@ +Enabled HTTP parser tests originally intended for 3.9.2 release -- by :user:`pajod`. diff --git a/CHANGES/8182.bugfix.rst b/CHANGES/8182.bugfix.rst new file mode 100644 index 00000000000..c960597587c --- /dev/null +++ b/CHANGES/8182.bugfix.rst @@ -0,0 +1,10 @@ +Adjusted ``FileResponse`` to check file existence and access when preparing the response -- by :user:`steverep`. + +The :py:class:`~aiohttp.web.FileResponse` class was modified to respond with + 403 Forbidden or 404 Not Found as appropriate. Previously, it would cause a + server error if the path did not exist or could not be accessed. Checks for + existence, non-regular files, and permissions were expected to be done in the + route handler. For static routes, this now permits a compressed file to exist + without its uncompressed variant and still be served. In addition, this + changes the response status for files without read permission to 403, and for + non-regular files from 404 to 403 for consistency. diff --git a/CHANGES/8270.bugfix.rst b/CHANGES/8270.bugfix.rst new file mode 100644 index 00000000000..bda77223959 --- /dev/null +++ b/CHANGES/8270.bugfix.rst @@ -0,0 +1,9 @@ +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 new file mode 100644 index 00000000000..e3e1a309be1 --- /dev/null +++ b/CHANGES/8346.misc.rst @@ -0,0 +1 @@ +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 new file mode 100644 index 00000000000..493916f0421 --- /dev/null +++ b/CHANGES/8364.misc.rst @@ -0,0 +1 @@ +Minor improvements to static typing -- by :user:`Dreamsorcerer`. diff --git a/CHANGES/8403.doc.rst b/CHANGES/8403.doc.rst new file mode 100644 index 00000000000..71618c3c99c --- /dev/null +++ b/CHANGES/8403.doc.rst @@ -0,0 +1 @@ +Improve the docs for the `ssl` params. diff --git a/CHANGES/8444.bugfix b/CHANGES/8444.bugfix new file mode 100644 index 00000000000..774e13064a7 --- /dev/null +++ b/CHANGES/8444.bugfix @@ -0,0 +1,2 @@ +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 new file mode 100644 index 00000000000..1d42136ebd7 --- /dev/null +++ b/CHANGES/8463.misc.rst @@ -0,0 +1 @@ +Added a 3.11-specific overloads to ``ClientSession`` -- by :user:`max-muoto`. diff --git a/CHANGES/8481.feature.rst b/CHANGES/8481.feature.rst new file mode 120000 index 00000000000..f569cd92882 --- /dev/null +++ b/CHANGES/8481.feature.rst @@ -0,0 +1 @@ +6722.feature \ No newline at end of file diff --git a/CHANGES/8482.feature.rst b/CHANGES/8482.feature.rst new file mode 120000 index 00000000000..f569cd92882 --- /dev/null +++ b/CHANGES/8482.feature.rst @@ -0,0 +1 @@ +6722.feature \ No newline at end of file diff --git a/CHANGES/8491.misc.rst b/CHANGES/8491.misc.rst new file mode 100644 index 00000000000..223c549b2e2 --- /dev/null +++ b/CHANGES/8491.misc.rst @@ -0,0 +1 @@ +Simplified path checks for ``UrlDispatcher.add_static()`` method -- by :user:`steverep`. diff --git a/CHANGES/8495.breaking.rst b/CHANGES/8495.breaking.rst new file mode 100644 index 00000000000..289d539bfbe --- /dev/null +++ b/CHANGES/8495.breaking.rst @@ -0,0 +1,12 @@ +The shutdown logic in 3.9 waited on all tasks, which caused issues with some libraries. +In 3.10 we've changed this logic to only wait on request handlers. This means that it's +important for developers to correctly handle the lifecycle of background tasks using a +library such as ``aiojobs``. If an application is using ``handler_cancellation=True`` then +it is also a good idea to ensure that any :func:`asyncio.shield` calls are replaced with +:func:`aiojobs.aiohttp.shield`. + +Please read the updated documentation on these points: +https://docs.aiohttp.org/en/stable/web_advanced.html#graceful-shutdown |br| +https://docs.aiohttp.org/en/stable/web_advanced.html#web-handler-cancellation + +-- by :user:`Dreamsorcerer` diff --git a/CHANGES/8498.misc.rst b/CHANGES/8498.misc.rst new file mode 100644 index 00000000000..5fcf3efd884 --- /dev/null +++ b/CHANGES/8498.misc.rst @@ -0,0 +1 @@ +Avoid creating a future on every websocket receive -- by :user:`bdraco`. diff --git a/CHANGES/8501.misc.rst b/CHANGES/8501.misc.rst new file mode 100644 index 00000000000..183c370178e --- /dev/null +++ b/CHANGES/8501.misc.rst @@ -0,0 +1 @@ +Use identity checks for all ``WSMsgType`` type compares -- by :user:`bdraco`. diff --git a/CHANGES/8507.bugfix.rst b/CHANGES/8507.bugfix.rst new file mode 100644 index 00000000000..9739536202d --- /dev/null +++ b/CHANGES/8507.bugfix.rst @@ -0,0 +1,8 @@ +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 new file mode 100644 index 00000000000..d0a90c7388f --- /dev/null +++ b/CHANGES/8510.misc.rst @@ -0,0 +1 @@ +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 new file mode 100644 index 00000000000..04f7edcc92d --- /dev/null +++ b/CHANGES/8522.misc.rst @@ -0,0 +1,5 @@ +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/CHANGES/8535.feature b/CHANGES/8535.feature new file mode 120000 index 00000000000..449a88eb908 --- /dev/null +++ b/CHANGES/8535.feature @@ -0,0 +1 @@ +7583.feature \ No newline at end of file From afc2a6a92367b074a62528282f7a848fab4884ea Mon Sep 17 00:00:00 2001 From: "J. Nick Koston" Date: Tue, 30 Jul 2024 13:44:14 -0500 Subject: [PATCH 15/24] try backslashes --- CHANGES/8495.breaking.rst | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/CHANGES/8495.breaking.rst b/CHANGES/8495.breaking.rst index 289d539bfbe..cfa2b185645 100644 --- a/CHANGES/8495.breaking.rst +++ b/CHANGES/8495.breaking.rst @@ -5,8 +5,8 @@ library such as ``aiojobs``. If an application is using ``handler_cancellation=T it is also a good idea to ensure that any :func:`asyncio.shield` calls are replaced with :func:`aiojobs.aiohttp.shield`. -Please read the updated documentation on these points: -https://docs.aiohttp.org/en/stable/web_advanced.html#graceful-shutdown |br| +Please read the updated documentation on these points: \ +https://docs.aiohttp.org/en/stable/web_advanced.html#graceful-shutdown \ https://docs.aiohttp.org/en/stable/web_advanced.html#web-handler-cancellation -- by :user:`Dreamsorcerer` From de871b3bc12354cb535f930f883a380ee7d3db29 Mon Sep 17 00:00:00 2001 From: "J. Nick Koston" Date: Tue, 30 Jul 2024 13:44:33 -0500 Subject: [PATCH 16/24] Update changes again --- CHANGES.rst | 310 ++++++++++++++++++++++++++++++++++++++ CHANGES/2492.feature | 1 - CHANGES/2507.feature.rst | 1 - CHANGES/3315.feature.rst | 1 - CHANGES/3958.doc | 1 - CHANGES/4462.bugfix.rst | 7 - CHANGES/6722.feature | 12 -- CHANGES/7297.feature | 1 - CHANGES/7583.feature | 14 -- CHANGES/7784.bugfix | 1 - CHANGES/7801.feature | 1 - CHANGES/7829.misc | 3 - CHANGES/7954.feature | 1 - CHANGES/8062.feature.rst | 1 - CHANGES/8088.contrib.rst | 1 - CHANGES/8182.bugfix.rst | 10 -- CHANGES/8270.bugfix.rst | 9 -- CHANGES/8346.misc.rst | 1 - CHANGES/8364.misc.rst | 1 - CHANGES/8403.doc.rst | 1 - CHANGES/8444.bugfix | 2 - CHANGES/8463.misc.rst | 1 - CHANGES/8481.feature.rst | 1 - CHANGES/8482.feature.rst | 1 - CHANGES/8491.misc.rst | 1 - CHANGES/8495.breaking.rst | 12 -- CHANGES/8498.misc.rst | 1 - CHANGES/8501.misc.rst | 1 - CHANGES/8507.bugfix.rst | 8 - CHANGES/8510.misc.rst | 1 - CHANGES/8522.misc.rst | 5 - CHANGES/8535.feature | 1 - 32 files changed, 310 insertions(+), 103 deletions(-) delete mode 100644 CHANGES/2492.feature delete mode 120000 CHANGES/2507.feature.rst delete mode 120000 CHANGES/3315.feature.rst delete mode 100644 CHANGES/3958.doc delete mode 100644 CHANGES/4462.bugfix.rst delete mode 100644 CHANGES/6722.feature delete mode 100644 CHANGES/7297.feature delete mode 100644 CHANGES/7583.feature delete mode 100644 CHANGES/7784.bugfix delete mode 100644 CHANGES/7801.feature delete mode 100644 CHANGES/7829.misc delete mode 100644 CHANGES/7954.feature delete mode 100644 CHANGES/8062.feature.rst delete mode 100644 CHANGES/8088.contrib.rst delete mode 100644 CHANGES/8182.bugfix.rst delete mode 100644 CHANGES/8270.bugfix.rst delete mode 100644 CHANGES/8346.misc.rst delete mode 100644 CHANGES/8364.misc.rst delete mode 100644 CHANGES/8403.doc.rst delete mode 100644 CHANGES/8444.bugfix delete mode 100644 CHANGES/8463.misc.rst delete mode 120000 CHANGES/8481.feature.rst delete mode 120000 CHANGES/8482.feature.rst delete mode 100644 CHANGES/8491.misc.rst delete mode 100644 CHANGES/8495.breaking.rst delete mode 100644 CHANGES/8498.misc.rst delete mode 100644 CHANGES/8501.misc.rst delete mode 100644 CHANGES/8507.bugfix.rst delete mode 100644 CHANGES/8510.misc.rst delete mode 100644 CHANGES/8522.misc.rst delete mode 120000 CHANGES/8535.feature diff --git a/CHANGES.rst b/CHANGES.rst index 5b02623067a..8d7232f6533 100644 --- a/CHANGES.rst +++ b/CHANGES.rst @@ -10,6 +10,316 @@ .. towncrier release notes start +3.10.0 (2024-07-30) +======================== + +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`. + + + +- Adjusted ``FileResponse`` to check file existence and access when preparing the response -- by :user:`steverep`. + + The :py:class:`~aiohttp.web.FileResponse` class was modified to respond with + 403 Forbidden or 404 Not Found as appropriate. Previously, it would cause a + server error if the path did not exist or could not be accessed. Checks for + existence, non-regular files, and permissions were expected to be done in the + route handler. For static routes, this now permits a compressed file to exist + without its uncompressed variant and still be served. In addition, this + changes the response status for files without read permission to 403, and for + non-regular files from 404 to 403 for consistency. + + + *Related issues and pull requests on GitHub:* + :issue:`8182`. + + + +- 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`, :issue:`8535`. + + + +- 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`. + + + + +Removals and backward incompatible breaking changes +--------------------------------------------------- + +- The shutdown logic in 3.9 waited on all tasks, which caused issues with some libraries. + In 3.10 we've changed this logic to only wait on request handlers. This means that it's + important for developers to correctly handle the lifecycle of background tasks using a + library such as ``aiojobs``. If an application is using ``handler_cancellation=True`` then + it is also a good idea to ensure that any :func:`asyncio.shield` calls are replaced with + :func:`aiojobs.aiohttp.shield`. + + Please read the updated documentation on these points: \ + https://docs.aiohttp.org/en/stable/web_advanced.html#graceful-shutdown \ + https://docs.aiohttp.org/en/stable/web_advanced.html#web-handler-cancellation + + -- by :user:`Dreamsorcerer` + + + *Related issues and pull requests on GitHub:* + :issue:`8495`. + + + + +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/8182.bugfix.rst b/CHANGES/8182.bugfix.rst deleted file mode 100644 index c960597587c..00000000000 --- a/CHANGES/8182.bugfix.rst +++ /dev/null @@ -1,10 +0,0 @@ -Adjusted ``FileResponse`` to check file existence and access when preparing the response -- by :user:`steverep`. - -The :py:class:`~aiohttp.web.FileResponse` class was modified to respond with - 403 Forbidden or 404 Not Found as appropriate. Previously, it would cause a - server error if the path did not exist or could not be accessed. Checks for - existence, non-regular files, and permissions were expected to be done in the - route handler. For static routes, this now permits a compressed file to exist - without its uncompressed variant and still be served. In addition, this - changes the response status for files without read permission to 403, and for - non-regular files from 404 to 403 for consistency. 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/8495.breaking.rst b/CHANGES/8495.breaking.rst deleted file mode 100644 index cfa2b185645..00000000000 --- a/CHANGES/8495.breaking.rst +++ /dev/null @@ -1,12 +0,0 @@ -The shutdown logic in 3.9 waited on all tasks, which caused issues with some libraries. -In 3.10 we've changed this logic to only wait on request handlers. This means that it's -important for developers to correctly handle the lifecycle of background tasks using a -library such as ``aiojobs``. If an application is using ``handler_cancellation=True`` then -it is also a good idea to ensure that any :func:`asyncio.shield` calls are replaced with -:func:`aiojobs.aiohttp.shield`. - -Please read the updated documentation on these points: \ -https://docs.aiohttp.org/en/stable/web_advanced.html#graceful-shutdown \ -https://docs.aiohttp.org/en/stable/web_advanced.html#web-handler-cancellation - --- by :user:`Dreamsorcerer` 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/CHANGES/8535.feature b/CHANGES/8535.feature deleted file mode 120000 index 449a88eb908..00000000000 --- a/CHANGES/8535.feature +++ /dev/null @@ -1 +0,0 @@ -7583.feature \ No newline at end of file From 981504e3c2a54536fefccf0c39a1bc7f98b055a6 Mon Sep 17 00:00:00 2001 From: "J. Nick Koston" Date: Tue, 30 Jul 2024 13:51:56 -0500 Subject: [PATCH 17/24] Revert "Update changes again" This reverts commit de871b3bc12354cb535f930f883a380ee7d3db29. --- CHANGES.rst | 310 -------------------------------------- CHANGES/2492.feature | 1 + CHANGES/2507.feature.rst | 1 + CHANGES/3315.feature.rst | 1 + CHANGES/3958.doc | 1 + CHANGES/4462.bugfix.rst | 7 + CHANGES/6722.feature | 12 ++ CHANGES/7297.feature | 1 + CHANGES/7583.feature | 14 ++ CHANGES/7784.bugfix | 1 + CHANGES/7801.feature | 1 + CHANGES/7829.misc | 3 + CHANGES/7954.feature | 1 + CHANGES/8062.feature.rst | 1 + CHANGES/8088.contrib.rst | 1 + CHANGES/8182.bugfix.rst | 10 ++ CHANGES/8270.bugfix.rst | 9 ++ CHANGES/8346.misc.rst | 1 + CHANGES/8364.misc.rst | 1 + CHANGES/8403.doc.rst | 1 + CHANGES/8444.bugfix | 2 + CHANGES/8463.misc.rst | 1 + CHANGES/8481.feature.rst | 1 + CHANGES/8482.feature.rst | 1 + CHANGES/8491.misc.rst | 1 + CHANGES/8495.breaking.rst | 12 ++ CHANGES/8498.misc.rst | 1 + CHANGES/8501.misc.rst | 1 + CHANGES/8507.bugfix.rst | 8 + CHANGES/8510.misc.rst | 1 + CHANGES/8522.misc.rst | 5 + CHANGES/8535.feature | 1 + 32 files changed, 103 insertions(+), 310 deletions(-) create mode 100644 CHANGES/2492.feature create mode 120000 CHANGES/2507.feature.rst create mode 120000 CHANGES/3315.feature.rst create mode 100644 CHANGES/3958.doc create mode 100644 CHANGES/4462.bugfix.rst create mode 100644 CHANGES/6722.feature create mode 100644 CHANGES/7297.feature create mode 100644 CHANGES/7583.feature create mode 100644 CHANGES/7784.bugfix create mode 100644 CHANGES/7801.feature create mode 100644 CHANGES/7829.misc create mode 100644 CHANGES/7954.feature create mode 100644 CHANGES/8062.feature.rst create mode 100644 CHANGES/8088.contrib.rst create mode 100644 CHANGES/8182.bugfix.rst create mode 100644 CHANGES/8270.bugfix.rst create mode 100644 CHANGES/8346.misc.rst create mode 100644 CHANGES/8364.misc.rst create mode 100644 CHANGES/8403.doc.rst create mode 100644 CHANGES/8444.bugfix create mode 100644 CHANGES/8463.misc.rst create mode 120000 CHANGES/8481.feature.rst create mode 120000 CHANGES/8482.feature.rst create mode 100644 CHANGES/8491.misc.rst create mode 100644 CHANGES/8495.breaking.rst create mode 100644 CHANGES/8498.misc.rst create mode 100644 CHANGES/8501.misc.rst create mode 100644 CHANGES/8507.bugfix.rst create mode 100644 CHANGES/8510.misc.rst create mode 100644 CHANGES/8522.misc.rst create mode 120000 CHANGES/8535.feature diff --git a/CHANGES.rst b/CHANGES.rst index 8d7232f6533..5b02623067a 100644 --- a/CHANGES.rst +++ b/CHANGES.rst @@ -10,316 +10,6 @@ .. towncrier release notes start -3.10.0 (2024-07-30) -======================== - -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`. - - - -- Adjusted ``FileResponse`` to check file existence and access when preparing the response -- by :user:`steverep`. - - The :py:class:`~aiohttp.web.FileResponse` class was modified to respond with - 403 Forbidden or 404 Not Found as appropriate. Previously, it would cause a - server error if the path did not exist or could not be accessed. Checks for - existence, non-regular files, and permissions were expected to be done in the - route handler. For static routes, this now permits a compressed file to exist - without its uncompressed variant and still be served. In addition, this - changes the response status for files without read permission to 403, and for - non-regular files from 404 to 403 for consistency. - - - *Related issues and pull requests on GitHub:* - :issue:`8182`. - - - -- 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`, :issue:`8535`. - - - -- 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`. - - - - -Removals and backward incompatible breaking changes ---------------------------------------------------- - -- The shutdown logic in 3.9 waited on all tasks, which caused issues with some libraries. - In 3.10 we've changed this logic to only wait on request handlers. This means that it's - important for developers to correctly handle the lifecycle of background tasks using a - library such as ``aiojobs``. If an application is using ``handler_cancellation=True`` then - it is also a good idea to ensure that any :func:`asyncio.shield` calls are replaced with - :func:`aiojobs.aiohttp.shield`. - - Please read the updated documentation on these points: \ - https://docs.aiohttp.org/en/stable/web_advanced.html#graceful-shutdown \ - https://docs.aiohttp.org/en/stable/web_advanced.html#web-handler-cancellation - - -- by :user:`Dreamsorcerer` - - - *Related issues and pull requests on GitHub:* - :issue:`8495`. - - - - -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 new file mode 100644 index 00000000000..5c98dbbbcf2 --- /dev/null +++ b/CHANGES/2492.feature @@ -0,0 +1 @@ +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 new file mode 120000 index 00000000000..f569cd92882 --- /dev/null +++ b/CHANGES/2507.feature.rst @@ -0,0 +1 @@ +6722.feature \ No newline at end of file diff --git a/CHANGES/3315.feature.rst b/CHANGES/3315.feature.rst new file mode 120000 index 00000000000..f569cd92882 --- /dev/null +++ b/CHANGES/3315.feature.rst @@ -0,0 +1 @@ +6722.feature \ No newline at end of file diff --git a/CHANGES/3958.doc b/CHANGES/3958.doc new file mode 100644 index 00000000000..9f3a9de1743 --- /dev/null +++ b/CHANGES/3958.doc @@ -0,0 +1 @@ +Add documentation for ``aiohttp.web.FileResponse``. diff --git a/CHANGES/4462.bugfix.rst b/CHANGES/4462.bugfix.rst new file mode 100644 index 00000000000..fe897a08b39 --- /dev/null +++ b/CHANGES/4462.bugfix.rst @@ -0,0 +1,7 @@ +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 new file mode 100644 index 00000000000..580efa5c5e2 --- /dev/null +++ b/CHANGES/6722.feature @@ -0,0 +1,12 @@ +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 new file mode 100644 index 00000000000..91d769a4b32 --- /dev/null +++ b/CHANGES/7297.feature @@ -0,0 +1 @@ +Added a feature to retry closed connections automatically for idempotent methods. -- by :user:`Dreamsorcerer` diff --git a/CHANGES/7583.feature b/CHANGES/7583.feature new file mode 100644 index 00000000000..c05e64be780 --- /dev/null +++ b/CHANGES/7583.feature @@ -0,0 +1,14 @@ +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 new file mode 100644 index 00000000000..1f8ba8ddb44 --- /dev/null +++ b/CHANGES/7784.bugfix @@ -0,0 +1 @@ +Fix duplicate cookie expiration calls in the CookieJar implementation diff --git a/CHANGES/7801.feature b/CHANGES/7801.feature new file mode 100644 index 00000000000..a6fb4d8a58e --- /dev/null +++ b/CHANGES/7801.feature @@ -0,0 +1 @@ +Separated connection and socket timeout errors, from ServerTimeoutError. diff --git a/CHANGES/7829.misc b/CHANGES/7829.misc new file mode 100644 index 00000000000..9eb060f4713 --- /dev/null +++ b/CHANGES/7829.misc @@ -0,0 +1,3 @@ +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 new file mode 100644 index 00000000000..e536ee4b1c4 --- /dev/null +++ b/CHANGES/7954.feature @@ -0,0 +1 @@ +Implement happy eyeballs diff --git a/CHANGES/8062.feature.rst b/CHANGES/8062.feature.rst new file mode 100644 index 00000000000..6e9814f09a0 --- /dev/null +++ b/CHANGES/8062.feature.rst @@ -0,0 +1 @@ +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 new file mode 100644 index 00000000000..b3aec71bdf7 --- /dev/null +++ b/CHANGES/8088.contrib.rst @@ -0,0 +1 @@ +Enabled HTTP parser tests originally intended for 3.9.2 release -- by :user:`pajod`. diff --git a/CHANGES/8182.bugfix.rst b/CHANGES/8182.bugfix.rst new file mode 100644 index 00000000000..c960597587c --- /dev/null +++ b/CHANGES/8182.bugfix.rst @@ -0,0 +1,10 @@ +Adjusted ``FileResponse`` to check file existence and access when preparing the response -- by :user:`steverep`. + +The :py:class:`~aiohttp.web.FileResponse` class was modified to respond with + 403 Forbidden or 404 Not Found as appropriate. Previously, it would cause a + server error if the path did not exist or could not be accessed. Checks for + existence, non-regular files, and permissions were expected to be done in the + route handler. For static routes, this now permits a compressed file to exist + without its uncompressed variant and still be served. In addition, this + changes the response status for files without read permission to 403, and for + non-regular files from 404 to 403 for consistency. diff --git a/CHANGES/8270.bugfix.rst b/CHANGES/8270.bugfix.rst new file mode 100644 index 00000000000..bda77223959 --- /dev/null +++ b/CHANGES/8270.bugfix.rst @@ -0,0 +1,9 @@ +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 new file mode 100644 index 00000000000..e3e1a309be1 --- /dev/null +++ b/CHANGES/8346.misc.rst @@ -0,0 +1 @@ +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 new file mode 100644 index 00000000000..493916f0421 --- /dev/null +++ b/CHANGES/8364.misc.rst @@ -0,0 +1 @@ +Minor improvements to static typing -- by :user:`Dreamsorcerer`. diff --git a/CHANGES/8403.doc.rst b/CHANGES/8403.doc.rst new file mode 100644 index 00000000000..71618c3c99c --- /dev/null +++ b/CHANGES/8403.doc.rst @@ -0,0 +1 @@ +Improve the docs for the `ssl` params. diff --git a/CHANGES/8444.bugfix b/CHANGES/8444.bugfix new file mode 100644 index 00000000000..774e13064a7 --- /dev/null +++ b/CHANGES/8444.bugfix @@ -0,0 +1,2 @@ +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 new file mode 100644 index 00000000000..1d42136ebd7 --- /dev/null +++ b/CHANGES/8463.misc.rst @@ -0,0 +1 @@ +Added a 3.11-specific overloads to ``ClientSession`` -- by :user:`max-muoto`. diff --git a/CHANGES/8481.feature.rst b/CHANGES/8481.feature.rst new file mode 120000 index 00000000000..f569cd92882 --- /dev/null +++ b/CHANGES/8481.feature.rst @@ -0,0 +1 @@ +6722.feature \ No newline at end of file diff --git a/CHANGES/8482.feature.rst b/CHANGES/8482.feature.rst new file mode 120000 index 00000000000..f569cd92882 --- /dev/null +++ b/CHANGES/8482.feature.rst @@ -0,0 +1 @@ +6722.feature \ No newline at end of file diff --git a/CHANGES/8491.misc.rst b/CHANGES/8491.misc.rst new file mode 100644 index 00000000000..223c549b2e2 --- /dev/null +++ b/CHANGES/8491.misc.rst @@ -0,0 +1 @@ +Simplified path checks for ``UrlDispatcher.add_static()`` method -- by :user:`steverep`. diff --git a/CHANGES/8495.breaking.rst b/CHANGES/8495.breaking.rst new file mode 100644 index 00000000000..cfa2b185645 --- /dev/null +++ b/CHANGES/8495.breaking.rst @@ -0,0 +1,12 @@ +The shutdown logic in 3.9 waited on all tasks, which caused issues with some libraries. +In 3.10 we've changed this logic to only wait on request handlers. This means that it's +important for developers to correctly handle the lifecycle of background tasks using a +library such as ``aiojobs``. If an application is using ``handler_cancellation=True`` then +it is also a good idea to ensure that any :func:`asyncio.shield` calls are replaced with +:func:`aiojobs.aiohttp.shield`. + +Please read the updated documentation on these points: \ +https://docs.aiohttp.org/en/stable/web_advanced.html#graceful-shutdown \ +https://docs.aiohttp.org/en/stable/web_advanced.html#web-handler-cancellation + +-- by :user:`Dreamsorcerer` diff --git a/CHANGES/8498.misc.rst b/CHANGES/8498.misc.rst new file mode 100644 index 00000000000..5fcf3efd884 --- /dev/null +++ b/CHANGES/8498.misc.rst @@ -0,0 +1 @@ +Avoid creating a future on every websocket receive -- by :user:`bdraco`. diff --git a/CHANGES/8501.misc.rst b/CHANGES/8501.misc.rst new file mode 100644 index 00000000000..183c370178e --- /dev/null +++ b/CHANGES/8501.misc.rst @@ -0,0 +1 @@ +Use identity checks for all ``WSMsgType`` type compares -- by :user:`bdraco`. diff --git a/CHANGES/8507.bugfix.rst b/CHANGES/8507.bugfix.rst new file mode 100644 index 00000000000..9739536202d --- /dev/null +++ b/CHANGES/8507.bugfix.rst @@ -0,0 +1,8 @@ +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 new file mode 100644 index 00000000000..d0a90c7388f --- /dev/null +++ b/CHANGES/8510.misc.rst @@ -0,0 +1 @@ +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 new file mode 100644 index 00000000000..04f7edcc92d --- /dev/null +++ b/CHANGES/8522.misc.rst @@ -0,0 +1,5 @@ +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/CHANGES/8535.feature b/CHANGES/8535.feature new file mode 120000 index 00000000000..449a88eb908 --- /dev/null +++ b/CHANGES/8535.feature @@ -0,0 +1 @@ +7583.feature \ No newline at end of file From 7e25ede9b1a2cbfc6ff1f68662b21727cf75f64c Mon Sep 17 00:00:00 2001 From: "J. Nick Koston" Date: Tue, 30 Jul 2024 13:57:07 -0500 Subject: [PATCH 18/24] Use past tense for changelog messages --- CHANGES/2492.feature | 2 +- CHANGES/3958.doc | 2 +- CHANGES/7583.feature | 2 +- CHANGES/8346.misc.rst | 2 +- CHANGES/8444.bugfix | 2 +- CHANGES/8498.misc.rst | 2 +- CHANGES/8501.misc.rst | 2 +- CHANGES/8522.misc.rst | 2 +- 8 files changed, 8 insertions(+), 8 deletions(-) diff --git a/CHANGES/2492.feature b/CHANGES/2492.feature index 5c98dbbbcf2..9b2244390a2 100644 --- a/CHANGES/2492.feature +++ b/CHANGES/2492.feature @@ -1 +1 @@ -Add a Request.wait_for_disconnection() method, as means of allowing request handlers to be notified of premature client disconnections. +Added a Request.wait_for_disconnection() method, as means of allowing request handlers to be notified of premature client disconnections. diff --git a/CHANGES/3958.doc b/CHANGES/3958.doc index 9f3a9de1743..0fcb1dde698 100644 --- a/CHANGES/3958.doc +++ b/CHANGES/3958.doc @@ -1 +1 @@ -Add documentation for ``aiohttp.web.FileResponse``. +Added documentation for ``aiohttp.web.FileResponse``. diff --git a/CHANGES/7583.feature b/CHANGES/7583.feature index c05e64be780..7480f780d6f 100644 --- a/CHANGES/7583.feature +++ b/CHANGES/7583.feature @@ -1,4 +1,4 @@ -Implement filter_cookies() with domain-matching and path-matching on the keys, instead of testing every single cookie. +Implemented 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 diff --git a/CHANGES/8346.misc.rst b/CHANGES/8346.misc.rst index e3e1a309be1..89a8e933836 100644 --- a/CHANGES/8346.misc.rst +++ b/CHANGES/8346.misc.rst @@ -1 +1 @@ -Add `nacl_middleware `_ to the list of middlewares in the third party section of the documentation. +Added `nacl_middleware `_ to the list of middlewares in the third party section of the documentation. diff --git a/CHANGES/8444.bugfix b/CHANGES/8444.bugfix index 774e13064a7..ed059f1890b 100644 --- a/CHANGES/8444.bugfix +++ b/CHANGES/8444.bugfix @@ -1,2 +1,2 @@ -Fix ``ws_connect`` not respecting `receive_timeout`` on WS(S) connection. +Fixed ``ws_connect`` not respecting `receive_timeout`` on WS(S) connection. -- by :user:`arcivanov`. diff --git a/CHANGES/8498.misc.rst b/CHANGES/8498.misc.rst index 5fcf3efd884..2aa2aa4a42b 100644 --- a/CHANGES/8498.misc.rst +++ b/CHANGES/8498.misc.rst @@ -1 +1 @@ -Avoid creating a future on every websocket receive -- by :user:`bdraco`. +Avoided creating a future on every websocket receive -- by :user:`bdraco`. diff --git a/CHANGES/8501.misc.rst b/CHANGES/8501.misc.rst index 183c370178e..689c4f9edbf 100644 --- a/CHANGES/8501.misc.rst +++ b/CHANGES/8501.misc.rst @@ -1 +1 @@ -Use identity checks for all ``WSMsgType`` type compares -- by :user:`bdraco`. +Updated identity checks for all ``WSMsgType`` type compares -- by :user:`bdraco`. diff --git a/CHANGES/8522.misc.rst b/CHANGES/8522.misc.rst index 04f7edcc92d..1fddc580c4c 100644 --- a/CHANGES/8522.misc.rst +++ b/CHANGES/8522.misc.rst @@ -1,4 +1,4 @@ -Restore :py:class:`~aiohttp.resolver.AsyncResolver` to be the default resolver. -- by :user:`bdraco`. +Restored :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 From dbce46fe69fb6b87e835ff04047dbb2fa0db0013 Mon Sep 17 00:00:00 2001 From: "J. Nick Koston" Date: Tue, 30 Jul 2024 13:57:48 -0500 Subject: [PATCH 19/24] Regenerate with towncrier again --- CHANGES.rst | 310 ++++++++++++++++++++++++++++++++++++++ CHANGES/2492.feature | 1 - CHANGES/2507.feature.rst | 1 - CHANGES/3315.feature.rst | 1 - CHANGES/3958.doc | 1 - CHANGES/4462.bugfix.rst | 7 - CHANGES/6722.feature | 12 -- CHANGES/7297.feature | 1 - CHANGES/7583.feature | 14 -- CHANGES/7784.bugfix | 1 - CHANGES/7801.feature | 1 - CHANGES/7829.misc | 3 - CHANGES/7954.feature | 1 - CHANGES/8062.feature.rst | 1 - CHANGES/8088.contrib.rst | 1 - CHANGES/8182.bugfix.rst | 10 -- CHANGES/8270.bugfix.rst | 9 -- CHANGES/8346.misc.rst | 1 - CHANGES/8364.misc.rst | 1 - CHANGES/8403.doc.rst | 1 - CHANGES/8444.bugfix | 2 - CHANGES/8463.misc.rst | 1 - CHANGES/8481.feature.rst | 1 - CHANGES/8482.feature.rst | 1 - CHANGES/8491.misc.rst | 1 - CHANGES/8495.breaking.rst | 12 -- CHANGES/8498.misc.rst | 1 - CHANGES/8501.misc.rst | 1 - CHANGES/8507.bugfix.rst | 8 - CHANGES/8510.misc.rst | 1 - CHANGES/8522.misc.rst | 5 - CHANGES/8535.feature | 1 - 32 files changed, 310 insertions(+), 103 deletions(-) delete mode 100644 CHANGES/2492.feature delete mode 120000 CHANGES/2507.feature.rst delete mode 120000 CHANGES/3315.feature.rst delete mode 100644 CHANGES/3958.doc delete mode 100644 CHANGES/4462.bugfix.rst delete mode 100644 CHANGES/6722.feature delete mode 100644 CHANGES/7297.feature delete mode 100644 CHANGES/7583.feature delete mode 100644 CHANGES/7784.bugfix delete mode 100644 CHANGES/7801.feature delete mode 100644 CHANGES/7829.misc delete mode 100644 CHANGES/7954.feature delete mode 100644 CHANGES/8062.feature.rst delete mode 100644 CHANGES/8088.contrib.rst delete mode 100644 CHANGES/8182.bugfix.rst delete mode 100644 CHANGES/8270.bugfix.rst delete mode 100644 CHANGES/8346.misc.rst delete mode 100644 CHANGES/8364.misc.rst delete mode 100644 CHANGES/8403.doc.rst delete mode 100644 CHANGES/8444.bugfix delete mode 100644 CHANGES/8463.misc.rst delete mode 120000 CHANGES/8481.feature.rst delete mode 120000 CHANGES/8482.feature.rst delete mode 100644 CHANGES/8491.misc.rst delete mode 100644 CHANGES/8495.breaking.rst delete mode 100644 CHANGES/8498.misc.rst delete mode 100644 CHANGES/8501.misc.rst delete mode 100644 CHANGES/8507.bugfix.rst delete mode 100644 CHANGES/8510.misc.rst delete mode 100644 CHANGES/8522.misc.rst delete mode 120000 CHANGES/8535.feature diff --git a/CHANGES.rst b/CHANGES.rst index 5b02623067a..618aa3b2dd9 100644 --- a/CHANGES.rst +++ b/CHANGES.rst @@ -10,6 +10,316 @@ .. towncrier release notes start +3.10.0 (2024-07-30) +======================== + +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`. + + + +- Adjusted ``FileResponse`` to check file existence and access when preparing the response -- by :user:`steverep`. + + The :py:class:`~aiohttp.web.FileResponse` class was modified to respond with + 403 Forbidden or 404 Not Found as appropriate. Previously, it would cause a + server error if the path did not exist or could not be accessed. Checks for + existence, non-regular files, and permissions were expected to be done in the + route handler. For static routes, this now permits a compressed file to exist + without its uncompressed variant and still be served. In addition, this + changes the response status for files without read permission to 403, and for + non-regular files from 404 to 403 for consistency. + + + *Related issues and pull requests on GitHub:* + :issue:`8182`. + + + +- 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`. + + + +- Fixed ``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 +-------- + +- Added 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`. + + + +- Implemented 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`, :issue:`8535`. + + + +- 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`. + + + + +Removals and backward incompatible breaking changes +--------------------------------------------------- + +- The shutdown logic in 3.9 waited on all tasks, which caused issues with some libraries. + In 3.10 we've changed this logic to only wait on request handlers. This means that it's + important for developers to correctly handle the lifecycle of background tasks using a + library such as ``aiojobs``. If an application is using ``handler_cancellation=True`` then + it is also a good idea to ensure that any :func:`asyncio.shield` calls are replaced with + :func:`aiojobs.aiohttp.shield`. + + Please read the updated documentation on these points: \ + https://docs.aiohttp.org/en/stable/web_advanced.html#graceful-shutdown \ + https://docs.aiohttp.org/en/stable/web_advanced.html#web-handler-cancellation + + -- by :user:`Dreamsorcerer` + + + *Related issues and pull requests on GitHub:* + :issue:`8495`. + + + + +Improved documentation +---------------------- + +- Added 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`. + + + +- Added `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`. + + + +- Avoided creating a future on every websocket receive -- by :user:`bdraco`. + + + *Related issues and pull requests on GitHub:* + :issue:`8498`. + + + +- Updated 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`. + + + +- Restored :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 9b2244390a2..00000000000 --- a/CHANGES/2492.feature +++ /dev/null @@ -1 +0,0 @@ -Added 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 0fcb1dde698..00000000000 --- a/CHANGES/3958.doc +++ /dev/null @@ -1 +0,0 @@ -Added 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 7480f780d6f..00000000000 --- a/CHANGES/7583.feature +++ /dev/null @@ -1,14 +0,0 @@ -Implemented 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/8182.bugfix.rst b/CHANGES/8182.bugfix.rst deleted file mode 100644 index c960597587c..00000000000 --- a/CHANGES/8182.bugfix.rst +++ /dev/null @@ -1,10 +0,0 @@ -Adjusted ``FileResponse`` to check file existence and access when preparing the response -- by :user:`steverep`. - -The :py:class:`~aiohttp.web.FileResponse` class was modified to respond with - 403 Forbidden or 404 Not Found as appropriate. Previously, it would cause a - server error if the path did not exist or could not be accessed. Checks for - existence, non-regular files, and permissions were expected to be done in the - route handler. For static routes, this now permits a compressed file to exist - without its uncompressed variant and still be served. In addition, this - changes the response status for files without read permission to 403, and for - non-regular files from 404 to 403 for consistency. 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 89a8e933836..00000000000 --- a/CHANGES/8346.misc.rst +++ /dev/null @@ -1 +0,0 @@ -Added `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 ed059f1890b..00000000000 --- a/CHANGES/8444.bugfix +++ /dev/null @@ -1,2 +0,0 @@ -Fixed ``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/8495.breaking.rst b/CHANGES/8495.breaking.rst deleted file mode 100644 index cfa2b185645..00000000000 --- a/CHANGES/8495.breaking.rst +++ /dev/null @@ -1,12 +0,0 @@ -The shutdown logic in 3.9 waited on all tasks, which caused issues with some libraries. -In 3.10 we've changed this logic to only wait on request handlers. This means that it's -important for developers to correctly handle the lifecycle of background tasks using a -library such as ``aiojobs``. If an application is using ``handler_cancellation=True`` then -it is also a good idea to ensure that any :func:`asyncio.shield` calls are replaced with -:func:`aiojobs.aiohttp.shield`. - -Please read the updated documentation on these points: \ -https://docs.aiohttp.org/en/stable/web_advanced.html#graceful-shutdown \ -https://docs.aiohttp.org/en/stable/web_advanced.html#web-handler-cancellation - --- by :user:`Dreamsorcerer` diff --git a/CHANGES/8498.misc.rst b/CHANGES/8498.misc.rst deleted file mode 100644 index 2aa2aa4a42b..00000000000 --- a/CHANGES/8498.misc.rst +++ /dev/null @@ -1 +0,0 @@ -Avoided 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 689c4f9edbf..00000000000 --- a/CHANGES/8501.misc.rst +++ /dev/null @@ -1 +0,0 @@ -Updated 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 1fddc580c4c..00000000000 --- a/CHANGES/8522.misc.rst +++ /dev/null @@ -1,5 +0,0 @@ -Restored :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/CHANGES/8535.feature b/CHANGES/8535.feature deleted file mode 120000 index 449a88eb908..00000000000 --- a/CHANGES/8535.feature +++ /dev/null @@ -1 +0,0 @@ -7583.feature \ No newline at end of file From 6978784353d19bd88a3d3b8778544fab56af25a2 Mon Sep 17 00:00:00 2001 From: "J. Nick Koston" Date: Tue, 30 Jul 2024 14:01:46 -0500 Subject: [PATCH 20/24] Revert "Regenerate with towncrier again" This reverts commit dbce46fe69fb6b87e835ff04047dbb2fa0db0013. --- CHANGES.rst | 310 -------------------------------------- CHANGES/2492.feature | 1 + CHANGES/2507.feature.rst | 1 + CHANGES/3315.feature.rst | 1 + CHANGES/3958.doc | 1 + CHANGES/4462.bugfix.rst | 7 + CHANGES/6722.feature | 12 ++ CHANGES/7297.feature | 1 + CHANGES/7583.feature | 14 ++ CHANGES/7784.bugfix | 1 + CHANGES/7801.feature | 1 + CHANGES/7829.misc | 3 + CHANGES/7954.feature | 1 + CHANGES/8062.feature.rst | 1 + CHANGES/8088.contrib.rst | 1 + CHANGES/8182.bugfix.rst | 10 ++ CHANGES/8270.bugfix.rst | 9 ++ CHANGES/8346.misc.rst | 1 + CHANGES/8364.misc.rst | 1 + CHANGES/8403.doc.rst | 1 + CHANGES/8444.bugfix | 2 + CHANGES/8463.misc.rst | 1 + CHANGES/8481.feature.rst | 1 + CHANGES/8482.feature.rst | 1 + CHANGES/8491.misc.rst | 1 + CHANGES/8495.breaking.rst | 12 ++ CHANGES/8498.misc.rst | 1 + CHANGES/8501.misc.rst | 1 + CHANGES/8507.bugfix.rst | 8 + CHANGES/8510.misc.rst | 1 + CHANGES/8522.misc.rst | 5 + CHANGES/8535.feature | 1 + 32 files changed, 103 insertions(+), 310 deletions(-) create mode 100644 CHANGES/2492.feature create mode 120000 CHANGES/2507.feature.rst create mode 120000 CHANGES/3315.feature.rst create mode 100644 CHANGES/3958.doc create mode 100644 CHANGES/4462.bugfix.rst create mode 100644 CHANGES/6722.feature create mode 100644 CHANGES/7297.feature create mode 100644 CHANGES/7583.feature create mode 100644 CHANGES/7784.bugfix create mode 100644 CHANGES/7801.feature create mode 100644 CHANGES/7829.misc create mode 100644 CHANGES/7954.feature create mode 100644 CHANGES/8062.feature.rst create mode 100644 CHANGES/8088.contrib.rst create mode 100644 CHANGES/8182.bugfix.rst create mode 100644 CHANGES/8270.bugfix.rst create mode 100644 CHANGES/8346.misc.rst create mode 100644 CHANGES/8364.misc.rst create mode 100644 CHANGES/8403.doc.rst create mode 100644 CHANGES/8444.bugfix create mode 100644 CHANGES/8463.misc.rst create mode 120000 CHANGES/8481.feature.rst create mode 120000 CHANGES/8482.feature.rst create mode 100644 CHANGES/8491.misc.rst create mode 100644 CHANGES/8495.breaking.rst create mode 100644 CHANGES/8498.misc.rst create mode 100644 CHANGES/8501.misc.rst create mode 100644 CHANGES/8507.bugfix.rst create mode 100644 CHANGES/8510.misc.rst create mode 100644 CHANGES/8522.misc.rst create mode 120000 CHANGES/8535.feature diff --git a/CHANGES.rst b/CHANGES.rst index 618aa3b2dd9..5b02623067a 100644 --- a/CHANGES.rst +++ b/CHANGES.rst @@ -10,316 +10,6 @@ .. towncrier release notes start -3.10.0 (2024-07-30) -======================== - -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`. - - - -- Adjusted ``FileResponse`` to check file existence and access when preparing the response -- by :user:`steverep`. - - The :py:class:`~aiohttp.web.FileResponse` class was modified to respond with - 403 Forbidden or 404 Not Found as appropriate. Previously, it would cause a - server error if the path did not exist or could not be accessed. Checks for - existence, non-regular files, and permissions were expected to be done in the - route handler. For static routes, this now permits a compressed file to exist - without its uncompressed variant and still be served. In addition, this - changes the response status for files without read permission to 403, and for - non-regular files from 404 to 403 for consistency. - - - *Related issues and pull requests on GitHub:* - :issue:`8182`. - - - -- 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`. - - - -- Fixed ``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 --------- - -- Added 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`. - - - -- Implemented 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`, :issue:`8535`. - - - -- 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`. - - - - -Removals and backward incompatible breaking changes ---------------------------------------------------- - -- The shutdown logic in 3.9 waited on all tasks, which caused issues with some libraries. - In 3.10 we've changed this logic to only wait on request handlers. This means that it's - important for developers to correctly handle the lifecycle of background tasks using a - library such as ``aiojobs``. If an application is using ``handler_cancellation=True`` then - it is also a good idea to ensure that any :func:`asyncio.shield` calls are replaced with - :func:`aiojobs.aiohttp.shield`. - - Please read the updated documentation on these points: \ - https://docs.aiohttp.org/en/stable/web_advanced.html#graceful-shutdown \ - https://docs.aiohttp.org/en/stable/web_advanced.html#web-handler-cancellation - - -- by :user:`Dreamsorcerer` - - - *Related issues and pull requests on GitHub:* - :issue:`8495`. - - - - -Improved documentation ----------------------- - -- Added 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`. - - - -- Added `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`. - - - -- Avoided creating a future on every websocket receive -- by :user:`bdraco`. - - - *Related issues and pull requests on GitHub:* - :issue:`8498`. - - - -- Updated 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`. - - - -- Restored :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 new file mode 100644 index 00000000000..9b2244390a2 --- /dev/null +++ b/CHANGES/2492.feature @@ -0,0 +1 @@ +Added 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 new file mode 120000 index 00000000000..f569cd92882 --- /dev/null +++ b/CHANGES/2507.feature.rst @@ -0,0 +1 @@ +6722.feature \ No newline at end of file diff --git a/CHANGES/3315.feature.rst b/CHANGES/3315.feature.rst new file mode 120000 index 00000000000..f569cd92882 --- /dev/null +++ b/CHANGES/3315.feature.rst @@ -0,0 +1 @@ +6722.feature \ No newline at end of file diff --git a/CHANGES/3958.doc b/CHANGES/3958.doc new file mode 100644 index 00000000000..0fcb1dde698 --- /dev/null +++ b/CHANGES/3958.doc @@ -0,0 +1 @@ +Added documentation for ``aiohttp.web.FileResponse``. diff --git a/CHANGES/4462.bugfix.rst b/CHANGES/4462.bugfix.rst new file mode 100644 index 00000000000..fe897a08b39 --- /dev/null +++ b/CHANGES/4462.bugfix.rst @@ -0,0 +1,7 @@ +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 new file mode 100644 index 00000000000..580efa5c5e2 --- /dev/null +++ b/CHANGES/6722.feature @@ -0,0 +1,12 @@ +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 new file mode 100644 index 00000000000..91d769a4b32 --- /dev/null +++ b/CHANGES/7297.feature @@ -0,0 +1 @@ +Added a feature to retry closed connections automatically for idempotent methods. -- by :user:`Dreamsorcerer` diff --git a/CHANGES/7583.feature b/CHANGES/7583.feature new file mode 100644 index 00000000000..7480f780d6f --- /dev/null +++ b/CHANGES/7583.feature @@ -0,0 +1,14 @@ +Implemented 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 new file mode 100644 index 00000000000..1f8ba8ddb44 --- /dev/null +++ b/CHANGES/7784.bugfix @@ -0,0 +1 @@ +Fix duplicate cookie expiration calls in the CookieJar implementation diff --git a/CHANGES/7801.feature b/CHANGES/7801.feature new file mode 100644 index 00000000000..a6fb4d8a58e --- /dev/null +++ b/CHANGES/7801.feature @@ -0,0 +1 @@ +Separated connection and socket timeout errors, from ServerTimeoutError. diff --git a/CHANGES/7829.misc b/CHANGES/7829.misc new file mode 100644 index 00000000000..9eb060f4713 --- /dev/null +++ b/CHANGES/7829.misc @@ -0,0 +1,3 @@ +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 new file mode 100644 index 00000000000..e536ee4b1c4 --- /dev/null +++ b/CHANGES/7954.feature @@ -0,0 +1 @@ +Implement happy eyeballs diff --git a/CHANGES/8062.feature.rst b/CHANGES/8062.feature.rst new file mode 100644 index 00000000000..6e9814f09a0 --- /dev/null +++ b/CHANGES/8062.feature.rst @@ -0,0 +1 @@ +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 new file mode 100644 index 00000000000..b3aec71bdf7 --- /dev/null +++ b/CHANGES/8088.contrib.rst @@ -0,0 +1 @@ +Enabled HTTP parser tests originally intended for 3.9.2 release -- by :user:`pajod`. diff --git a/CHANGES/8182.bugfix.rst b/CHANGES/8182.bugfix.rst new file mode 100644 index 00000000000..c960597587c --- /dev/null +++ b/CHANGES/8182.bugfix.rst @@ -0,0 +1,10 @@ +Adjusted ``FileResponse`` to check file existence and access when preparing the response -- by :user:`steverep`. + +The :py:class:`~aiohttp.web.FileResponse` class was modified to respond with + 403 Forbidden or 404 Not Found as appropriate. Previously, it would cause a + server error if the path did not exist or could not be accessed. Checks for + existence, non-regular files, and permissions were expected to be done in the + route handler. For static routes, this now permits a compressed file to exist + without its uncompressed variant and still be served. In addition, this + changes the response status for files without read permission to 403, and for + non-regular files from 404 to 403 for consistency. diff --git a/CHANGES/8270.bugfix.rst b/CHANGES/8270.bugfix.rst new file mode 100644 index 00000000000..bda77223959 --- /dev/null +++ b/CHANGES/8270.bugfix.rst @@ -0,0 +1,9 @@ +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 new file mode 100644 index 00000000000..89a8e933836 --- /dev/null +++ b/CHANGES/8346.misc.rst @@ -0,0 +1 @@ +Added `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 new file mode 100644 index 00000000000..493916f0421 --- /dev/null +++ b/CHANGES/8364.misc.rst @@ -0,0 +1 @@ +Minor improvements to static typing -- by :user:`Dreamsorcerer`. diff --git a/CHANGES/8403.doc.rst b/CHANGES/8403.doc.rst new file mode 100644 index 00000000000..71618c3c99c --- /dev/null +++ b/CHANGES/8403.doc.rst @@ -0,0 +1 @@ +Improve the docs for the `ssl` params. diff --git a/CHANGES/8444.bugfix b/CHANGES/8444.bugfix new file mode 100644 index 00000000000..ed059f1890b --- /dev/null +++ b/CHANGES/8444.bugfix @@ -0,0 +1,2 @@ +Fixed ``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 new file mode 100644 index 00000000000..1d42136ebd7 --- /dev/null +++ b/CHANGES/8463.misc.rst @@ -0,0 +1 @@ +Added a 3.11-specific overloads to ``ClientSession`` -- by :user:`max-muoto`. diff --git a/CHANGES/8481.feature.rst b/CHANGES/8481.feature.rst new file mode 120000 index 00000000000..f569cd92882 --- /dev/null +++ b/CHANGES/8481.feature.rst @@ -0,0 +1 @@ +6722.feature \ No newline at end of file diff --git a/CHANGES/8482.feature.rst b/CHANGES/8482.feature.rst new file mode 120000 index 00000000000..f569cd92882 --- /dev/null +++ b/CHANGES/8482.feature.rst @@ -0,0 +1 @@ +6722.feature \ No newline at end of file diff --git a/CHANGES/8491.misc.rst b/CHANGES/8491.misc.rst new file mode 100644 index 00000000000..223c549b2e2 --- /dev/null +++ b/CHANGES/8491.misc.rst @@ -0,0 +1 @@ +Simplified path checks for ``UrlDispatcher.add_static()`` method -- by :user:`steverep`. diff --git a/CHANGES/8495.breaking.rst b/CHANGES/8495.breaking.rst new file mode 100644 index 00000000000..cfa2b185645 --- /dev/null +++ b/CHANGES/8495.breaking.rst @@ -0,0 +1,12 @@ +The shutdown logic in 3.9 waited on all tasks, which caused issues with some libraries. +In 3.10 we've changed this logic to only wait on request handlers. This means that it's +important for developers to correctly handle the lifecycle of background tasks using a +library such as ``aiojobs``. If an application is using ``handler_cancellation=True`` then +it is also a good idea to ensure that any :func:`asyncio.shield` calls are replaced with +:func:`aiojobs.aiohttp.shield`. + +Please read the updated documentation on these points: \ +https://docs.aiohttp.org/en/stable/web_advanced.html#graceful-shutdown \ +https://docs.aiohttp.org/en/stable/web_advanced.html#web-handler-cancellation + +-- by :user:`Dreamsorcerer` diff --git a/CHANGES/8498.misc.rst b/CHANGES/8498.misc.rst new file mode 100644 index 00000000000..2aa2aa4a42b --- /dev/null +++ b/CHANGES/8498.misc.rst @@ -0,0 +1 @@ +Avoided creating a future on every websocket receive -- by :user:`bdraco`. diff --git a/CHANGES/8501.misc.rst b/CHANGES/8501.misc.rst new file mode 100644 index 00000000000..689c4f9edbf --- /dev/null +++ b/CHANGES/8501.misc.rst @@ -0,0 +1 @@ +Updated identity checks for all ``WSMsgType`` type compares -- by :user:`bdraco`. diff --git a/CHANGES/8507.bugfix.rst b/CHANGES/8507.bugfix.rst new file mode 100644 index 00000000000..9739536202d --- /dev/null +++ b/CHANGES/8507.bugfix.rst @@ -0,0 +1,8 @@ +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 new file mode 100644 index 00000000000..d0a90c7388f --- /dev/null +++ b/CHANGES/8510.misc.rst @@ -0,0 +1 @@ +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 new file mode 100644 index 00000000000..1fddc580c4c --- /dev/null +++ b/CHANGES/8522.misc.rst @@ -0,0 +1,5 @@ +Restored :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/CHANGES/8535.feature b/CHANGES/8535.feature new file mode 120000 index 00000000000..449a88eb908 --- /dev/null +++ b/CHANGES/8535.feature @@ -0,0 +1 @@ +7583.feature \ No newline at end of file From 0f1ebc40a10159a18bd53b042952b448861e2ea4 Mon Sep 17 00:00:00 2001 From: "J. Nick Koston" Date: Tue, 30 Jul 2024 14:02:02 -0500 Subject: [PATCH 21/24] forgot to save one of them --- CHANGES/7784.bugfix | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGES/7784.bugfix b/CHANGES/7784.bugfix index 1f8ba8ddb44..f5b16f217dc 100644 --- a/CHANGES/7784.bugfix +++ b/CHANGES/7784.bugfix @@ -1 +1 @@ -Fix duplicate cookie expiration calls in the CookieJar implementation +Fixed duplicate cookie expiration calls in the CookieJar implementation From 2575ce3fb3e71dad4d0cc764308a077f457e1522 Mon Sep 17 00:00:00 2001 From: "J. Nick Koston" Date: Tue, 30 Jul 2024 14:02:24 -0500 Subject: [PATCH 22/24] forgot to save one of them --- CHANGES/7954.feature | 2 +- CHANGES/8270.bugfix.rst | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/CHANGES/7954.feature b/CHANGES/7954.feature index e536ee4b1c4..588ff63bb69 100644 --- a/CHANGES/7954.feature +++ b/CHANGES/7954.feature @@ -1 +1 @@ -Implement happy eyeballs +Implemented happy eyeballs diff --git a/CHANGES/8270.bugfix.rst b/CHANGES/8270.bugfix.rst index bda77223959..d5efd872440 100644 --- a/CHANGES/8270.bugfix.rst +++ b/CHANGES/8270.bugfix.rst @@ -1,4 +1,4 @@ -Fix ``AsyncResolver`` to match ``ThreadedResolver`` behavior +Fixed ``AsyncResolver`` to match ``ThreadedResolver`` behavior -- by :user:`bdraco`. On system with IPv6 support, the :py:class:`~aiohttp.resolver.AsyncResolver` would not fallback From 001e6e1bf45ebfe4517a89aab9c4bece9a1535f9 Mon Sep 17 00:00:00 2001 From: "J. Nick Koston" Date: Tue, 30 Jul 2024 14:02:58 -0500 Subject: [PATCH 23/24] forgot to save one of them --- CHANGES/8403.doc.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGES/8403.doc.rst b/CHANGES/8403.doc.rst index 71618c3c99c..94bd1d5c319 100644 --- a/CHANGES/8403.doc.rst +++ b/CHANGES/8403.doc.rst @@ -1 +1 @@ -Improve the docs for the `ssl` params. +Improved the docs for the `ssl` params. From 0bb8da06345d67cd6020945a8543d8e7d2f6a66e Mon Sep 17 00:00:00 2001 From: "J. Nick Koston" Date: Tue, 30 Jul 2024 14:03:49 -0500 Subject: [PATCH 24/24] 10th attempt is a charm? --- CHANGES.rst | 310 ++++++++++++++++++++++++++++++++++++++ CHANGES/2492.feature | 1 - CHANGES/2507.feature.rst | 1 - CHANGES/3315.feature.rst | 1 - CHANGES/3958.doc | 1 - CHANGES/4462.bugfix.rst | 7 - CHANGES/6722.feature | 12 -- CHANGES/7297.feature | 1 - CHANGES/7583.feature | 14 -- CHANGES/7784.bugfix | 1 - CHANGES/7801.feature | 1 - CHANGES/7829.misc | 3 - CHANGES/7954.feature | 1 - CHANGES/8062.feature.rst | 1 - CHANGES/8088.contrib.rst | 1 - CHANGES/8182.bugfix.rst | 10 -- CHANGES/8270.bugfix.rst | 9 -- CHANGES/8346.misc.rst | 1 - CHANGES/8364.misc.rst | 1 - CHANGES/8403.doc.rst | 1 - CHANGES/8444.bugfix | 2 - CHANGES/8463.misc.rst | 1 - CHANGES/8481.feature.rst | 1 - CHANGES/8482.feature.rst | 1 - CHANGES/8491.misc.rst | 1 - CHANGES/8495.breaking.rst | 12 -- CHANGES/8498.misc.rst | 1 - CHANGES/8501.misc.rst | 1 - CHANGES/8507.bugfix.rst | 8 - CHANGES/8510.misc.rst | 1 - CHANGES/8522.misc.rst | 5 - CHANGES/8535.feature | 1 - 32 files changed, 310 insertions(+), 103 deletions(-) delete mode 100644 CHANGES/2492.feature delete mode 120000 CHANGES/2507.feature.rst delete mode 120000 CHANGES/3315.feature.rst delete mode 100644 CHANGES/3958.doc delete mode 100644 CHANGES/4462.bugfix.rst delete mode 100644 CHANGES/6722.feature delete mode 100644 CHANGES/7297.feature delete mode 100644 CHANGES/7583.feature delete mode 100644 CHANGES/7784.bugfix delete mode 100644 CHANGES/7801.feature delete mode 100644 CHANGES/7829.misc delete mode 100644 CHANGES/7954.feature delete mode 100644 CHANGES/8062.feature.rst delete mode 100644 CHANGES/8088.contrib.rst delete mode 100644 CHANGES/8182.bugfix.rst delete mode 100644 CHANGES/8270.bugfix.rst delete mode 100644 CHANGES/8346.misc.rst delete mode 100644 CHANGES/8364.misc.rst delete mode 100644 CHANGES/8403.doc.rst delete mode 100644 CHANGES/8444.bugfix delete mode 100644 CHANGES/8463.misc.rst delete mode 120000 CHANGES/8481.feature.rst delete mode 120000 CHANGES/8482.feature.rst delete mode 100644 CHANGES/8491.misc.rst delete mode 100644 CHANGES/8495.breaking.rst delete mode 100644 CHANGES/8498.misc.rst delete mode 100644 CHANGES/8501.misc.rst delete mode 100644 CHANGES/8507.bugfix.rst delete mode 100644 CHANGES/8510.misc.rst delete mode 100644 CHANGES/8522.misc.rst delete mode 120000 CHANGES/8535.feature diff --git a/CHANGES.rst b/CHANGES.rst index 5b02623067a..a7d46e94bd0 100644 --- a/CHANGES.rst +++ b/CHANGES.rst @@ -10,6 +10,316 @@ .. towncrier release notes start +3.10.0 (2024-07-30) +======================== + +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`. + + + +- Fixed duplicate cookie expiration calls in the CookieJar implementation + + + *Related issues and pull requests on GitHub:* + :issue:`7784`. + + + +- Adjusted ``FileResponse`` to check file existence and access when preparing the response -- by :user:`steverep`. + + The :py:class:`~aiohttp.web.FileResponse` class was modified to respond with + 403 Forbidden or 404 Not Found as appropriate. Previously, it would cause a + server error if the path did not exist or could not be accessed. Checks for + existence, non-regular files, and permissions were expected to be done in the + route handler. For static routes, this now permits a compressed file to exist + without its uncompressed variant and still be served. In addition, this + changes the response status for files without read permission to 403, and for + non-regular files from 404 to 403 for consistency. + + + *Related issues and pull requests on GitHub:* + :issue:`8182`. + + + +- Fixed ``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`. + + + +- Fixed ``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 +-------- + +- Added 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`. + + + +- Implemented 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`, :issue:`8535`. + + + +- Separated connection and socket timeout errors, from ServerTimeoutError. + + + *Related issues and pull requests on GitHub:* + :issue:`7801`. + + + +- Implemented 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`. + + + + +Removals and backward incompatible breaking changes +--------------------------------------------------- + +- The shutdown logic in 3.9 waited on all tasks, which caused issues with some libraries. + In 3.10 we've changed this logic to only wait on request handlers. This means that it's + important for developers to correctly handle the lifecycle of background tasks using a + library such as ``aiojobs``. If an application is using ``handler_cancellation=True`` then + it is also a good idea to ensure that any :func:`asyncio.shield` calls are replaced with + :func:`aiojobs.aiohttp.shield`. + + Please read the updated documentation on these points: \ + https://docs.aiohttp.org/en/stable/web_advanced.html#graceful-shutdown \ + https://docs.aiohttp.org/en/stable/web_advanced.html#web-handler-cancellation + + -- by :user:`Dreamsorcerer` + + + *Related issues and pull requests on GitHub:* + :issue:`8495`. + + + + +Improved documentation +---------------------- + +- Added documentation for ``aiohttp.web.FileResponse``. + + + *Related issues and pull requests on GitHub:* + :issue:`3958`. + + + +- Improved 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`. + + + +- Added `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`. + + + +- Avoided creating a future on every websocket receive -- by :user:`bdraco`. + + + *Related issues and pull requests on GitHub:* + :issue:`8498`. + + + +- Updated 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`. + + + +- Restored :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 9b2244390a2..00000000000 --- a/CHANGES/2492.feature +++ /dev/null @@ -1 +0,0 @@ -Added 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 0fcb1dde698..00000000000 --- a/CHANGES/3958.doc +++ /dev/null @@ -1 +0,0 @@ -Added 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 7480f780d6f..00000000000 --- a/CHANGES/7583.feature +++ /dev/null @@ -1,14 +0,0 @@ -Implemented 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 f5b16f217dc..00000000000 --- a/CHANGES/7784.bugfix +++ /dev/null @@ -1 +0,0 @@ -Fixed 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 588ff63bb69..00000000000 --- a/CHANGES/7954.feature +++ /dev/null @@ -1 +0,0 @@ -Implemented 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/8182.bugfix.rst b/CHANGES/8182.bugfix.rst deleted file mode 100644 index c960597587c..00000000000 --- a/CHANGES/8182.bugfix.rst +++ /dev/null @@ -1,10 +0,0 @@ -Adjusted ``FileResponse`` to check file existence and access when preparing the response -- by :user:`steverep`. - -The :py:class:`~aiohttp.web.FileResponse` class was modified to respond with - 403 Forbidden or 404 Not Found as appropriate. Previously, it would cause a - server error if the path did not exist or could not be accessed. Checks for - existence, non-regular files, and permissions were expected to be done in the - route handler. For static routes, this now permits a compressed file to exist - without its uncompressed variant and still be served. In addition, this - changes the response status for files without read permission to 403, and for - non-regular files from 404 to 403 for consistency. diff --git a/CHANGES/8270.bugfix.rst b/CHANGES/8270.bugfix.rst deleted file mode 100644 index d5efd872440..00000000000 --- a/CHANGES/8270.bugfix.rst +++ /dev/null @@ -1,9 +0,0 @@ -Fixed ``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 89a8e933836..00000000000 --- a/CHANGES/8346.misc.rst +++ /dev/null @@ -1 +0,0 @@ -Added `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 94bd1d5c319..00000000000 --- a/CHANGES/8403.doc.rst +++ /dev/null @@ -1 +0,0 @@ -Improved the docs for the `ssl` params. diff --git a/CHANGES/8444.bugfix b/CHANGES/8444.bugfix deleted file mode 100644 index ed059f1890b..00000000000 --- a/CHANGES/8444.bugfix +++ /dev/null @@ -1,2 +0,0 @@ -Fixed ``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/8495.breaking.rst b/CHANGES/8495.breaking.rst deleted file mode 100644 index cfa2b185645..00000000000 --- a/CHANGES/8495.breaking.rst +++ /dev/null @@ -1,12 +0,0 @@ -The shutdown logic in 3.9 waited on all tasks, which caused issues with some libraries. -In 3.10 we've changed this logic to only wait on request handlers. This means that it's -important for developers to correctly handle the lifecycle of background tasks using a -library such as ``aiojobs``. If an application is using ``handler_cancellation=True`` then -it is also a good idea to ensure that any :func:`asyncio.shield` calls are replaced with -:func:`aiojobs.aiohttp.shield`. - -Please read the updated documentation on these points: \ -https://docs.aiohttp.org/en/stable/web_advanced.html#graceful-shutdown \ -https://docs.aiohttp.org/en/stable/web_advanced.html#web-handler-cancellation - --- by :user:`Dreamsorcerer` diff --git a/CHANGES/8498.misc.rst b/CHANGES/8498.misc.rst deleted file mode 100644 index 2aa2aa4a42b..00000000000 --- a/CHANGES/8498.misc.rst +++ /dev/null @@ -1 +0,0 @@ -Avoided 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 689c4f9edbf..00000000000 --- a/CHANGES/8501.misc.rst +++ /dev/null @@ -1 +0,0 @@ -Updated 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 1fddc580c4c..00000000000 --- a/CHANGES/8522.misc.rst +++ /dev/null @@ -1,5 +0,0 @@ -Restored :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/CHANGES/8535.feature b/CHANGES/8535.feature deleted file mode 120000 index 449a88eb908..00000000000 --- a/CHANGES/8535.feature +++ /dev/null @@ -1 +0,0 @@ -7583.feature \ No newline at end of file