Using `six.raise_from` wherever possible.
diff --git a/google/auth/_default.py b/google/auth/_default.py
index 7dac642..06f52bb 100644
--- a/google/auth/_default.py
+++ b/google/auth/_default.py
@@ -22,6 +22,8 @@
import logging
import os
+import six
+
from google.auth import environment_vars
from google.auth import exceptions
import google.auth.transport._http_client
@@ -67,9 +69,10 @@
with io.open(filename, 'r') as file_obj:
try:
info = json.load(file_obj)
- except ValueError as exc:
- raise exceptions.DefaultCredentialsError(
- 'File {} is not a valid json file.'.format(filename), exc)
+ except ValueError as caught_exc:
+ new_exc = exceptions.DefaultCredentialsError(
+ 'File {} is not a valid json file.'.format(filename))
+ six.raise_from(new_exc, caught_exc)
# The type key should indicate that the file is either a service account
# credentials file or an authorized user credentials file.
@@ -80,10 +83,11 @@
try:
credentials = _cloud_sdk.load_authorized_user_credentials(info)
- except ValueError as exc:
- raise exceptions.DefaultCredentialsError(
+ except ValueError as caught_exc:
+ new_exc = exceptions.DefaultCredentialsError(
'Failed to load authorized user credentials from {}'.format(
- filename), exc)
+ filename))
+ six.raise_from(new_exc, caught_exc)
# Authorized user credentials do not contain the project ID.
return credentials, None
@@ -93,10 +97,11 @@
try:
credentials = (
service_account.Credentials.from_service_account_info(info))
- except ValueError as exc:
- raise exceptions.DefaultCredentialsError(
+ except ValueError as caught_exc:
+ new_exc = exceptions.DefaultCredentialsError(
'Failed to load service account credentials from {}'.format(
- filename), exc)
+ filename))
+ six.raise_from(new_exc, caught_exc)
return credentials, info.get('project_id')
else:
diff --git a/google/auth/_oauth2client.py b/google/auth/_oauth2client.py
index 312326e..e298fb1 100644
--- a/google/auth/_oauth2client.py
+++ b/google/auth/_oauth2client.py
@@ -26,12 +26,14 @@
import google.oauth2.credentials
import google.oauth2.service_account
+import six
try:
import oauth2client.client
import oauth2client.contrib.gce
import oauth2client.service_account
-except ImportError:
- raise ImportError('oauth2client is not installed.')
+except ImportError as caught_exc:
+ new_exc = ImportError('oauth2client is not installed.')
+ six.raise_from(new_exc, caught_exc)
try:
import oauth2client.contrib.appengine
@@ -162,5 +164,6 @@
try:
return _CLASS_CONVERSION_MAP[credentials_class](credentials)
- except KeyError:
- raise ValueError(_CONVERT_ERROR_TMPL.format(credentials_class))
+ except KeyError as caught_exc:
+ new_exc = ValueError(_CONVERT_ERROR_TMPL.format(credentials_class))
+ six.raise_from(new_exc, caught_exc)
diff --git a/google/auth/compute_engine/_metadata.py b/google/auth/compute_engine/_metadata.py
index 9a22d7a..c47be3f 100644
--- a/google/auth/compute_engine/_metadata.py
+++ b/google/auth/compute_engine/_metadata.py
@@ -22,6 +22,7 @@
import logging
import os
+import six
from six.moves import http_client
from six.moves.urllib import parse as urlparse
@@ -118,10 +119,11 @@
if response.headers['content-type'] == 'application/json':
try:
return json.loads(content)
- except ValueError:
- raise exceptions.TransportError(
+ except ValueError as caught_exc:
+ new_exc = exceptions.TransportError(
'Received invalid JSON from the Google Compute Engine'
'metadata service: {:.20}'.format(content))
+ six.raise_from(new_exc, caught_exc)
else:
return content
else:
diff --git a/google/auth/compute_engine/credentials.py b/google/auth/compute_engine/credentials.py
index b8fe6f5..cbc7cf4 100644
--- a/google/auth/compute_engine/credentials.py
+++ b/google/auth/compute_engine/credentials.py
@@ -19,6 +19,8 @@
"""
+import six
+
from google.auth import credentials
from google.auth import exceptions
from google.auth.compute_engine import _metadata
@@ -89,8 +91,9 @@
self.token, self.expiry = _metadata.get_service_account_token(
request,
service_account=self._service_account_email)
- except exceptions.TransportError as exc:
- raise exceptions.RefreshError(exc)
+ except exceptions.TransportError as caught_exc:
+ new_exc = exceptions.RefreshError()
+ six.raise_from(new_exc, caught_exc)
@property
def service_account_email(self):
diff --git a/google/auth/jwt.py b/google/auth/jwt.py
index b1eb5fb..0253376 100644
--- a/google/auth/jwt.py
+++ b/google/auth/jwt.py
@@ -47,6 +47,7 @@
import json
import cachetools
+import six
from six.moves import urllib
from google.auth import _helpers
@@ -101,8 +102,9 @@
section_bytes = _helpers.padded_urlsafe_b64decode(encoded_section)
try:
return json.loads(section_bytes.decode('utf-8'))
- except ValueError:
- raise ValueError('Can\'t parse segment: {0}'.format(section_bytes))
+ except ValueError as caught_exc:
+ new_exc = ValueError('Can\'t parse segment: {0}'.format(section_bytes))
+ six.raise_from(new_exc, caught_exc)
def _unverified_decode(token):
diff --git a/google/auth/transport/_http_client.py b/google/auth/transport/_http_client.py
index 4a10096..35b1005 100644
--- a/google/auth/transport/_http_client.py
+++ b/google/auth/transport/_http_client.py
@@ -17,6 +17,7 @@
import logging
import socket
+import six
from six.moves import http_client
from six.moves import urllib
@@ -104,8 +105,9 @@
response = connection.getresponse()
return Response(response)
- except (http_client.HTTPException, socket.error) as exc:
- raise exceptions.TransportError(exc)
+ except (http_client.HTTPException, socket.error) as caught_exc:
+ new_exc = exceptions.TransportError()
+ six.raise_from(new_exc, caught_exc)
finally:
connection.close()
diff --git a/google/auth/transport/grpc.py b/google/auth/transport/grpc.py
index 8554ffa..08b2f57 100644
--- a/google/auth/transport/grpc.py
+++ b/google/auth/transport/grpc.py
@@ -16,13 +16,14 @@
from __future__ import absolute_import
+import six
try:
import grpc
-except ImportError: # pragma: NO COVER
- raise ImportError(
+except ImportError as caught_exc: # pragma: NO COVER
+ new_exc = ImportError(
'gRPC is not installed, please install the grpcio package to use the '
'gRPC transport.')
-import six
+ six.raise_from(new_exc, caught_exc)
class AuthMetadataPlugin(grpc.AuthMetadataPlugin):
diff --git a/google/auth/transport/requests.py b/google/auth/transport/requests.py
index 6fc395e..31ce22d 100644
--- a/google/auth/transport/requests.py
+++ b/google/auth/transport/requests.py
@@ -18,12 +18,14 @@
import logging
+import six
try:
import requests
-except ImportError: # pragma: NO COVER
- raise ImportError(
+except ImportError as caught_exc: # pragma: NO COVER
+ new_exc = ImportError(
'The requests library is not installed, please install the requests '
'package to use the requests transport.')
+ six.raise_from(new_exc, caught_exc)
import requests.exceptions
from google.auth import exceptions
@@ -111,8 +113,9 @@
method, url, data=body, headers=headers, timeout=timeout,
**kwargs)
return _Response(response)
- except requests.exceptions.RequestException as exc:
- raise exceptions.TransportError(exc)
+ except requests.exceptions.RequestException as caught_exc:
+ new_exc = exceptions.TransportError()
+ six.raise_from(new_exc, caught_exc)
class AuthorizedSession(requests.Session):
diff --git a/google/auth/transport/urllib3.py b/google/auth/transport/urllib3.py
index 0dfe913..872bf9f 100644
--- a/google/auth/transport/urllib3.py
+++ b/google/auth/transport/urllib3.py
@@ -30,12 +30,14 @@
except ImportError: # pragma: NO COVER
certifi = None
+import six
try:
import urllib3
-except ImportError: # pragma: NO COVER
- raise ImportError(
+except ImportError as caught_exc: # pragma: NO COVER
+ new_exc = ImportError(
'The urllib3 library is not installed, please install the urllib3 '
'package to use the urllib3 transport.')
+ six.raise_from(new_exc, caught_exc)
import urllib3.exceptions
from google.auth import exceptions
@@ -126,8 +128,9 @@
response = self.http.request(
method, url, body=body, headers=headers, **kwargs)
return _Response(response)
- except urllib3.exceptions.HTTPError as exc:
- raise exceptions.TransportError(exc)
+ except urllib3.exceptions.HTTPError as caught_exc:
+ new_exc = exceptions.TransportError()
+ six.raise_from(new_exc, caught_exc)
def _make_default_http():
diff --git a/google/oauth2/_client.py b/google/oauth2/_client.py
index 468cb7e..66251df 100644
--- a/google/oauth2/_client.py
+++ b/google/oauth2/_client.py
@@ -26,6 +26,7 @@
import datetime
import json
+import six
from six.moves import http_client
from six.moves import urllib
@@ -144,9 +145,10 @@
try:
access_token = response_data['access_token']
- except KeyError:
- raise exceptions.RefreshError(
+ except KeyError as caught_exc:
+ new_exc = exceptions.RefreshError(
'No access token in response.', response_data)
+ six.raise_from(new_exc, caught_exc)
expiry = _parse_expiry(response_data)
@@ -190,9 +192,10 @@
try:
access_token = response_data['access_token']
- except KeyError:
- raise exceptions.RefreshError(
+ except KeyError as caught_exc:
+ new_exc = exceptions.RefreshError(
'No access token in response.', response_data)
+ six.raise_from(new_exc, caught_exc)
refresh_token = response_data.get('refresh_token', refresh_token)
expiry = _parse_expiry(response_data)
diff --git a/tests/compute_engine/test_credentials.py b/tests/compute_engine/test_credentials.py
index ae2597d..ee343fe 100644
--- a/tests/compute_engine/test_credentials.py
+++ b/tests/compute_engine/test_credentials.py
@@ -78,8 +78,6 @@
with pytest.raises(exceptions.RefreshError) as excinfo:
self.credentials.refresh(None)
- assert excinfo.match(r'http error')
-
@mock.patch('google.auth.compute_engine._metadata.get', autospec=True)
def test_before_request_refreshes(self, get):
get.side_effect = [{
diff --git a/tests/test__default.py b/tests/test__default.py
index 2df8a44..090cea6 100644
--- a/tests/test__default.py
+++ b/tests/test__default.py
@@ -85,7 +85,6 @@
_default._load_credentials_from_file(str(filename))
assert excinfo.match(r'Failed to load authorized user')
- assert excinfo.match(r'missing fields')
def test__load_credentials_from_file_service_account():
@@ -103,7 +102,6 @@
_default._load_credentials_from_file(str(filename))
assert excinfo.match(r'Failed to load service account')
- assert excinfo.match(r'missing fields')
@mock.patch.dict(os.environ, {}, clear=True)