From 18ac096873e52562ea35d6968ac8d8bffd8d8e516583bdaccb87b8f296470d2d Mon Sep 17 00:00:00 2001 From: Steve Kowalik Date: Wed, 24 Nov 2021 00:41:45 +0000 Subject: [PATCH 1/2] - Drop python39-failures.patch, no longer required. OBS-URL: https://build.opensuse.org/package/show/devel:languages:python/python-aiohttp?expand=0&rev=72 --- python-aiohttp.changes | 5 +++ python-aiohttp.spec | 3 -- python39-failures.patch | 77 ----------------------------------------- 3 files changed, 5 insertions(+), 80 deletions(-) delete mode 100644 python39-failures.patch diff --git a/python-aiohttp.changes b/python-aiohttp.changes index 87b8196..1785c48 100644 --- a/python-aiohttp.changes +++ b/python-aiohttp.changes @@ -1,3 +1,8 @@ +------------------------------------------------------------------- +Wed Nov 24 00:38:26 UTC 2021 - Steve Kowalik + +- Drop python39-failures.patch, no longer required. + ------------------------------------------------------------------- Wed Nov 17 09:52:49 UTC 2021 - Steve Kowalik diff --git a/python-aiohttp.spec b/python-aiohttp.spec index aba9a02..b62859c 100644 --- a/python-aiohttp.spec +++ b/python-aiohttp.spec @@ -29,9 +29,6 @@ Patch0: unbundle-http-parser.patch # PATCH-FIX-UPSTREAM stdlib-typing_extensions.patch gh#aio-libs/aiohttp#5374 mcepl@suse.com # Fix typing_extensions imports. Patch1: stdlib-typing_extensions.patch -# PATCH-FIX-UPSTREAM python39-failures.patch gh#aio-libs/aiohttp#5991 mcepl@suse.com -# Bridge over Python 3.9.6 v 3.9.7 incompatibilities -Patch2: python39-failures.patch # PATCH-FIX-UPSTREAM remove_deprecated_loop_argument.patch gh#aio-libs/aiohttp#5991 mcepl@suse.com # remove deprecated loop argument Patch3: remove_deprecated_loop_argument.patch diff --git a/python39-failures.patch b/python39-failures.patch deleted file mode 100644 index 1179002..0000000 --- a/python39-failures.patch +++ /dev/null @@ -1,77 +0,0 @@ ---- - tests/test_web_middleware.py | 27 ++++++++++++++++++++++----- - 1 file changed, 22 insertions(+), 5 deletions(-) - ---- a/tests/test_web_middleware.py -+++ b/tests/test_web_middleware.py -@@ -1,4 +1,5 @@ - import re -+import sys - from typing import Any - - import pytest -@@ -6,6 +7,7 @@ from yarl import URL - - from aiohttp import web - -+py39 = sys.version_info[:3] == (3, 9, 7) - - async def test_middleware_modifies_response(loop, aiohttp_client) -> None: - async def handler(request): -@@ -410,7 +412,10 @@ async def test_old_style_middleware(loop - txt = await resp.text() - assert "OK[old style middleware]" == txt - -- assert len(warning_checker) == 1 -+ if py39: -+ assert len(warning_checker) == 2 -+ else: -+ assert len(warning_checker) == 1 - msg = str(warning_checker.list[0].message) - assert re.match( - "^old-style middleware " -@@ -464,7 +469,10 @@ async def test_mixed_middleware(loop, ai - txt = await resp.text() - assert "OK[new style 2][old style 2][new style 1][old style 1]" == txt - -- assert len(w) == 2 -+ if py39: -+ assert len(w) == 3 -+ else: -+ assert len(w) == 2 - tmpl = ( - "^old-style middleware " - '".' -@@ -503,7 +511,10 @@ async def test_old_style_middleware_clas - txt = await resp.text() - assert "OK[old style middleware]" == txt - -- assert len(warning_checker) == 1 -+ if py39: -+ assert len(warning_checker) == 2 -+ else: -+ assert len(warning_checker) == 1 - msg = str(warning_checker.list[0].message) - assert re.match( - "^old-style middleware " -@@ -537,7 +548,10 @@ async def test_new_style_middleware_clas - txt = await resp.text() - assert "OK[new style middleware]" == txt - -- assert len(warning_checker) == 0 -+ if py39: -+ assert len(warning_checker) == 1 -+ else: -+ assert len(warning_checker) == 0 - - - async def test_new_style_middleware_method(loop, aiohttp_client) -> None: -@@ -563,4 +577,7 @@ async def test_new_style_middleware_meth - txt = await resp.text() - assert "OK[new style middleware]" == txt - -- assert len(warning_checker) == 0 -+ if py39: -+ assert len(warning_checker) == 1 -+ else: -+ assert len(warning_checker) == 0 From 9aed91572fc42d38ad01cebef0e333d33a268a7d90d778d154abb31e73e1e231 Mon Sep 17 00:00:00 2001 From: Dirk Mueller Date: Mon, 13 Dec 2021 18:46:07 +0000 Subject: [PATCH 2/2] Accepting request 939980 from home:bnavigator:branches:devel:languages:python update (for python310) OBS-URL: https://build.opensuse.org/request/show/939980 OBS-URL: https://build.opensuse.org/package/show/devel:languages:python/python-aiohttp?expand=0&rev=73 --- aiohttp-3.7.4.tar.gz | 3 - aiohttp-3.8.1.tar.gz | 3 + backport_fix_for_setting_cookies.patch | 93 ------------ python-aiohttp.changes | 189 +++++++++++++++++++++++++ python-aiohttp.spec | 76 +++++----- remove_deprecated_loop_argument.patch | 59 -------- stdlib-typing_extensions.patch | 60 -------- unbundle-http-parser.patch | 25 ---- 8 files changed, 229 insertions(+), 279 deletions(-) delete mode 100644 aiohttp-3.7.4.tar.gz create mode 100644 aiohttp-3.8.1.tar.gz delete mode 100644 backport_fix_for_setting_cookies.patch delete mode 100644 remove_deprecated_loop_argument.patch delete mode 100644 stdlib-typing_extensions.patch delete mode 100644 unbundle-http-parser.patch diff --git a/aiohttp-3.7.4.tar.gz b/aiohttp-3.7.4.tar.gz deleted file mode 100644 index 36b3fd3..0000000 --- a/aiohttp-3.7.4.tar.gz +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:5d84ecc73141d0a0d61ece0742bb7ff5751b0657dab8405f899d3ceb104cc7de -size 1114533 diff --git a/aiohttp-3.8.1.tar.gz b/aiohttp-3.8.1.tar.gz new file mode 100644 index 0000000..cd03d64 --- /dev/null +++ b/aiohttp-3.8.1.tar.gz @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:fc5471e1a54de15ef71c1bc6ebe80d4dc681ea600e68bfd1cbce40427f0b7578 +size 7324180 diff --git a/backport_fix_for_setting_cookies.patch b/backport_fix_for_setting_cookies.patch deleted file mode 100644 index de94d94..0000000 --- a/backport_fix_for_setting_cookies.patch +++ /dev/null @@ -1,93 +0,0 @@ -From d0453ed56820e32802be743bf7a7b7027f9c9589 Mon Sep 17 00:00:00 2001 -From: Sam Bull -Date: Sat, 14 Nov 2020 15:24:43 +0000 -Subject: [PATCH 1/7] Backport fix for setting cookies - ---- - CHANGES/5233.bugfix | 1 + - aiohttp/web_protocol.py | 21 ++++++++++----------- - tests/test_web_exceptions.py | 28 ++++++++++++++++++++++++++++ - 3 files changed, 39 insertions(+), 11 deletions(-) - ---- /dev/null -+++ b/CHANGES/5233.bugfix -@@ -0,0 +1 @@ -+Fix cookies disappearing from HTTPExceptions. ---- a/aiohttp/web_protocol.py -+++ b/aiohttp/web_protocol.py -@@ -423,9 +423,7 @@ class RequestHandler(BaseProtocol): - finally: - self._current_request = None - except HTTPException as exc: -- resp = Response( -- status=exc.status, reason=exc.reason, text=exc.text, headers=exc.headers -- ) -+ resp = exc - reset = await self.finish_response(request, resp, start_time) - except asyncio.CancelledError: - raise -@@ -437,6 +435,15 @@ class RequestHandler(BaseProtocol): - resp = self.handle_error(request, 500, exc) - reset = await self.finish_response(request, resp, start_time) - else: -+ # Deprecation warning (See #2415) -+ if getattr(resp, "__http_exception__", False): -+ warnings.warn( -+ "returning HTTPException object is deprecated " -+ "(#2415) and will be removed, " -+ "please raise the exception instead", -+ DeprecationWarning, -+ ) -+ - reset = await self.finish_response(request, resp, start_time) - - return resp, reset -@@ -486,14 +493,6 @@ class RequestHandler(BaseProtocol): - except (asyncio.CancelledError, ConnectionError): - self.log_debug("Ignored premature client disconnection") - break -- # Deprecation warning (See #2415) -- if getattr(resp, "__http_exception__", False): -- warnings.warn( -- "returning HTTPException object is deprecated " -- "(#2415) and will be removed, " -- "please raise the exception instead", -- DeprecationWarning, -- ) - - # Drop the processed task from asyncio.Task.all_tasks() early - del task ---- a/tests/test_web_exceptions.py -+++ b/tests/test_web_exceptions.py -@@ -203,3 +203,31 @@ def test_HTTPException_retains_cause() - - tb = "".join(format_exception(ei.type, ei.value, ei.tb)) - assert "CustomException" in tb - assert "direct cause" in tb -+ -+ -+async def test_HTTPException_retains_cookie(aiohttp_client): -+ @web.middleware -+ async def middleware(request, handler): -+ try: -+ return await handler(request) -+ except web.HTTPException as exc: -+ exc.set_cookie("foo", request["foo"]) -+ raise exc -+ -+ async def save(request): -+ request["foo"] = "works" -+ raise web.HTTPFound("/show") -+ -+ async def show(request): -+ return web.Response(text=request.cookies["foo"]) -+ -+ app = web.Application(middlewares=[middleware]) -+ app.router.add_route("GET", "/save", save) -+ app.router.add_route("GET", "/show", show) -+ client = await aiohttp_client(app) -+ -+ resp = await client.get("/save") -+ assert resp.status == 200 -+ assert str(resp.url)[-5:] == "/show" -+ text = await resp.text() -+ assert text == "works" diff --git a/python-aiohttp.changes b/python-aiohttp.changes index 1785c48..4d060b0 100644 --- a/python-aiohttp.changes +++ b/python-aiohttp.changes @@ -1,3 +1,192 @@ +------------------------------------------------------------------- +Sat Dec 11 19:18:47 UTC 2021 - Ben Greiner + +- Update to version 3.8.1 + * Bugfixes + * Fix the error in handling the return value of getaddrinfo. + getaddrinfo will return an (int, bytes) tuple, if CPython could + not handle the address family. It will cause a index out of + range error in aiohttp. For example, if user compile CPython + with --disable-ipv6 option but his system enable the ipv6. + #5901 + * Do not install "examples" as a top-level package. #6189 + * Restored ability to connect IPv6-only host. #6195 + * Remove Signal from __all__, replace aiohttp.Signal with + aiosignal.Signal in docs #6201 + * Made chunked encoding HTTP header check stricter. #6305 + * Improved Documentation + * update quick starter demo codes. #6240 + * Added an explanation of how tiny timeouts affect performance to + the client reference document. #6274 + * Add flake8-docstrings to flake8 configuration, enable subset of + checks. #6276 + * Added information on running complex applications with + additional tasks/processes -- :user:`Dreamsorcerer`. #6278 +- Release 3.8.0 (2021-10-31) + * Features + * Added a GunicornWebWorker feature for extending the aiohttp + server configuration by allowing the 'wsgi' coroutine to return + web.AppRunner object. #2988 + * Switch from http-parser to llhttp #3561 + * Use Brotli instead of brotlipy #3803 + * Disable implicit switch-back to pure python mode. The build + fails loudly if aiohttp cannot be compiled with C Accelerators. + Use AIOHTTP_NO_EXTENSIONS=1 to explicitly disable C Extensions + complication and switch to Pure-Python mode. Note that + Pure-Python mode is significantly slower than compiled one. + #3828 + * Make access log use local time with timezone #3853 + * Implemented readuntil in StreamResponse #4054 + * FileResponse now supports ETag. #4594 + * Add a request handler type alias aiohttp.typedefs.Handler. + #4686 + * AioHTTPTestCase is more async friendly now. + * For people who use unittest and are used to use + :py:exc:`~unittest.TestCase` it will be easier to write new + test cases like the sync version of the + :py:exc:`~unittest.TestCase` class, without using the decorator + @unittest_run_loop, just async def test_*. The only difference + is that for the people using python3.7 and below a new + dependency is needed, it is asynctestcase. #4700 + * Add validation of HTTP header keys and values to prevent header + injection. #4818 + * Add predicate to AbstractCookieJar.clear. Add + AbstractCookieJar.clear_domain to clean all domain and + subdomains cookies only. #4942 + * Add keepalive_timeout parameter to web.run_app. #5094 + * Tracing for client sent headers #5105 + * Make type hints for http parser stricter #5267 + * Add final declarations for constants. #5275 + * Switch to external frozenlist and aiosignal libraries. #5293 + * Don't send secure cookies by insecure transports. + * By default, the transport is secure if https or wss scheme is + used. Use CookieJar(treat_as_secure_origin="http://127.0.0.1") + to override the default security checker. #5571 + * Always create a new event loop in aiohttp.web.run_app(). This + adds better compatibility with asyncio.run() or if trying to + run multiple apps in sequence. #5572 + * Add aiohttp.pytest_plugin.AiohttpClient for static typing of + pytest plugin. #5585 + * Added a socket_factory argument to BaseTestServer. #5844 + * Add compression strategy parameter to enable_compression + method. #5909 + * Added support for Python 3.10 to Github Actions CI/CD workflows + and fix the related deprecation warnings -- :user:`Hanaasagi`. + #5927 + * Switched chardet to charset-normalizer for guessing the HTTP + payload body encoding -- :user:`Ousret`. #5930 + * Added optional auto_decompress argument for HttpRequestParser + #5957 + * Added support for HTTPS proxies to the extent CPython's + :py:mod:`asyncio` supports it -- by :user:`bmbouter`, + :user:`jborean93` and :user:`webknjaz`. #5992 + * Added base_url parameter to the initializer of + :class:`~aiohttp.ClientSession`. #6013 + * Add Trove classifier and create binary wheels for 3.10. -- + :user:`hugovk`. #6079 + * Started shipping platform-specific wheels with the musl tag + targeting typical Alpine Linux runtimes — :user:`asvetlov`. + #6139 + * Started shipping platform-specific arm64 wheels for Apple + Silicon — :user:`asvetlov`. #6139 + * Bugfixes + * Modify _drain_helper() to handle concurrent await + resp.write(...) or ws.send_json(...) calls without + race-condition. #2934 + * Started using MultiLoopChildWatcher when it's available under + POSIX while setting up the test I/O loop. #3450 + * Only encode content-disposition filename parameter using + percent-encoding. Other parameters are encoded to quoted-string + or RFC2231 extended parameter value. #4012 + * Fixed HTTP client requests to honor no_proxy environment + variables. #4431 + * Fix supporting WebSockets proxies configured via environment + variables. #4648 + * Change return type on URLDispatcher to UrlMappingMatchInfo to + improve type annotations. #4748 + * Ensure a cleanup context is cleaned up even when an exception + occurs during startup. #4799 + * Added a new exception type for Unix socket client errors which + provides a more useful error message. #4984 + * Remove Transfer-Encoding and Content-Type headers for 204 in + StreamResponse #5106 + * Only depend on typing_extensions for Python <3.8 #5107 + * Add ABNORMAL_CLOSURE and BAD_GATEWAY to WSCloseCode #5192 + * Fix cookies disappearing from HTTPExceptions. #5233 + * StaticResource prefixes no longer match URLs with a non-folder + prefix. For example routes.static('/foo', '/foo') no longer + matches the URL /foobar. Previously, this would attempt to load + the file /foo/ar. #5250 + * Acquire the connection before running traces to prevent race + condition. #5259 + * Add missing slots to `_RequestContextManager and + _WSRequestContextManager #5329 + * Ensure sending a zero byte file does not throw an exception + (round 2) #5380 + * Set "text/plain" when data is an empty string in client + requests. #5392 + * Stop automatically releasing the ClientResponse object on calls + to the ok property for the failed requests. #5403 + * Include query parameters from params keyword argument in + tracing URL. #5432 + * Fix annotations #5466 + * Fixed the multipart POST requests processing to always release + file descriptors for the tempfile.Temporaryfile-created + _io.BufferedRandom instances of files sent within multipart + request bodies via HTTP POST requests -- by :user:`webknjaz`. + #5494 + * Fix 0 being incorrectly treated as an immediate timeout. #5527 + * Fixes failing tests when an environment variable _proxy + is set. #5554 + * Replace deprecated app handler design in + tests/autobahn/server.py with call to web.run_app; replace + deprecated aiohttp.ws_connect calls in tests/autobahn/client.py + with aiohttp.ClienSession.ws_connect. #5606 + * Fixed test for HTTPUnauthorized that access the text argument. + This is not used in any part of the code, so it's removed now. + #5657 + * Remove incorrect default from docs #5727 + * Remove external test dependency to http://httpbin.org #5840 + * Don't cancel current task when entering a cancelled timer. + #5853 + * Added params keyword argument to ClientSession.ws_connect. -- + :user:`hoh`. #5868 + * Uses :py:class:`~asyncio.ThreadedChildWatcher` under POSIX to + allow setting up test loop in non-main thread. #5877 + * Fix the error in handling the return value of getaddrinfo. + getaddrinfo will return an (int, bytes) tuple, if CPython could + not handle the address family. It will cause a index out of + range error in aiohttp. For example, if user compile CPython + with --disable-ipv6 option but his system enable the ipv6. + #5901 + * Removed the deprecated loop argument from the + asyncio.sleep/gather calls #5905 + * Return None from request.if_modified_since, + request.if_unmodified_since, request.if_range and + response.last_modified when corresponding http date headers are + invalid. #5925 + * Fix resetting SIGCHLD signals in Gunicorn aiohttp Worker to fix + subprocesses that capture output having an incorrect + returncode. #6130 + * Raise 400: Content-Length can't be present with + Transfer-Encoding if both Content-Length and Transfer-Encoding + are sent by peer by both C and Python implementations #6182 + * Improved Documentation + * Refactored OpenAPI/Swagger aiohttp addons, added aio-openapi + #5326 + * Fixed docs on request cookies type, so it matches what is + actually used in the code (a read-only dictionary-like object). + #5725 + * Documented that the HTTP client Authorization header is removed + on redirects to a different host or protocol. #5850 +- Drop patches + * backport_fix_for_setting_cookies.patch + * remove_deprecated_loop_argument.patch + * stdlib-typing_extensions.patch + * unbundle-http-parser.patch -- replaced by llhttp, nothing else + than the bundled llhttp available. +- Disable building the docs (no sphinxcontrib-towncrier) + ------------------------------------------------------------------- Wed Nov 24 00:38:26 UTC 2021 - Steve Kowalik diff --git a/python-aiohttp.spec b/python-aiohttp.spec index b62859c..48141cc 100644 --- a/python-aiohttp.spec +++ b/python-aiohttp.spec @@ -18,66 +18,62 @@ %{?!python_module:%define python_module() python3-%{**}} %define skip_python2 1 +# requires some unavailable modules +%bcond_with docs Name: python-aiohttp -Version: 3.7.4 +Version: 3.8.1 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 -Patch0: unbundle-http-parser.patch -# PATCH-FIX-UPSTREAM stdlib-typing_extensions.patch gh#aio-libs/aiohttp#5374 mcepl@suse.com -# Fix typing_extensions imports. -Patch1: stdlib-typing_extensions.patch -# PATCH-FIX-UPSTREAM remove_deprecated_loop_argument.patch gh#aio-libs/aiohttp#5991 mcepl@suse.com -# remove deprecated loop argument -Patch3: remove_deprecated_loop_argument.patch -# PATCH-FIX-UPSTREAM backport_fix_for_setting_cookies.patch gh#aio-libs/aiohttp#5233 mcepl@suse.com -# backport of fixes from 3.8 branch -Patch4: backport_fix_for_setting_cookies.patch BuildRequires: %{python_module Cython} -BuildRequires: %{python_module async_timeout >= 3.0} +BuildRequires: %{python_module aiosignal >= 1.1.2} +BuildRequires: %{python_module async_timeout >= 4.0} +BuildRequires: %{python_module asynctest = 0.13.0 if %python-base < 3.8} BuildRequires: %{python_module attrs >= 17.3.0} -BuildRequires: %{python_module chardet >= 2.0} -BuildRequires: %{python_module devel >= 3.5.3} -BuildRequires: %{python_module freezegun} -BuildRequires: %{python_module idna_ssl >= 1.0} +BuildRequires: %{python_module charset-normalizer >= 2.0} +BuildRequires: %{python_module devel >= 3.6} +BuildRequires: %{python_module frozenlist >= 1.1.1} +BuildRequires: %{python_module idna_ssl >= 1.0 if %python-base < 3.7} BuildRequires: %{python_module multidict >= 4.5} BuildRequires: %{python_module setuptools} -BuildRequires: %{python_module typing_extensions >= 3.6.5 if %python-base < 3.8} +BuildRequires: %{python_module typing_extensions >= 3.7.4 if %python-base < 3.8} BuildRequires: %{python_module yarl >= 1.0} BuildRequires: fdupes BuildRequires: http-parser-devel BuildRequires: python-rpm-macros Requires: python >= 3.6 -Requires: python-async_timeout >= 3.0 +Requires: python-aiosignal >= 1.1.2 +Requires: python-async_timeout >= 4.0 Requires: python-attrs >= 17.3.0 -Requires: python-chardet >= 2.0 -Requires: python-gunicorn +Requires: python-charset-normalizer >= 2.0 +Requires: python-frozenlist >= 1.1.1 Requires: python-multidict >= 4.5 Requires: python-yarl >= 1.0 -Requires: (python3-typing_extensions >= 3.6.5 if python3-base < 3.8) +Requires: (python-asynctest = 0.13.0 if python-base < 3.8) +Requires: (python-idna_ssl >= 1.0 if python-base < 3.7) +Requires: (python-typing_extensions >= 3.7.4 if python-base < 3.8) Recommends: python-aiodns Recommends: python-brotlipy Recommends: python-cChardet Suggests: %{name}-doc -%if 0%{?suse_version} < 1550 || "%{python_flavor}" == "python36" -Requires: python-idna_ssl >= 1.0 -%endif # SECTION test requirements BuildRequires: %{python_module aiodns} BuildRequires: %{python_module async_generator} BuildRequires: %{python_module brotlipy} +BuildRequires: %{python_module freezegun} BuildRequires: %{python_module gunicorn} BuildRequires: %{python_module pluggy} +BuildRequires: %{python_module proxy.py} BuildRequires: %{python_module pytest-mock} BuildRequires: %{python_module pytest-timeout} BuildRequires: %{python_module pytest} BuildRequires: %{python_module re-assert} BuildRequires: %{python_module trustme} - # /SECTION # SECTION docs +%if %{with docs} BuildRequires: %{python_module MarkupSafe} BuildRequires: python3-Pygments >= 2.1 BuildRequires: python3-Sphinx @@ -85,6 +81,8 @@ BuildRequires: python3-aiohttp-theme BuildRequires: python3-sphinxcontrib-asyncio BuildRequires: python3-sphinxcontrib-blockdiag BuildRequires: python3-sphinxcontrib-newsfeed +BuildRequires: python3-sphinxcontrib-towncrier +%endif # /SECTION %python_subpackages @@ -104,20 +102,18 @@ HTML documentation on the API and examples for %{name}. %prep %autosetup -p1 -n aiohttp-%{version} -# Prevent building with vendor version -rm vendor/http-parser/*.c - -# Allow use with chardet v4 -# https://github.com/aio-libs/aiohttp/pull/5333 -sed -i 's/chardet>=2.0,<4.0/chardet>=2.0/' setup.py +# don't check coverage +sed -i '/--cov/d' setup.cfg %build export CFLAGS="%{optflags}" %python_build +%if %{with docs} pushd docs %make_build html rm _build/html/.buildinfo popd +%endif %install %python_install @@ -127,16 +123,16 @@ rm -r %{buildroot}%{$python_sitearch}/aiohttp/.hash } %check -# ignore setup.cfg -touch pytest.ini -%define skiptest_allflavors test_aiohttp_request_coroutine or test_mark_formdata_as_processed or test_aiohttp_plugin_async -# we need it to be defined for all flavors for expansion inside pytest_arch to work. %%{?...} would expand too early. -%{lua: for p in string.gmatch(rpm.expand("%pythons"), "%S+") do rpm.define("skiptest_" .. p .. "_only %{nil}") end} +donttest="test_aiohttp_request_coroutine or test_mark_formdata_as_processed or test_aiohttp_plugin_async" +python36_donttest=" or test_read_boundary_with_incomplete_chunk" +# no name resolution +donttest+=" or test_client_session_timeout_zero or test_requote_redirect_url_default" +# flaky +donttest+=" or test_https_proxy_unsupported_tls_in_tls" %if 0%{?python3_version_nodots} == 36 -%define skiptest_python3_only or test_read_boundary_with_incomplete_chunk +donttest+="$python36_donttest" %endif -%define skiptest_python36_only or test_read_boundary_with_incomplete_chunk -%pytest_arch --ignore ./aiohttp -rs -k 'not (%{skiptest_allflavors} %{skiptest_$python_only})' +%pytest_arch --ignore ./aiohttp -rsEf -k "not ($donttest ${$python_donttest})" %files %{python_files} %license LICENSE.txt @@ -144,7 +140,9 @@ touch pytest.ini %{python_sitearch}/aiohttp %{python_sitearch}/aiohttp-%{version}*-info +%if %{with docs} %files -n %{name}-doc %doc docs/_build/html +%endif %changelog diff --git a/remove_deprecated_loop_argument.patch b/remove_deprecated_loop_argument.patch deleted file mode 100644 index 5a16a1d..0000000 --- a/remove_deprecated_loop_argument.patch +++ /dev/null @@ -1,59 +0,0 @@ -From dd3a89130b5769218550159ebbab9e28d8b974a3 Mon Sep 17 00:00:00 2001 -From: Hanaasagi -Date: Tue, 3 Aug 2021 11:53:45 +0000 -Subject: [PATCH] fix: remove deprecated loop argument for asnycio.sleep/gather - calls - ---- - CHANGES/5905.bugfix | 1 + - aiohttp/web.py | 4 +--- - tests/test_locks.py | 6 +++--- - 3 files changed, 5 insertions(+), 6 deletions(-) - create mode 100644 CHANGES/5905.bugfix - ---- /dev/null -+++ b/CHANGES/5905.bugfix -@@ -0,0 +1 @@ -+remove deprecated loop argument for asnycio.sleep/gather calls ---- a/aiohttp/web.py -+++ b/aiohttp/web.py -@@ -440,9 +440,7 @@ def _cancel_tasks( - for task in to_cancel: - task.cancel() - -- loop.run_until_complete( -- asyncio.gather(*to_cancel, loop=loop, return_exceptions=True) -- ) -+ loop.run_until_complete(asyncio.gather(*to_cancel, return_exceptions=True)) - - for task in to_cancel: - if task.cancelled(): ---- a/tests/test_locks.py -+++ b/tests/test_locks.py -@@ -18,7 +18,7 @@ class TestEventResultOrError: - return 1 - - t = loop.create_task(c()) -- await asyncio.sleep(0, loop=loop) -+ await asyncio.sleep(0) - e = Exception() - ev.set(exc=e) - assert (await t) == e -@@ -31,7 +31,7 @@ class TestEventResultOrError: - return 1 - - t = loop.create_task(c()) -- await asyncio.sleep(0, loop=loop) -+ await asyncio.sleep(0) - ev.set() - assert (await t) == 1 - -@@ -43,7 +43,7 @@ class TestEventResultOrError: - - t1 = loop.create_task(c()) - t2 = loop.create_task(c()) -- await asyncio.sleep(0, loop=loop) -+ await asyncio.sleep(0) - ev.cancel() - ev.set() - diff --git a/stdlib-typing_extensions.patch b/stdlib-typing_extensions.patch deleted file mode 100644 index 9ae650d..0000000 --- a/stdlib-typing_extensions.patch +++ /dev/null @@ -1,60 +0,0 @@ ---- - aiohttp/helpers.py | 5 ++++- - aiohttp/tracing.py | 5 ++++- - aiohttp/web_urldispatcher.py | 5 ++++- - setup.py | 2 +- - 4 files changed, 13 insertions(+), 4 deletions(-) - ---- a/aiohttp/helpers.py -+++ b/aiohttp/helpers.py -@@ -45,7 +45,10 @@ from urllib.request import getproxies - import async_timeout - import attr - from multidict import MultiDict, MultiDictProxy --from typing_extensions import Protocol -+try: -+ from typing import Protocol -+except (ImportError, ModuleNotFoundError): -+ from typing_extensions import Protocol - from yarl import URL - - from . import hdrs ---- a/aiohttp/tracing.py -+++ b/aiohttp/tracing.py -@@ -9,7 +9,10 @@ from .client_reqrep import ClientRespons - from .signals import Signal - - if TYPE_CHECKING: # pragma: no cover -- from typing_extensions import Protocol -+ try: -+ from typing import Protocol -+ except (ImportError, ModuleNotFoundError): -+ from typing_extensions import Protocol - - from .client import ClientSession - ---- a/aiohttp/web_urldispatcher.py -+++ b/aiohttp/web_urldispatcher.py -@@ -33,7 +33,10 @@ from typing import ( - cast, - ) - --from typing_extensions import TypedDict -+try: -+ from typing import TypedDict -+except (ImportError, ModuleNotFoundError): -+ from typing_extensions import TypedDict - from yarl import URL, __version__ as yarl_version # type: ignore - - from . import hdrs ---- a/setup.py -+++ b/setup.py -@@ -70,7 +70,7 @@ install_requires = [ - "async_timeout>=3.0,<4.0", - "yarl>=1.0,<2.0", - 'idna-ssl>=1.0; python_version<"3.7"', -- "typing_extensions>=3.6.5", -+ 'typing_extensions>=3.7.4; python_version<"3.8"', - ] - - diff --git a/unbundle-http-parser.patch b/unbundle-http-parser.patch deleted file mode 100644 index 3cdb724..0000000 --- a/unbundle-http-parser.patch +++ /dev/null @@ -1,25 +0,0 @@ -Index: aiohttp-3.7.2/aiohttp/_cparser.pxd -=================================================================== ---- aiohttp-3.7.2.orig/aiohttp/_cparser.pxd -+++ aiohttp-3.7.2/aiohttp/_cparser.pxd -@@ -1,7 +1,7 @@ - from libc.stdint cimport uint16_t, uint32_t, uint64_t - - --cdef extern from "../vendor/http-parser/http_parser.h": -+cdef extern from "http_parser.h": - ctypedef int (*http_data_cb) (http_parser*, - const char *at, - size_t length) except -1 -Index: aiohttp-3.7.2/setup.py -=================================================================== ---- aiohttp-3.7.2.orig/setup.py -+++ aiohttp-3.7.2/setup.py -@@ -27,7 +27,6 @@ extensions = [ - "aiohttp._http_parser", - [ - "aiohttp/_http_parser.c", -- "vendor/http-parser/http_parser.c", - "aiohttp/_find_header.c", - ], - define_macros=[("HTTP_PARSER_STRICT", 0)],