diff --git a/python-CacheControl.changes b/python-CacheControl.changes index f41a11f..6892deb 100644 --- a/python-CacheControl.changes +++ b/python-CacheControl.changes @@ -1,3 +1,10 @@ +------------------------------------------------------------------- +Tue May 30 07:53:24 UTC 2023 - Daniel Garcia + +- Add requests-fix.patch to support latest version of urllib3 and + requests + gh#ionrock/cachecontrol#301, gh#ionrock/cachecontrol#304 + ------------------------------------------------------------------- Mon May 8 06:37:48 UTC 2023 - Johannes Kastl diff --git a/python-CacheControl.spec b/python-CacheControl.spec index b1adec7..5df6265 100644 --- a/python-CacheControl.spec +++ b/python-CacheControl.spec @@ -25,7 +25,11 @@ License: Apache-2.0 Group: Development/Languages/Python URL: https://github.com/ionrock/cachecontrol Source: https://github.com/ionrock/cachecontrol/archive/v%{version}.tar.gz#/CacheControl-%{version}.tar.gz +# PATCH-FIX-UPSTREAM requests-fix.patch -- gh#ionrock/cachecontrol#301, gh#ionrock/cachecontrol#304 +Patch0: requests-fix.patch +BuildRequires: %{python_module pip} BuildRequires: %{python_module setuptools} +BuildRequires: %{python_module wheel} BuildRequires: fdupes BuildRequires: python-rpm-macros Requires: python-msgpack >= 0.5.2 @@ -51,14 +55,18 @@ CacheControl is a port of the caching algorithms in httplib2 for use with requests session object. %prep -%setup -q -n cachecontrol-%{version} +%autosetup -p1 -n cachecontrol-%{version} sed -i -e 's/^from mock/from unittest.mock/' -e 's/^import mock/from unittest import mock/' tests/*.py %build -%python_build +%pyproject_wheel %install -%python_install +%pyproject_install + +# do not pack tests +%python_expand rm -rf %{buildroot}%{$python_sitelib}/tests + %python_clone -a %{buildroot}%{_bindir}/doesitcache %python_expand %fdupes %{buildroot}%{$python_sitelib} diff --git a/requests-fix.patch b/requests-fix.patch new file mode 100644 index 0000000..4318d8e --- /dev/null +++ b/requests-fix.patch @@ -0,0 +1,94 @@ +Index: cachecontrol-0.12.12/.github/workflows/tests.yml +=================================================================== +--- cachecontrol-0.12.12.orig/.github/workflows/tests.yml ++++ cachecontrol-0.12.12/.github/workflows/tests.yml +@@ -14,9 +14,15 @@ jobs: + runs-on: "${{ matrix.os }}" + + strategy: ++ fail-fast: false + matrix: +- python-version: ["3.6", "3.7", "3.8", "3.9", "3.10"] +- os: ["macos-10.15", "windows-latest", "ubuntu-latest"] ++ python-version: ["3.7", "3.8", "3.9", "3.10"] ++ os: ["macos-latest", "windows-latest", "ubuntu-latest"] ++ include: ++ - python-version: "3.6" ++ os: "ubuntu-20.04" ++ - python-version: "3.6" ++ os: "windows-latest" + + steps: + - uses: "actions/checkout@v2" +Index: cachecontrol-0.12.12/cachecontrol/serialize.py +=================================================================== +--- cachecontrol-0.12.12.orig/cachecontrol/serialize.py ++++ cachecontrol-0.12.12/cachecontrol/serialize.py +@@ -51,7 +51,6 @@ class Serializer(object): + u"status": response.status, + u"version": response.version, + u"reason": text_type(response.reason), +- u"strict": response.strict, + u"decode_content": response.decode_content, + } + } +@@ -138,6 +137,9 @@ class Serializer(object): + # TypeError: 'str' does not support the buffer interface + body = io.BytesIO(body_raw.encode("utf8")) + ++ # Discard any `strict` parameter serialized by older version of cachecontrol. ++ cached["response"].pop("strict", None) ++ + return HTTPResponse(body=body, preload_content=False, **cached["response"]) + + def _loads_v0(self, request, data, body_file=None): +Index: cachecontrol-0.12.12/tests/test_etag.py +=================================================================== +--- cachecontrol-0.12.12.orig/tests/test_etag.py ++++ cachecontrol-0.12.12/tests/test_etag.py +@@ -1,6 +1,8 @@ + # SPDX-FileCopyrightText: 2015 Eric Larson + # + # SPDX-License-Identifier: Apache-2.0 ++from contextlib import ExitStack ++from contextlib import suppress + + import pytest + +@@ -134,11 +136,20 @@ class TestReleaseConnection(object): + + resp = Mock(status=304, headers={}) + +- # This is how the urllib3 response is created in +- # requests.adapters +- response_mod = "requests.adapters.HTTPResponse.from_httplib" ++ # These are various ways the the urllib3 response can created ++ # in requests.adapters. Which one is actually used depends ++ # on which version if `requests` is in use, as well as perhaps ++ # other parameters. ++ response_mods = [ ++ "requests.adapters.HTTPResponse.from_httplib", ++ "urllib3.HTTPConnectionPool.urlopen", ++ ] ++ ++ with ExitStack() as stack: ++ for mod in response_mods: ++ with suppress(ImportError, AttributeError): ++ stack.enter_context(patch(mod, Mock(return_value=resp))) + +- with patch(response_mod, Mock(return_value=resp)): + sess.get(etag_url) + assert resp.read.called + assert resp.release_conn.called +Index: cachecontrol-0.12.12/tests/test_vary.py +=================================================================== +--- cachecontrol-0.12.12.orig/tests/test_vary.py ++++ cachecontrol-0.12.12/tests/test_vary.py +@@ -33,7 +33,6 @@ class TestVary(object): + cached.status == resp.raw.status, + cached.version == resp.raw.version, + cached.reason == resp.raw.reason, +- cached.strict == resp.raw.strict, + cached.decode_content == resp.raw.decode_content, + ] +