From: Alex <8340441+alexgmin@users.noreply.github.com> Date: Mon, 26 Feb 2024 16:36:58 +0000 (+0100) Subject: Fix client.send() timeout new Request instance (#3116) X-Git-Tag: 0.27.1~26 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=6d852d319acd5d97caf14037dff15ede04b37542;p=thirdparty%2Fhttpx.git Fix client.send() timeout new Request instance (#3116) --- diff --git a/httpx/_client.py b/httpx/_client.py index cf3b3062..ba5decf8 100644 --- a/httpx/_client.py +++ b/httpx/_client.py @@ -562,6 +562,15 @@ class BaseClient: return request.stream + def _set_timeout(self, request: Request) -> None: + if "timeout" not in request.extensions: + timeout = ( + self.timeout + if isinstance(self.timeout, UseClientDefault) + else Timeout(self.timeout) + ) + request.extensions = dict(**request.extensions, timeout=timeout.as_dict()) + class Client(BaseClient): """ @@ -911,6 +920,8 @@ class Client(BaseClient): else follow_redirects ) + self._set_timeout(request) + auth = self._build_request_auth(request, auth) response = self._send_handling_auth( @@ -1658,6 +1669,8 @@ class AsyncClient(BaseClient): else follow_redirects ) + self._set_timeout(request) + auth = self._build_request_auth(request, auth) response = await self._send_handling_auth( diff --git a/tests/test_timeouts.py b/tests/test_timeouts.py index 09b25160..666cc8e3 100644 --- a/tests/test_timeouts.py +++ b/tests/test_timeouts.py @@ -42,3 +42,14 @@ async def test_pool_timeout(server): with pytest.raises(httpx.PoolTimeout): async with client.stream("GET", server.url): await client.get(server.url) + + +@pytest.mark.anyio +async def test_async_client_new_request_send_timeout(server): + timeout = httpx.Timeout(1e-6) + + async with httpx.AsyncClient(timeout=timeout) as client: + with pytest.raises(httpx.TimeoutException): + await client.send( + httpx.Request("GET", server.url.copy_with(path="/slow_response")) + )