diff --git a/gcloud/connection.py b/gcloud/connection.py index d61df0458b26..b63c35660a43 100644 --- a/gcloud/connection.py +++ b/gcloud/connection.py @@ -415,7 +415,8 @@ def api_request(self, method, path, query_params=None, target_object=_target_object) if not 200 <= response.status < 300: - raise make_exception(response, content) + raise make_exception(response, content, + error_info=method + ' ' + url) string_or_bytes = (six.binary_type, six.text_type) if content and expect_json and isinstance(content, string_or_bytes): diff --git a/gcloud/exceptions.py b/gcloud/exceptions.py index 0c04f80a12a0..c2374ca58891 100644 --- a/gcloud/exceptions.py +++ b/gcloud/exceptions.py @@ -157,7 +157,7 @@ class ServiceUnavailable(ServerError): code = 503 -def make_exception(response, content, use_json=True): +def make_exception(response, content, error_info=None, use_json=True): """Factory: create exception based on HTTP response code. :type response: :class:`httplib2.Response` or other HTTP response object @@ -167,6 +167,10 @@ def make_exception(response, content, use_json=True): :type content: string or dictionary :param content: The body of the HTTP error response. + :type error_info: string + :param error_info: Optional string giving extra information about the + failed request. + :type use_json: boolean :param use_json: Flag indicating if ``content`` is expected to be JSON. @@ -187,6 +191,9 @@ def make_exception(response, content, use_json=True): message = payload.get('error', {}).get('message', '') errors = payload.get('error', {}).get('errors', ()) + if error_info is not None: + message += ' (%s)' % (error_info,) + try: klass = _HTTP_CODE_TO_EXCEPTION[response.status] except KeyError: