Add retry loop for fetching authentication token if any 'Internal Failure' occurs (#368) * Add retry loop for fetching authentication token if any 'Internal failure' occurs This is to prevent errors while client tries to connect with server and fails with 'Internal Failure' because it was unable to fetch OAuth2 token. * Add retry loop for fetching authentication token if any 'Internal failure' occurs This is to prevent errors while client tries to connect with server and fails with 'Internal Failure' because it was unable to fetch OAuth2 token.
diff --git a/docs/reference/google.auth.app_engine.rst b/docs/reference/google.auth.app_engine.rst index 4525c08..2142b6f 100644 --- a/docs/reference/google.auth.app_engine.rst +++ b/docs/reference/google.auth.app_engine.rst
@@ -1,7 +1,7 @@ -google.auth.app_engine module -============================= +google.auth.app\_engine module +============================== .. automodule:: google.auth.app_engine - :members: - :inherited-members: - :show-inheritance: + :members: + :inherited-members: + :show-inheritance:
diff --git a/docs/reference/google.auth.compute_engine.credentials.rst b/docs/reference/google.auth.compute_engine.credentials.rst index ebe62c0..782d95f 100644 --- a/docs/reference/google.auth.compute_engine.credentials.rst +++ b/docs/reference/google.auth.compute_engine.credentials.rst
@@ -1,7 +1,7 @@ -google.auth.compute_engine.credentials module -============================================= +google.auth.compute\_engine.credentials module +============================================== .. automodule:: google.auth.compute_engine.credentials - :members: - :inherited-members: - :show-inheritance: + :members: + :inherited-members: + :show-inheritance:
diff --git a/docs/reference/google.auth.compute_engine.rst b/docs/reference/google.auth.compute_engine.rst index 2e7b830..38785c8 100644 --- a/docs/reference/google.auth.compute_engine.rst +++ b/docs/reference/google.auth.compute_engine.rst
@@ -1,10 +1,10 @@ -google.auth.compute_engine package -================================== +google.auth.compute\_engine package +=================================== .. automodule:: google.auth.compute_engine - :members: - :inherited-members: - :show-inheritance: + :members: + :inherited-members: + :show-inheritance: Submodules ---------- @@ -12,4 +12,3 @@ .. toctree:: google.auth.compute_engine.credentials -
diff --git a/docs/reference/google.auth.credentials.rst b/docs/reference/google.auth.credentials.rst index b710a8c..18d1d8c 100644 --- a/docs/reference/google.auth.credentials.rst +++ b/docs/reference/google.auth.credentials.rst
@@ -2,6 +2,6 @@ ============================== .. automodule:: google.auth.credentials - :members: - :inherited-members: - :show-inheritance: + :members: + :inherited-members: + :show-inheritance:
diff --git a/docs/reference/google.auth.crypt.rst b/docs/reference/google.auth.crypt.rst index a3e2b12..0833e7f 100644 --- a/docs/reference/google.auth.crypt.rst +++ b/docs/reference/google.auth.crypt.rst
@@ -2,9 +2,9 @@ ========================= .. automodule:: google.auth.crypt - :members: - :inherited-members: - :show-inheritance: + :members: + :inherited-members: + :show-inheritance: Submodules ---------- @@ -13,4 +13,3 @@ google.auth.crypt.base google.auth.crypt.rsa -
diff --git a/docs/reference/google.auth.environment_vars.rst b/docs/reference/google.auth.environment_vars.rst index fe34849..5996e99 100644 --- a/docs/reference/google.auth.environment_vars.rst +++ b/docs/reference/google.auth.environment_vars.rst
@@ -1,7 +1,7 @@ -google.auth.environment_vars module -=================================== +google.auth.environment\_vars module +==================================== .. automodule:: google.auth.environment_vars - :members: - :inherited-members: - :show-inheritance: + :members: + :inherited-members: + :show-inheritance:
diff --git a/docs/reference/google.auth.exceptions.rst b/docs/reference/google.auth.exceptions.rst index d603eaf..c87a7f2 100644 --- a/docs/reference/google.auth.exceptions.rst +++ b/docs/reference/google.auth.exceptions.rst
@@ -2,6 +2,6 @@ ============================= .. automodule:: google.auth.exceptions - :members: - :inherited-members: - :show-inheritance: + :members: + :inherited-members: + :show-inheritance:
diff --git a/docs/reference/google.auth.iam.rst b/docs/reference/google.auth.iam.rst index 8a5edb4..8472ed7 100644 --- a/docs/reference/google.auth.iam.rst +++ b/docs/reference/google.auth.iam.rst
@@ -2,6 +2,6 @@ ====================== .. automodule:: google.auth.iam - :members: - :inherited-members: - :show-inheritance: + :members: + :inherited-members: + :show-inheritance:
diff --git a/docs/reference/google.auth.impersonated_credentials.rst b/docs/reference/google.auth.impersonated_credentials.rst index 653708e..f139ccf 100644 --- a/docs/reference/google.auth.impersonated_credentials.rst +++ b/docs/reference/google.auth.impersonated_credentials.rst
@@ -2,6 +2,6 @@ ============================================ .. automodule:: google.auth.impersonated_credentials - :members: - :inherited-members: - :show-inheritance: + :members: + :inherited-members: + :show-inheritance:
diff --git a/docs/reference/google.auth.jwt.rst b/docs/reference/google.auth.jwt.rst index c58be5f..c7c2fdf 100644 --- a/docs/reference/google.auth.jwt.rst +++ b/docs/reference/google.auth.jwt.rst
@@ -2,6 +2,6 @@ ====================== .. automodule:: google.auth.jwt - :members: - :inherited-members: - :show-inheritance: + :members: + :inherited-members: + :show-inheritance:
diff --git a/docs/reference/google.auth.rst b/docs/reference/google.auth.rst index 53ab699..f6ea073 100644 --- a/docs/reference/google.auth.rst +++ b/docs/reference/google.auth.rst
@@ -2,18 +2,18 @@ =================== .. automodule:: google.auth - :members: - :inherited-members: - :show-inheritance: + :members: + :inherited-members: + :show-inheritance: Subpackages ----------- .. toctree:: - google.auth.compute_engine - google.auth.crypt - google.auth.transport + google.auth.compute_engine + google.auth.crypt + google.auth.transport Submodules ---------- @@ -27,4 +27,3 @@ google.auth.iam google.auth.impersonated_credentials google.auth.jwt -
diff --git a/docs/reference/google.auth.transport.grpc.rst b/docs/reference/google.auth.transport.grpc.rst index e16d1d8..f9f3442 100644 --- a/docs/reference/google.auth.transport.grpc.rst +++ b/docs/reference/google.auth.transport.grpc.rst
@@ -2,6 +2,6 @@ ================================= .. automodule:: google.auth.transport.grpc - :members: - :inherited-members: - :show-inheritance: + :members: + :inherited-members: + :show-inheritance:
diff --git a/docs/reference/google.auth.transport.requests.rst b/docs/reference/google.auth.transport.requests.rst index f31830c..5f0c23c 100644 --- a/docs/reference/google.auth.transport.requests.rst +++ b/docs/reference/google.auth.transport.requests.rst
@@ -2,6 +2,6 @@ ===================================== .. automodule:: google.auth.transport.requests - :members: - :inherited-members: - :show-inheritance: + :members: + :inherited-members: + :show-inheritance:
diff --git a/docs/reference/google.auth.transport.rst b/docs/reference/google.auth.transport.rst index 1f802c3..48e2e05 100644 --- a/docs/reference/google.auth.transport.rst +++ b/docs/reference/google.auth.transport.rst
@@ -2,9 +2,9 @@ ============================= .. automodule:: google.auth.transport - :members: - :inherited-members: - :show-inheritance: + :members: + :inherited-members: + :show-inheritance: Submodules ---------- @@ -14,4 +14,3 @@ google.auth.transport.grpc google.auth.transport.requests google.auth.transport.urllib3 -
diff --git a/docs/reference/google.auth.transport.urllib3.rst b/docs/reference/google.auth.transport.urllib3.rst index 339c77e..667bb09 100644 --- a/docs/reference/google.auth.transport.urllib3.rst +++ b/docs/reference/google.auth.transport.urllib3.rst
@@ -2,6 +2,6 @@ ==================================== .. automodule:: google.auth.transport.urllib3 - :members: - :inherited-members: - :show-inheritance: + :members: + :inherited-members: + :show-inheritance:
diff --git a/docs/reference/google.oauth2.credentials.rst b/docs/reference/google.oauth2.credentials.rst index ca978d1..d3bdc16 100644 --- a/docs/reference/google.oauth2.credentials.rst +++ b/docs/reference/google.oauth2.credentials.rst
@@ -2,6 +2,6 @@ ================================ .. automodule:: google.oauth2.credentials - :members: - :inherited-members: - :show-inheritance: + :members: + :inherited-members: + :show-inheritance:
diff --git a/docs/reference/google.oauth2.id_token.rst b/docs/reference/google.oauth2.id_token.rst index db38b60..fbe6eab 100644 --- a/docs/reference/google.oauth2.id_token.rst +++ b/docs/reference/google.oauth2.id_token.rst
@@ -1,7 +1,7 @@ -google.oauth2.id_token module -============================= +google.oauth2.id\_token module +============================== .. automodule:: google.oauth2.id_token - :members: - :inherited-members: - :show-inheritance: + :members: + :inherited-members: + :show-inheritance:
diff --git a/docs/reference/google.oauth2.rst b/docs/reference/google.oauth2.rst index adb9403..4f1df07 100644 --- a/docs/reference/google.oauth2.rst +++ b/docs/reference/google.oauth2.rst
@@ -2,9 +2,9 @@ ===================== .. automodule:: google.oauth2 - :members: - :inherited-members: - :show-inheritance: + :members: + :inherited-members: + :show-inheritance: Submodules ---------- @@ -14,4 +14,3 @@ google.oauth2.credentials google.oauth2.id_token google.oauth2.service_account -
diff --git a/docs/reference/google.oauth2.service_account.rst b/docs/reference/google.oauth2.service_account.rst index cc4e438..8d8fcd3 100644 --- a/docs/reference/google.oauth2.service_account.rst +++ b/docs/reference/google.oauth2.service_account.rst
@@ -1,7 +1,7 @@ -google.oauth2.service_account module -==================================== +google.oauth2.service\_account module +===================================== .. automodule:: google.oauth2.service_account - :members: - :inherited-members: - :show-inheritance: + :members: + :inherited-members: + :show-inheritance:
diff --git a/docs/reference/google.rst b/docs/reference/google.rst index fc63d1f..4b1e085 100644 --- a/docs/reference/google.rst +++ b/docs/reference/google.rst
@@ -2,15 +2,14 @@ ============== .. automodule:: google - :members: - :inherited-members: - :show-inheritance: + :members: + :inherited-members: + :show-inheritance: Subpackages ----------- .. toctree:: - google.auth - google.oauth2 - + google.auth + google.oauth2
diff --git a/google/oauth2/_client.py b/google/oauth2/_client.py index 5121a32..eac01b7 100644 --- a/google/oauth2/_client.py +++ b/google/oauth2/_client.py
@@ -102,13 +102,23 @@ 'content-type': _URLENCODED_CONTENT_TYPE, } - response = request( - method='POST', url=token_uri, headers=headers, body=body) + retry = 0 + # retry to fetch token for maximum of two times if any internal failure + # occurs. + while True: + response = request( + method='POST', url=token_uri, headers=headers, body=body) + response_body = response.data.decode('utf-8') - response_body = response.data.decode('utf-8') - - if response.status != http_client.OK: - _handle_error_response(response_body) + if response.status == http_client.OK: + break + else: + error_desc = json.loads( + response_body).get('error_description') or '' + if error_desc == 'internal_failure' and retry < 1: + retry += 1 + continue + _handle_error_response(response_body) response_data = json.loads(response_body)
diff --git a/tests/oauth2/test__client.py b/tests/oauth2/test__client.py index 5a4a567..6fc4c3b 100644 --- a/tests/oauth2/test__client.py +++ b/tests/oauth2/test__client.py
@@ -106,6 +106,18 @@ _client._token_endpoint_request(request, 'http://example.com', {}) +def test__token_endpoint_request_internal_failure_error(): + request = make_request({'error': 'internal_failure', + 'error_description': 'internal_failure'}, + status=http_client.BAD_REQUEST) + + with pytest.raises(exceptions.RefreshError): + _client._token_endpoint_request( + request, 'http://example.com', + {'error': 'internal_failure', + 'error_description': 'internal_failure'}) + + def verify_request_params(request, params): request_body = request.call_args[1]['body'] request_params = urllib.parse.parse_qs(request_body)