diff --git a/aiohttp-3.10.5.tar.gz b/aiohttp-3.10.5.tar.gz new file mode 100644 index 0000000..bad3bb9 --- /dev/null +++ b/aiohttp-3.10.5.tar.gz @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f071854b47d39591ce9a17981c46790acb30518e2f83dfca8db2dfa091178691 +size 7524360 diff --git a/aiohttp-3.9.5.tar.gz b/aiohttp-3.9.5.tar.gz deleted file mode 100644 index 8489f7c..0000000 --- a/aiohttp-3.9.5.tar.gz +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:edea7d15772ceeb29db4aff55e482d4bcfb6ae160ce144f2682de02f6d693551 -size 7504841 diff --git a/python-aiohttp.changes b/python-aiohttp.changes index d51aa31..e814f3d 100644 --- a/python-aiohttp.changes +++ b/python-aiohttp.changes @@ -1,3 +1,56 @@ +------------------------------------------------------------------- +Tue Aug 20 06:48:08 UTC 2024 - Steve Kowalik + +e Update to 3.10.5: + * Fixed aiohttp.ClientResponse.json() not setting status when + aiohttp.ContentTypeError is raised + * Improved performance of the WebSocket reader + * Fixed decoding base64 chunk in BodyPartReader + * Fixed a race closing the server-side WebSocket where the close code would + not reach the client + * Fixed unconsumed exceptions raised by the WebSocket heartbeat + * Fixed an edge case in the Python parser when chunk separators happen to + align with network chunks + * Fixed multipart reading when stream buffer splits the boundary over + several read() calls + * Fixed aiohttp.TCPConnector doing blocking I/O in the event loop to create + the SSLContext + * Improved performance of aiohttp.ClientWebSocketResponse.receive and + aiohttp.web.WebSocketResponse.receive when there is no timeout. + * Improved performance of starting request handlers with Python 3.12+ + * Improved performance of HTTP keep-alive checks + * Fixed server checks for circular symbolic links to be compatible with + Python 3.13 + * Fixed request body not being read when ignoring an Upgrade request + * Fixed an edge case where shutdown would wait for timeout when the handler + was already completed + * Fixed connecting to npipe://, tcp://, and unix:// urls + * Fixed WebSocket ping tasks being prematurely garbage collected + * Fixed incorrectly following symlinks for compressed file variants + (bsc#1229226, CVE-2024-42367) + * Fixed monkey patches for Path.stat() and Path.is_dir() for Python 3.13 + compatibility + * Fixed url dispatcher index not matching when a variable is preceded by a + fixed string after a slash + * Fixed server response headers for Content-Type and Content-Encoding for + static compressed files + * Fixed duplicate cookie expiration calls in the CookieJar implementation + * Adjusted FileResponse to check file existence and access when preparing + the response + * Fixed AsyncResolver to match ThreadedResolver behavior + * Fixed ws_connect not respecting receive_timeout on WS(S) connection. + * Removed blocking I/O in the event loop for static resources and refactored + exception handling + * Added a Request.wait_for_disconnection() method, as means of allowing + request handlers to be notified of premature client disconnections. + * Separated connection and socket timeout errors, from ServerTimeoutError. + * The shutdown logic in 3.9 waited on all tasks, which caused issues with + some libraries. + * When using Python 3.12 or later, the writer is no longer scheduled on the + event loop if it can finish synchronously. + * Restored aiohttp.resolver.AsyncResolver to be the default resolver. +- Drop patch remove-re-assert.patch, add BuildRequires on it. + ------------------------------------------------------------------- Wed May 29 13:46:54 UTC 2024 - Markéta Machová diff --git a/python-aiohttp.spec b/python-aiohttp.spec index 69b0b6f..f942d4e 100644 --- a/python-aiohttp.spec +++ b/python-aiohttp.spec @@ -19,15 +19,13 @@ %bcond_with docs %{?sle15_python_module_pythons} Name: python-aiohttp -Version: 3.9.5 +Version: 3.10.5 Release: 0 Summary: Asynchronous HTTP client/server framework License: Apache-2.0 URL: https://github.com/aio-libs/aiohttp Source: https://files.pythonhosted.org/packages/source/a/aiohttp/aiohttp-%{version}.tar.gz -# PATCH-FIX-OPENSUSE remove-re-assert.patch mcepl@suse.com -# We really don’t need beautifuly presented exceptions for our testing -Patch1: remove-re-assert.patch +Requires: python-aiohappyeyeballs >= 2.3.0 Requires: python-aiosignal >= 1.1.2 Requires: python-attrs >= 17.3.0 Requires: python-frozenlist >= 1.1.1 @@ -51,6 +49,7 @@ BuildRequires: fdupes BuildRequires: python-rpm-macros # /SECTION # SECTION install requirements +BuildRequires: %{python_module aiohappyeyeballs >= 2.3.0} BuildRequires: %{python_module aiosignal >= 1.1.2} BuildRequires: %{python_module async_timeout >= 4.0 with %python-async_timeout < 5} BuildRequires: %{python_module attrs >= 17.3.0} @@ -69,6 +68,7 @@ BuildRequires: %{python_module pytest >= 6.2.0} BuildRequires: %{python_module pytest-mock} BuildRequires: %{python_module pytest-timeout} BuildRequires: %{python_module pytest-xdist} +BuildRequires: %{python_module re-assert} BuildRequires: %{python_module time-machine} BuildRequires: %{python_module trustme} # /SECTION @@ -128,6 +128,7 @@ donttest="test_aiohttp_request_coroutine or test_mark_formdata_as_processed or t donttest+=" or test_client_session_timeout_zero" # flaky donttest+=" or test_https_proxy_unsupported_tls_in_tls" +donttest+=" or test_shutdown_handler_cancellation_suppressed" # raises not expected "ConnectionResetError" with openssl 3.2 and python < 3.11 donttest+=" or test_tcp_connector_raise_connector_ssl_error[pyloop]" # fails with pytest 8 https://github.com/aio-libs/aiohttp/issues/8234 @@ -138,7 +139,9 @@ rm -v tests/autobahn/test_autobahn.py # uses proxy.py which is not maintained anymore rm -v tests/test_proxy_functional.py # randomly fails on xdist splits -single_runs="test_run_app or test_web_runner" +single_runs="(test_run_app or test_web_runner)" +# breaks without threading +single_runs+=" and not test_shutdown_handler_cancellation_suppressed" test -d aiohttp && mv aiohttp aiohttp.bkp %pytest_arch %{?jobs: -n %jobs} tests -k "not ($donttest or ${single_runs})" %pytest_arch tests -k "${single_runs}" @@ -147,7 +150,7 @@ test -d aiohttp && mv aiohttp aiohttp.bkp %license LICENSE.txt %doc CHANGES.rst CONTRIBUTORS.txt README.rst %{python_sitearch}/aiohttp -%{python_sitearch}/aiohttp-%{version}*-info +%{python_sitearch}/aiohttp-%{version}.dist-info %if %{with docs} %if 0%{?suse_version} > 1500 diff --git a/remove-re-assert.patch b/remove-re-assert.patch deleted file mode 100644 index 9f089be..0000000 --- a/remove-re-assert.patch +++ /dev/null @@ -1,195 +0,0 @@ -diff -Nru aiohttp-3.9.3.orig/tests/test_client_session.py aiohttp-3.9.3/tests/test_client_session.py ---- aiohttp-3.9.3.orig/tests/test_client_session.py 2024-01-29 20:32:25.000000000 +0100 -+++ aiohttp-3.9.3/tests/test_client_session.py 2024-01-30 11:20:09.652810999 +0100 -@@ -2,6 +2,7 @@ - import contextlib - import gc - import io -+import re - import json - from http.cookies import SimpleCookie - from typing import Any, List -@@ -9,7 +10,6 @@ - - import pytest - from multidict import CIMultiDict, MultiDict --from re_assert import Matches - from yarl import URL - - import aiohttp -@@ -320,8 +320,8 @@ - - loop.run_until_complete(make_sess()) - assert ( -- Matches("Session and connector has to use same event loop") -- == str(ctx.value).strip() -+ re.match("Session and connector has to use same event loop", -+ str(ctx.value).strip()) - ) - another_loop.run_until_complete(connector.close()) - -diff -Nru aiohttp-3.9.3.orig/tests/test_streams.py aiohttp-3.9.3/tests/test_streams.py ---- aiohttp-3.9.3.orig/tests/test_streams.py 2024-01-29 20:32:25.000000000 +0100 -+++ aiohttp-3.9.3/tests/test_streams.py 2024-01-30 11:20:09.652810999 +0100 -@@ -3,13 +3,13 @@ - import abc - import asyncio - import gc -+import re - import types - from collections import defaultdict - from itertools import groupby - from unittest import mock - - import pytest --from re_assert import Matches - - from aiohttp import streams - -@@ -1102,7 +1102,7 @@ - loop = asyncio.get_event_loop() - stream = self._make_one() - stream._waiter = loop.create_future() -- assert Matches(r">") == repr(stream) -+ assert re.match(r">", repr(stream)) - stream._waiter.set_result(None) - await stream._waiter - stream._waiter = None -diff -Nru aiohttp-3.9.3.orig/tests/test_urldispatch.py aiohttp-3.9.3/tests/test_urldispatch.py ---- aiohttp-3.9.3.orig/tests/test_urldispatch.py 2024-01-29 20:32:25.000000000 +0100 -+++ aiohttp-3.9.3/tests/test_urldispatch.py 2024-01-30 11:21:46.656743543 +0100 -@@ -4,7 +4,6 @@ - from urllib.parse import unquote - - import pytest --from re_assert import Matches - from yarl import URL - - import aiohttp -@@ -312,7 +311,7 @@ - regexp = "Duplicate 'name', already handled by" - with pytest.raises(ValueError) as ctx: - router.add_route("GET", "/get_other", handler2, name="name") -- assert Matches(regexp) == str(ctx.value) -+ assert re.match(regexp, str(ctx.value)) - - - def test_route_plain(router) -> None: -@@ -502,7 +501,7 @@ - - def test_static_repr(router) -> None: - router.add_static("/get", pathlib.Path(aiohttp.__file__).parent, name="name") -- assert Matches(r" None: -@@ -624,7 +623,7 @@ - req = make_mocked_request("GET", "/get/john") - match_info = await router.resolve(req) - assert {"name": "john"} == match_info -- assert Matches(">") == repr(match_info) -+ assert re.match(">", repr(match_info)) - - - async def test_match_info_with_plus(router) -> None: -diff -Nru aiohttp-3.9.3.orig/tests/test_web_response.py aiohttp-3.9.3/tests/test_web_response.py ---- aiohttp-3.9.3.orig/tests/test_web_response.py 2024-01-29 20:32:25.000000000 +0100 -+++ aiohttp-3.9.3/tests/test_web_response.py 2024-01-30 11:20:09.656144352 +0100 -@@ -2,13 +2,13 @@ - import datetime - import gzip - import json -+import re - from concurrent.futures import ThreadPoolExecutor - from unittest import mock - - import aiosignal - import pytest - from multidict import CIMultiDict, CIMultiDictProxy --from re_assert import Matches - - from aiohttp import HttpVersion, HttpVersion10, HttpVersion11, hdrs - from aiohttp.helpers import ETag -@@ -401,7 +401,9 @@ - - with pytest.raises(RuntimeError) as ctx: - await resp.prepare(req) -- assert Matches("Using chunked encoding is forbidden for HTTP/1.0") == str(ctx.value) -+ assert re.match( -+ "Using chunked encoding is forbidden for HTTP/1.0", str(ctx.value) -+ ) - - - async def test_compression_no_accept() -> None: -@@ -843,7 +845,7 @@ - 'Set-Cookie: name=("")?; ' - "expires=Thu, 01 Jan 1970 00:00:00 GMT; Max-Age=0; Path=/" - ) -- assert Matches(expected) == str(resp.cookies) -+ assert re.match(expected, str(resp.cookies)) - - resp.set_cookie("name", "value", domain="local.host") - expected = "Set-Cookie: name=value; Domain=local.host; Path=/" -@@ -895,7 +897,7 @@ - 'Set-Cookie: name=("")?; ' - "expires=Thu, 01 Jan 1970 00:00:00 GMT; Max-Age=0; Path=/" - ) -- assert Matches(expected) == str(resp.cookies) -+ assert re.match(expected, str(resp.cookies)) - - - def test_cookie_set_after_del() -> None: -@@ -1136,14 +1138,13 @@ - await resp.write_eof() - txt = buf.decode("utf8") - assert ( -- Matches( -+ re.match( - "HTTP/1.1 200 OK\r\n" - "Content-Length: 0\r\n" - "Content-Type: application/octet-stream\r\n" - "Date: .+\r\n" - "Server: .+\r\n\r\n" -- ) -- == txt -+ , txt) - ) - - -@@ -1156,15 +1157,13 @@ - - txt = buf.decode("utf8") - assert ( -- Matches( -+ re.match( - "HTTP/1.1 200 OK\r\n" - "Content-Length: 4\r\n" - "Content-Type: application/octet-stream\r\n" - "Date: .+\r\n" - "Server: .+\r\n\r\n" -- "data" -- ) -- == txt -+ "data", txt) - ) - - -@@ -1178,15 +1177,13 @@ - - txt = buf.decode("utf8") - assert ( -- Matches( -+ re.match( - "HTTP/1.1 200 OK\r\n" - "Content-Length: 0\r\n" - "Set-Cookie: name=value\r\n" - "Content-Type: application/octet-stream\r\n" - "Date: .+\r\n" -- "Server: .+\r\n\r\n" -- ) -- == txt -+ "Server: .+\r\n\r\n", txt) - ) - -