feat: add non-None default timeout to AuthorizedSession.request() (#435)
Closes #434.
This PR adds a non-None default timeout to `AuthorizedSession.request()` to prevent requests from hanging indefinitely in a default case.
Should help with googleapis/google-cloud-python#10182
diff --git a/google/auth/transport/requests.py b/google/auth/transport/requests.py
index ce78e63..1c709d4 100644
--- a/google/auth/transport/requests.py
+++ b/google/auth/transport/requests.py
@@ -42,6 +42,8 @@
_LOGGER = logging.getLogger(__name__)
+_DEFAULT_TIMEOUT = 120 # in seconds
+
class _Response(transport.Response):
"""Requests transport response adapter.
@@ -141,7 +143,13 @@
self.session = session
def __call__(
- self, url, method="GET", body=None, headers=None, timeout=120, **kwargs
+ self,
+ url,
+ method="GET",
+ body=None,
+ headers=None,
+ timeout=_DEFAULT_TIMEOUT,
+ **kwargs
):
"""Make an HTTP request using requests.
@@ -246,7 +254,7 @@
data=None,
headers=None,
max_allowed_time=None,
- timeout=None,
+ timeout=_DEFAULT_TIMEOUT,
**kwargs
):
"""Implementation of Requests' request.
diff --git a/tests/transport/test_requests.py b/tests/transport/test_requests.py
index 8f73d4b..f0321c8 100644
--- a/tests/transport/test_requests.py
+++ b/tests/transport/test_requests.py
@@ -177,6 +177,21 @@
assert authed_session._auth_request == auth_request
+ def test_request_default_timeout(self):
+ credentials = mock.Mock(wraps=CredentialsStub())
+ response = make_response()
+ adapter = AdapterStub([response])
+
+ authed_session = google.auth.transport.requests.AuthorizedSession(credentials)
+ authed_session.mount(self.TEST_URL, adapter)
+
+ patcher = mock.patch("google.auth.transport.requests.requests.Session.request")
+ with patcher as patched_request:
+ authed_session.request("GET", self.TEST_URL)
+
+ expected_timeout = google.auth.transport.requests._DEFAULT_TIMEOUT
+ assert patched_request.call_args.kwargs.get("timeout") == expected_timeout
+
def test_request_no_refresh(self):
credentials = mock.Mock(wraps=CredentialsStub())
response = make_response()