commit:     0456da8736e2e11acfa1005a39e94f5e8f93da89
Author:     Eli Schwartz <eschwartz <AT> gentoo <DOT> org>
AuthorDate: Tue Jul  8 04:16:39 2025 +0000
Commit:     Eli Schwartz <eschwartz <AT> gentoo <DOT> org>
CommitDate: Tue Jul  8 22:59:44 2025 +0000
URL:        https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=0456da87

dev-python/respx: back down from version constraint on httpx

The tests are picky about exact whitespace formatting, it's not a real
dep. It's trivial to pass either version, anyway.

https://github.com/gentoo/gentoo/pull/39789#issuecomment-2556521835

Signed-off-by: Eli Schwartz <eschwartz <AT> gentoo.org>

 .../files/respx-0.22.0-tests-flexibility.patch     | 98 ++++++++++++++++++++++
 ...spx-0.22.0-r1.ebuild => respx-0.22.0-r2.ebuild} |  6 +-
 2 files changed, 103 insertions(+), 1 deletion(-)

diff --git a/dev-python/respx/files/respx-0.22.0-tests-flexibility.patch 
b/dev-python/respx/files/respx-0.22.0-tests-flexibility.patch
new file mode 100644
index 000000000000..ea9e6cd20252
--- /dev/null
+++ b/dev-python/respx/files/respx-0.22.0-tests-flexibility.patch
@@ -0,0 +1,98 @@
+From 92925950090c28124d191f81f0f0c6a742e6b136 Mon Sep 17 00:00:00 2001
+From: Eli Schwartz <[email protected]>
+Date: Tue, 8 Jul 2025 00:21:38 -0400
+Subject: [PATCH] tests: support any httpx version
+
+Signed-off-by: Eli Schwartz <[email protected]>
+---
+ noxfile.py        |  2 +-
+ tests/test_api.py | 23 ++++++++++++++++++-----
+ 2 files changed, 19 insertions(+), 6 deletions(-)
+
+diff --git a/noxfile.py b/noxfile.py
+index 39fbef4..40fe124 100644
+--- a/noxfile.py
++++ b/noxfile.py
+@@ -7,7 +7,7 @@ nox.options.keywords = "test + mypy"
+ 
+ @nox.session(python=["3.8", "3.9", "3.10", "3.11", "3.12", "3.13"])
+ def test(session):
+-    deps = ["pytest", "pytest-asyncio", "pytest-cov", "trio", "starlette", 
"flask"]
++    deps = ["pytest", "pytest-asyncio", "pytest-cov", "trio", "starlette", 
"flask", "packaging"]
+     session.install("--upgrade", *deps)
+     session.install("-e", ".")
+ 
+diff --git a/tests/test_api.py b/tests/test_api.py
+index 81ca4b2..170389b 100644
+--- a/tests/test_api.py
++++ b/tests/test_api.py
+@@ -7,12 +7,15 @@ from unittest import mock
+ import httpcore
+ import httpx
+ import pytest
++from packaging.version import Version
+ 
+ import respx
+ from respx.models import Route
+ from respx.patterns import M
+ from respx.router import MockRouter
+ 
++httpx_0_28 = Version(httpx.__version__) >= Version('0.28')
++
+ 
+ async def test_http_methods(client):
+     async with respx.mock:
+@@ -214,7 +217,7 @@ async def test_content_variants(client, key, value, 
expected_content_type):
+             {"X-Foo": "bar"},
+             {
+                 "Content-Type": "application/json",
+-                "Content-Length": "13",
++                "Content-Length": "13" if httpx_0_28 else "14",
+                 "X-Foo": "bar",
+             },
+         ),
+@@ -223,7 +226,7 @@ async def test_content_variants(client, key, value, 
expected_content_type):
+             {"Content-Type": "application/json; charset=utf-8", "X-Foo": 
"bar"},
+             {
+                 "Content-Type": "application/json; charset=utf-8",
+-                "Content-Length": "13",
++                "Content-Length": "13" if httpx_0_28 else "14",
+                 "X-Foo": "bar",
+             },
+         ),
+@@ -322,19 +325,29 @@ async def test_callable_content(client):
+         assert request.called is True
+         assert async_response.status_code == 200
+         assert async_response.text == "hello world."
+-        assert request.calls[-1][0].content == b'{"x":"."}'
++        if httpx_0_28:
++            assert request.calls[-1][0].content == b'{"x":"."}'
++        else:
++            assert request.calls[-1][0].content == b'{"x": "."}'
+ 
+         respx_mock.reset()
+         sync_response = httpx.post("https://foo.bar/jonas/";, json={"x": "!"})
+         assert request.called is True
+         assert sync_response.status_code == 200
+         assert sync_response.text == "hello jonas!"
+-        assert request.calls[-1][0].content == b'{"x":"!"}'
++        if httpx_0_28:
++            assert request.calls[-1][0].content == b'{"x":"!"}'
++        else:
++            assert request.calls[-1][0].content == b'{"x": "!"}'
+ 
+ 
+ async def test_request_callback(client):
+     def callback(request, name):
+-        if request.url.host == "foo.bar" and request.content == 
b'{"foo":"bar"}':
++        if httpx_0_28:
++            content = b'{"foo":"bar"}'
++        else:
++            content = b'{"foo": "bar"}'
++        if request.url.host == "foo.bar" and request.content == content:
+             return respx.MockResponse(
+                 202,
+                 headers={"X-Foo": "bar"},
+-- 
+2.49.0
+

diff --git a/dev-python/respx/respx-0.22.0-r1.ebuild 
b/dev-python/respx/respx-0.22.0-r2.ebuild
similarity index 89%
rename from dev-python/respx/respx-0.22.0-r1.ebuild
rename to dev-python/respx/respx-0.22.0-r2.ebuild
index decde3e63df0..84b80eb2e270 100644
--- a/dev-python/respx/respx-0.22.0-r1.ebuild
+++ b/dev-python/respx/respx-0.22.0-r2.ebuild
@@ -25,7 +25,7 @@ SLOT="0"
 KEYWORDS="amd64 arm64 x86"
 
 RDEPEND="
-       >=dev-python/httpx-0.28.0[${PYTHON_USEDEP}]
+       >=dev-python/httpx-0.25.0[${PYTHON_USEDEP}]
 "
 BDEPEND="
        test? (
@@ -37,6 +37,10 @@ BDEPEND="
        )
 "
 
+PATCHES=(
+       "${FILESDIR}"/${PN}-0.22.0-tests-flexibility.patch
+)
+
 distutils_enable_tests pytest
 
 python_test() {

Reply via email to