From 71a550e25db5fb3db2e9c67a2902e27a15538b16 Mon Sep 17 00:00:00 2001 From: alekseik1 <1alekseik1@gmail.com> Date: Mon, 27 Jan 2025 17:54:32 +0300 Subject: [PATCH 1/3] fix: use thread-safe run Starlette uses `anyio` with threads --- vcr/stubs/httpx_stubs.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/vcr/stubs/httpx_stubs.py b/vcr/stubs/httpx_stubs.py index 508996b1..fed7ed5d 100644 --- a/vcr/stubs/httpx_stubs.py +++ b/vcr/stubs/httpx_stubs.py @@ -174,12 +174,12 @@ def _run_async_function(sync_func, *args, **kwargs): - No event loop exists yet. """ try: - asyncio.get_running_loop() + loop = asyncio.get_running_loop() except RuntimeError: return asyncio.run(sync_func(*args, **kwargs)) else: # If inside a running loop, create a task and wait for it - return asyncio.ensure_future(sync_func(*args, **kwargs)) + return asyncio.run_coroutine_threadsafe(sync_func(*args, **kwargs), loop) def _sync_vcr_send(cassette, real_send, *args, **kwargs): From b71f5ce9472e2ed128870bb69f9609b9dad95ae2 Mon Sep 17 00:00:00 2001 From: alekseik1 <1alekseik1@gmail.com> Date: Mon, 27 Jan 2025 13:13:48 +0300 Subject: [PATCH 2/3] fix(httpx): don't save response if filtered to None --- vcr/stubs/httpx_stubs.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/vcr/stubs/httpx_stubs.py b/vcr/stubs/httpx_stubs.py index fed7ed5d..d02920cb 100644 --- a/vcr/stubs/httpx_stubs.py +++ b/vcr/stubs/httpx_stubs.py @@ -136,7 +136,9 @@ async def _record_responses(cassette, vcr_request, real_response, aread): # final redirect value vcr_request = _make_vcr_request(real_response.request) - cassette.append(vcr_request, await _to_serialized_response(real_response, aread)) + should_save_response = cassette._before_record_request(vcr_request) is not None + if should_save_response: + cassette.append(vcr_request, await _to_serialized_response(real_response, aread)) return real_response From f002c31171ab464bb62c0fdb2d367ab96577d162 Mon Sep 17 00:00:00 2001 From: alekseik1 <1alekseik1@gmail.com> Date: Mon, 27 Jan 2025 17:55:53 +0300 Subject: [PATCH 3/3] Revert "fix(httpx): don't save response if filtered to None" This reverts commit d7633729de317c26c632defde8b25ef1dcf771e6. --- vcr/stubs/httpx_stubs.py | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/vcr/stubs/httpx_stubs.py b/vcr/stubs/httpx_stubs.py index d02920cb..fed7ed5d 100644 --- a/vcr/stubs/httpx_stubs.py +++ b/vcr/stubs/httpx_stubs.py @@ -136,9 +136,7 @@ async def _record_responses(cassette, vcr_request, real_response, aread): # final redirect value vcr_request = _make_vcr_request(real_response.request) - should_save_response = cassette._before_record_request(vcr_request) is not None - if should_save_response: - cassette.append(vcr_request, await _to_serialized_response(real_response, aread)) + cassette.append(vcr_request, await _to_serialized_response(real_response, aread)) return real_response