From a757448b7fa613d38a4de1b2c1a7c4f2410313ad Mon Sep 17 00:00:00 2001 From: JJ Geewax Date: Tue, 23 Jun 2015 08:03:57 -0400 Subject: [PATCH 1/3] Fixes #937 - Adds HTTP method and URL to exceptions. --- gcloud/connection.py | 3 ++- gcloud/exceptions.py | 5 ++++- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/gcloud/connection.py b/gcloud/connection.py index d61df0458b26..5da7e3974d36 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, + request_string=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..18d1047bab72 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, request_string=None, use_json=True): """Factory: create exception based on HTTP response code. :type response: :class:`httplib2.Response` or other HTTP response object @@ -187,6 +187,9 @@ def make_exception(response, content, use_json=True): message = payload.get('error', {}).get('message', '') errors = payload.get('error', {}).get('errors', ()) + if request_string: + message += ' (%s)' % request_string + try: klass = _HTTP_CODE_TO_EXCEPTION[response.status] except KeyError: From 203d0d3a2be39ca63540d39cc5c8bf949d07826a Mon Sep 17 00:00:00 2001 From: Danny Hermes Date: Thu, 2 Jul 2015 09:31:21 -0700 Subject: [PATCH 2/3] Documenting request_string and checking for None. Addressing comments in review and tox failures. --- gcloud/connection.py | 2 +- gcloud/exceptions.py | 8 ++++++-- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/gcloud/connection.py b/gcloud/connection.py index 5da7e3974d36..19cd33694f27 100644 --- a/gcloud/connection.py +++ b/gcloud/connection.py @@ -416,7 +416,7 @@ def api_request(self, method, path, query_params=None, if not 200 <= response.status < 300: raise make_exception(response, content, - request_string=method+' '+url) + request_string=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 18d1047bab72..b96a1c55e029 100644 --- a/gcloud/exceptions.py +++ b/gcloud/exceptions.py @@ -167,6 +167,10 @@ def make_exception(response, content, request_string=None, use_json=True): :type content: string or dictionary :param content: The body of the HTTP error response. + :type request_string: string + :param request_string: 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,8 +191,8 @@ def make_exception(response, content, request_string=None, use_json=True): message = payload.get('error', {}).get('message', '') errors = payload.get('error', {}).get('errors', ()) - if request_string: - message += ' (%s)' % request_string + if request_string is not None: + message += ' (%s)' % (request_string,) try: klass = _HTTP_CODE_TO_EXCEPTION[response.status] From e5b0edf3412c4f09e938e8c2bef783b64447bfd1 Mon Sep 17 00:00:00 2001 From: Danny Hermes Date: Fri, 3 Jul 2015 07:36:37 -0700 Subject: [PATCH 3/3] Renaming request_string as error_info. --- gcloud/connection.py | 2 +- gcloud/exceptions.py | 12 ++++++------ 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/gcloud/connection.py b/gcloud/connection.py index 19cd33694f27..b63c35660a43 100644 --- a/gcloud/connection.py +++ b/gcloud/connection.py @@ -416,7 +416,7 @@ def api_request(self, method, path, query_params=None, if not 200 <= response.status < 300: raise make_exception(response, content, - request_string=method + ' ' + url) + 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 b96a1c55e029..c2374ca58891 100644 --- a/gcloud/exceptions.py +++ b/gcloud/exceptions.py @@ -157,7 +157,7 @@ class ServiceUnavailable(ServerError): code = 503 -def make_exception(response, content, request_string=None, 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,9 +167,9 @@ def make_exception(response, content, request_string=None, use_json=True): :type content: string or dictionary :param content: The body of the HTTP error response. - :type request_string: string - :param request_string: Optional string giving extra information about the - failed request. + :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. @@ -191,8 +191,8 @@ def make_exception(response, content, request_string=None, use_json=True): message = payload.get('error', {}).get('message', '') errors = payload.get('error', {}).get('errors', ()) - if request_string is not None: - message += ' (%s)' % (request_string,) + if error_info is not None: + message += ' (%s)' % (error_info,) try: klass = _HTTP_CODE_TO_EXCEPTION[response.status]