forked from pool/python-respx
- update to 0.22.0:
* Support HTTPX 0.28.0, thanks @ndhansen * Drop support for Python 3.7, to align with HTTPX 0.25.0 * Update CI test to not fail fast and cancel workflows * Add dependabot to check GitHub actions packages * Add Python 3.13 to test suite - drop respx-pr267-httpx0.28.patch, respx-pr278-httpx0.28.patch: upstream OBS-URL: https://build.opensuse.org/package/show/devel:languages:python/python-respx?expand=0&rev=23
This commit is contained in:
23
.gitattributes
vendored
Normal file
23
.gitattributes
vendored
Normal file
@@ -0,0 +1,23 @@
|
|||||||
|
## Default LFS
|
||||||
|
*.7z filter=lfs diff=lfs merge=lfs -text
|
||||||
|
*.bsp filter=lfs diff=lfs merge=lfs -text
|
||||||
|
*.bz2 filter=lfs diff=lfs merge=lfs -text
|
||||||
|
*.gem filter=lfs diff=lfs merge=lfs -text
|
||||||
|
*.gz filter=lfs diff=lfs merge=lfs -text
|
||||||
|
*.jar filter=lfs diff=lfs merge=lfs -text
|
||||||
|
*.lz filter=lfs diff=lfs merge=lfs -text
|
||||||
|
*.lzma filter=lfs diff=lfs merge=lfs -text
|
||||||
|
*.obscpio filter=lfs diff=lfs merge=lfs -text
|
||||||
|
*.oxt filter=lfs diff=lfs merge=lfs -text
|
||||||
|
*.pdf filter=lfs diff=lfs merge=lfs -text
|
||||||
|
*.png filter=lfs diff=lfs merge=lfs -text
|
||||||
|
*.rpm filter=lfs diff=lfs merge=lfs -text
|
||||||
|
*.tbz filter=lfs diff=lfs merge=lfs -text
|
||||||
|
*.tbz2 filter=lfs diff=lfs merge=lfs -text
|
||||||
|
*.tgz filter=lfs diff=lfs merge=lfs -text
|
||||||
|
*.ttf filter=lfs diff=lfs merge=lfs -text
|
||||||
|
*.txz filter=lfs diff=lfs merge=lfs -text
|
||||||
|
*.whl filter=lfs diff=lfs merge=lfs -text
|
||||||
|
*.xz filter=lfs diff=lfs merge=lfs -text
|
||||||
|
*.zip filter=lfs diff=lfs merge=lfs -text
|
||||||
|
*.zst filter=lfs diff=lfs merge=lfs -text
|
1
.gitignore
vendored
Normal file
1
.gitignore
vendored
Normal file
@@ -0,0 +1 @@
|
|||||||
|
.osc
|
97
python-respx.changes
Normal file
97
python-respx.changes
Normal file
@@ -0,0 +1,97 @@
|
|||||||
|
-------------------------------------------------------------------
|
||||||
|
Sun Mar 30 08:14:05 UTC 2025 - Dirk Müller <dmueller@suse.com>
|
||||||
|
|
||||||
|
- update to 0.22.0:
|
||||||
|
* Support HTTPX 0.28.0, thanks @ndhansen
|
||||||
|
* Drop support for Python 3.7, to align with HTTPX 0.25.0
|
||||||
|
* Update CI test to not fail fast and cancel workflows
|
||||||
|
* Add dependabot to check GitHub actions packages
|
||||||
|
* Add Python 3.13 to test suite
|
||||||
|
- drop respx-pr267-httpx0.28.patch,
|
||||||
|
respx-pr278-httpx0.28.patch: upstream
|
||||||
|
|
||||||
|
-------------------------------------------------------------------
|
||||||
|
Thu Dec 12 15:14:25 UTC 2024 - Ben Greiner <code@bnavigator.de>
|
||||||
|
|
||||||
|
- Add patches for httpx 0.28
|
||||||
|
* respx-pr267-httpx0.28.patch gh#lundberg/respx#267
|
||||||
|
* respx-pr278-httpx0.28.patch gh#lundberg/respx#278
|
||||||
|
|
||||||
|
-------------------------------------------------------------------
|
||||||
|
Wed May 22 17:02:32 UTC 2024 - Johannes Kastl <opensuse_buildservice@ojkastl.de>
|
||||||
|
|
||||||
|
- add sle15_python_module_pythons
|
||||||
|
|
||||||
|
-------------------------------------------------------------------
|
||||||
|
Sat Apr 20 07:48:17 UTC 2024 - Dirk Müller <dmueller@suse.com>
|
||||||
|
|
||||||
|
- update to 0.21.1:
|
||||||
|
* Fix `files` pattern not handling `str` and `BytesIO`
|
||||||
|
* Add support for `None` values in `data` pattern
|
||||||
|
|
||||||
|
-------------------------------------------------------------------
|
||||||
|
Thu Mar 21 17:03:25 UTC 2024 - Dirk Müller <dmueller@suse.com>
|
||||||
|
|
||||||
|
- update to 0.21.0:
|
||||||
|
* Fix matching request data when files are provided
|
||||||
|
* Add support for data\_\_contains lookup
|
||||||
|
* Add `files` pattern to support matching on uploads
|
||||||
|
* Add `SetCookie` utility for easier mocking of response cookie
|
||||||
|
headers
|
||||||
|
* Enhance documentation on iterable side effects
|
||||||
|
* Enhance documentation on named routes and add tip about a
|
||||||
|
catch-all route
|
||||||
|
|
||||||
|
-------------------------------------------------------------------
|
||||||
|
Tue Jan 9 22:11:30 UTC 2024 - Dirk Müller <dmueller@suse.com>
|
||||||
|
|
||||||
|
- update to 0.20.2:
|
||||||
|
* Better assertion output for `assert_all_called`
|
||||||
|
* Support for quoted path pattern matching
|
||||||
|
* Enable content\_\_contains pattern, thanks @rjprins
|
||||||
|
* Added initial `CONTRIBUTING.md`, thanks @morenoh149
|
||||||
|
* Docs about retrieving mocked calls, thanks
|
||||||
|
* Docs about `Router.assert_all_called()`, thanks @BeyondEvil
|
||||||
|
for input
|
||||||
|
- drop use-real-ipv6-address.patch (upstream)
|
||||||
|
|
||||||
|
-------------------------------------------------------------------
|
||||||
|
Fri Jun 16 06:03:28 UTC 2023 - Steve Kowalik <steven.kowalik@suse.com>
|
||||||
|
|
||||||
|
- Add patch use-real-ipv6-address.patch:
|
||||||
|
* Use a real IPv6 address to avoid an address parsing exception
|
||||||
|
|
||||||
|
-------------------------------------------------------------------
|
||||||
|
Mon Jan 16 11:33:19 UTC 2023 - Daniel Garcia <daniel.garcia@suse.com>
|
||||||
|
|
||||||
|
- Update to 0.20.1
|
||||||
|
* Support HTTPX 0.23.1, thanks @g-as for input (#223)
|
||||||
|
|
||||||
|
-------------------------------------------------------------------
|
||||||
|
Wed Oct 12 15:57:25 UTC 2022 - Yogalakshmi Arunachalam <yarunachalam@suse.com>
|
||||||
|
|
||||||
|
- Update to version 0.20.0
|
||||||
|
Changed
|
||||||
|
* Type Router.__getitem__ to not return optional routes, thanks @flaeppe (#216)
|
||||||
|
* Change Call.response to raise instead of returning optional response (#217)
|
||||||
|
* Change CallList.last to raise instead of return optional call (#217)
|
||||||
|
* Type M() to not return optional pattern, by introducing a Noop pattern (#217)
|
||||||
|
* Type Route.pattern to not be optional (#217)
|
||||||
|
Fixed
|
||||||
|
* Correct type hints for side effects (#217)
|
||||||
|
Added
|
||||||
|
* Runs mypy on both tests and respx (#217)
|
||||||
|
* Added nox test session for python 3.11 (#217)
|
||||||
|
* Added Call.has_response helper, now that .response raises (#217)
|
||||||
|
|
||||||
|
-------------------------------------------------------------------
|
||||||
|
Mon Aug 22 07:35:00 UTC 2022 - Steve Kowalik <steven.kowalik@suse.com>
|
||||||
|
|
||||||
|
- Run pytest with --asyncio-mode=auto due to new release of
|
||||||
|
pytest-asyncio.
|
||||||
|
|
||||||
|
-------------------------------------------------------------------
|
||||||
|
Tue Aug 2 04:13:14 UTC 2022 - Steve Kowalik <steven.kowalik@suse.com>
|
||||||
|
|
||||||
|
- Initial package for 0.19.2
|
||||||
|
|
67
python-respx.spec
Normal file
67
python-respx.spec
Normal file
@@ -0,0 +1,67 @@
|
|||||||
|
#
|
||||||
|
# spec file for package python-respx
|
||||||
|
#
|
||||||
|
# Copyright (c) 2025 SUSE LLC
|
||||||
|
#
|
||||||
|
# All modifications and additions to the file contributed by third parties
|
||||||
|
# remain the property of their copyright owners, unless otherwise agreed
|
||||||
|
# upon. The license for this file, and modifications and additions to the
|
||||||
|
# file, is the same license as for the pristine package itself (unless the
|
||||||
|
# license for the pristine package is not an Open Source License, in which
|
||||||
|
# case the license is the MIT License). An "Open Source License" is a
|
||||||
|
# license that conforms to the Open Source Definition (Version 1.9)
|
||||||
|
# published by the Open Source Initiative.
|
||||||
|
|
||||||
|
# Please submit bugfixes or comments via https://bugs.opensuse.org/
|
||||||
|
#
|
||||||
|
|
||||||
|
|
||||||
|
%{?sle15_python_module_pythons}
|
||||||
|
Name: python-respx
|
||||||
|
Version: 0.22.0
|
||||||
|
Release: 0
|
||||||
|
Summary: Mock HTTPX with request patterns and response side effects
|
||||||
|
License: BSD-3-Clause
|
||||||
|
URL: https://github.com/lundberg/respx
|
||||||
|
Source0: https://github.com/lundberg/respx/archive/refs/tags/%{version}.tar.gz#/respx-%{version}.tar.gz
|
||||||
|
BuildRequires: %{python_module Flask}
|
||||||
|
# >= 0.28 for tests because of the Patches
|
||||||
|
BuildRequires: %{python_module httpx >= 0.28}
|
||||||
|
BuildRequires: %{python_module pip}
|
||||||
|
BuildRequires: %{python_module pytest-asyncio}
|
||||||
|
BuildRequires: %{python_module pytest}
|
||||||
|
BuildRequires: %{python_module setuptools}
|
||||||
|
BuildRequires: %{python_module starlette}
|
||||||
|
BuildRequires: %{python_module trio}
|
||||||
|
BuildRequires: %{python_module typing_extensions}
|
||||||
|
BuildRequires: %{python_module wheel}
|
||||||
|
BuildRequires: fdupes
|
||||||
|
BuildRequires: python-rpm-macros
|
||||||
|
Requires: python-httpx >= 0.21
|
||||||
|
BuildArch: noarch
|
||||||
|
%python_subpackages
|
||||||
|
|
||||||
|
%description
|
||||||
|
Python library to mock httpx with request patterns and responses
|
||||||
|
|
||||||
|
%prep
|
||||||
|
%autosetup -p1 -n respx-%{version}
|
||||||
|
sed -i '/--cov/d' setup.cfg
|
||||||
|
|
||||||
|
%build
|
||||||
|
%pyproject_wheel
|
||||||
|
|
||||||
|
%install
|
||||||
|
%pyproject_install
|
||||||
|
%python_expand %fdupes %{buildroot}%{$python_sitelib}
|
||||||
|
|
||||||
|
%check
|
||||||
|
%pytest -rfE
|
||||||
|
|
||||||
|
%files %{python_files}
|
||||||
|
%license LICENSE.md
|
||||||
|
%doc README.md
|
||||||
|
%{python_sitelib}/respx-%{version}.dist-info
|
||||||
|
%{python_sitelib}/respx
|
||||||
|
|
||||||
|
%changelog
|
BIN
respx-0.21.1.tar.gz
(Stored with Git LFS)
Normal file
BIN
respx-0.21.1.tar.gz
(Stored with Git LFS)
Normal file
Binary file not shown.
BIN
respx-0.22.0.tar.gz
(Stored with Git LFS)
Normal file
BIN
respx-0.22.0.tar.gz
(Stored with Git LFS)
Normal file
Binary file not shown.
67
respx-pr267-httpx0.28.patch
Normal file
67
respx-pr267-httpx0.28.patch
Normal file
@@ -0,0 +1,67 @@
|
|||||||
|
From 4abc14b995d5d7e3b1a593927ff9a95f9da4d097 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Jonas Lundberg <jonas@5monkeys.se>
|
||||||
|
Date: Tue, 2 Apr 2024 20:14:16 +0200
|
||||||
|
Subject: [PATCH] Fix test warnings
|
||||||
|
|
||||||
|
---
|
||||||
|
tests/conftest.py | 6 +++---
|
||||||
|
tests/test_mock.py | 8 +++-----
|
||||||
|
2 files changed, 6 insertions(+), 8 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/tests/conftest.py b/tests/conftest.py
|
||||||
|
index 47b3fcb..02b7edf 100644
|
||||||
|
--- a/tests/conftest.py
|
||||||
|
+++ b/tests/conftest.py
|
||||||
|
@@ -2,7 +2,7 @@
|
||||||
|
import pytest
|
||||||
|
|
||||||
|
import respx
|
||||||
|
-from respx.fixtures import session_event_loop as event_loop # noqa: F401
|
||||||
|
+from respx.fixtures import session_event_loop # noqa: F401
|
||||||
|
|
||||||
|
pytest_plugins = ["pytester"]
|
||||||
|
|
||||||
|
@@ -23,7 +23,7 @@ async def my_mock():
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.fixture(scope="session")
|
||||||
|
-async def mocked_foo(event_loop): # noqa: F811
|
||||||
|
+async def mocked_foo(session_event_loop): # noqa: F811
|
||||||
|
async with respx.mock(
|
||||||
|
base_url="https://foo.api/api/", using="httpcore"
|
||||||
|
) as respx_mock:
|
||||||
|
@@ -33,7 +33,7 @@ async def mocked_foo(event_loop): # noqa: F811
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.fixture(scope="session")
|
||||||
|
-async def mocked_ham(event_loop): # noqa: F811
|
||||||
|
+async def mocked_ham(session_event_loop): # noqa: F811
|
||||||
|
async with respx.mock(base_url="https://ham.api", using="httpcore") as respx_mock:
|
||||||
|
respx_mock.get("/", name="index").respond(200)
|
||||||
|
yield respx_mock
|
||||||
|
diff --git a/tests/test_mock.py b/tests/test_mock.py
|
||||||
|
index 76631b5..12b2d23 100644
|
||||||
|
--- a/tests/test_mock.py
|
||||||
|
+++ b/tests/test_mock.py
|
||||||
|
@@ -473,18 +473,16 @@ def test_add_remove_targets():
|
||||||
|
assert len(HTTPCoreMocker.targets) == pre_add_count
|
||||||
|
|
||||||
|
|
||||||
|
-async def test_proxies():
|
||||||
|
+async def test_proxy():
|
||||||
|
with respx.mock:
|
||||||
|
respx.get("https://foo.bar/") % dict(json={"foo": "bar"})
|
||||||
|
- with httpx.Client(proxies={"https://": "https://1.1.1.1:1"}) as client:
|
||||||
|
+ with httpx.Client(proxy="https://1.1.1.1:1") as client:
|
||||||
|
response = client.get("https://foo.bar/")
|
||||||
|
assert response.json() == {"foo": "bar"}
|
||||||
|
|
||||||
|
async with respx.mock:
|
||||||
|
respx.get("https://foo.bar/") % dict(json={"foo": "bar"})
|
||||||
|
- async with httpx.AsyncClient(
|
||||||
|
- proxies={"https://": "https://1.1.1.1:1"}
|
||||||
|
- ) as client:
|
||||||
|
+ async with httpx.AsyncClient(proxy="https://1.1.1.1:1") as client:
|
||||||
|
response = await client.get("https://foo.bar/")
|
||||||
|
assert response.json() == {"foo": "bar"}
|
||||||
|
|
79
respx-pr278-httpx0.28.patch
Normal file
79
respx-pr278-httpx0.28.patch
Normal file
@@ -0,0 +1,79 @@
|
|||||||
|
From a9f81cb8dcfe5cd97f51e1a375c8406d484f31c9 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Nicholas Hansen <ndhansen@leskat.net>
|
||||||
|
Date: Fri, 29 Nov 2024 14:08:23 +0000
|
||||||
|
Subject: [PATCH] Fix compatibility with httpx 0.28.0
|
||||||
|
|
||||||
|
---
|
||||||
|
respx/mocks.py | 7 ++++++-
|
||||||
|
1 file changed, 6 insertions(+), 1 deletion(-)
|
||||||
|
|
||||||
|
Index: respx-0.21.1/respx/mocks.py
|
||||||
|
===================================================================
|
||||||
|
--- respx-0.21.1.orig/respx/mocks.py
|
||||||
|
+++ respx-0.21.1/respx/mocks.py
|
||||||
|
@@ -297,6 +297,11 @@ class HTTPCoreMocker(AbstractRequestMock
|
||||||
|
Create a `HTTPX` request from transport request arg.
|
||||||
|
"""
|
||||||
|
request = kwargs["request"]
|
||||||
|
+ method = (
|
||||||
|
+ request.method.decode("ascii").upper()
|
||||||
|
+ if isinstance(request.method, bytes)
|
||||||
|
+ else request.method.upper()
|
||||||
|
+ )
|
||||||
|
raw_url = (
|
||||||
|
request.url.scheme,
|
||||||
|
request.url.host,
|
||||||
|
@@ -304,7 +309,7 @@ class HTTPCoreMocker(AbstractRequestMock
|
||||||
|
request.url.target,
|
||||||
|
)
|
||||||
|
return httpx.Request(
|
||||||
|
- request.method,
|
||||||
|
+ method,
|
||||||
|
parse_url(raw_url),
|
||||||
|
headers=request.headers,
|
||||||
|
stream=request.stream,
|
||||||
|
Index: respx-0.21.1/tests/test_api.py
|
||||||
|
===================================================================
|
||||||
|
--- respx-0.21.1.orig/tests/test_api.py
|
||||||
|
+++ respx-0.21.1/tests/test_api.py
|
||||||
|
@@ -214,7 +214,7 @@ async def test_content_variants(client,
|
||||||
|
{"X-Foo": "bar"},
|
||||||
|
{
|
||||||
|
"Content-Type": "application/json",
|
||||||
|
- "Content-Length": "14",
|
||||||
|
+ "Content-Length": "13",
|
||||||
|
"X-Foo": "bar",
|
||||||
|
},
|
||||||
|
),
|
||||||
|
@@ -223,7 +223,7 @@ async def test_content_variants(client,
|
||||||
|
{"Content-Type": "application/json; charset=utf-8", "X-Foo": "bar"},
|
||||||
|
{
|
||||||
|
"Content-Type": "application/json; charset=utf-8",
|
||||||
|
- "Content-Length": "14",
|
||||||
|
+ "Content-Length": "13",
|
||||||
|
"X-Foo": "bar",
|
||||||
|
},
|
||||||
|
),
|
||||||
|
@@ -322,19 +322,19 @@ 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": "."}'
|
||||||
|
+ 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": "!"}'
|
||||||
|
+ 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 request.url.host == "foo.bar" and request.content == b'{"foo":"bar"}':
|
||||||
|
return respx.MockResponse(
|
||||||
|
202,
|
||||||
|
headers={"X-Foo": "bar"},
|
Reference in New Issue
Block a user