From a6102fe0b9cc177c8164ea0fb39286a4b27c6c79 Mon Sep 17 00:00:00 2001 From: Jay Pipes Date: Wed, 17 Oct 2012 14:52:48 -0400 Subject: [PATCH] Ensure JSON isn't read on no HTTP response body This patch moves the json.loads(body) call in the HTTP response handling to after the check for non- 200-300 return codes. This gets rid of the ValueError exception raise when you hit, for instance, a 400 or 404. Also changes a number of logger.exception() calls to logger.debug() calls, since some exceptions are expected and should not be logged as exceptions per-se. fixes LP bug#1067512 Change-Id: If66fb1846ddc19da5bc2f15c6e0dd09019a56932 --- keystoneclient/client.py | 14 +++++++------- keystoneclient/v2_0/client.py | 2 +- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/keystoneclient/client.py b/keystoneclient/client.py index 11e64085b..d862136bd 100644 --- a/keystoneclient/client.py +++ b/keystoneclient/client.py @@ -127,6 +127,13 @@ class HTTPClient(httplib2.Http): **request_kwargs) self.http_log_resp(resp, body) + if resp.status in (400, 401, 403, 404, 408, 409, 413, 500, 501): + _logger.debug("Request returned failure status.") + raise exceptions.from_response(resp, body) + elif resp.status in (301, 302, 305): + # Redirected. Reissue the request to the new location. + return self.request(resp['location'], method, **kwargs) + if body: try: body = json.loads(body) @@ -136,13 +143,6 @@ class HTTPClient(httplib2.Http): _logger.debug("No body was returned.") body = None - if resp.status in (400, 401, 403, 404, 408, 409, 413, 500, 501): - _logger.exception("Request returned failure status.") - raise exceptions.from_response(resp, body) - elif resp.status in (301, 302, 305): - # Redirected. Reissue the request to the new location. - return self.request(resp['location'], method, **kwargs) - return resp, body def _cs_request(self, url, method, **kwargs): diff --git a/keystoneclient/v2_0/client.py b/keystoneclient/v2_0/client.py index 130887235..fef1178ed 100644 --- a/keystoneclient/v2_0/client.py +++ b/keystoneclient/v2_0/client.py @@ -106,9 +106,9 @@ class Client(client.HTTPClient): self._extract_service_catalog(self.auth_url, raw_token) return True except (exceptions.AuthorizationFailure, exceptions.Unauthorized): + _logger.debug("Authorization Failed.") raise except Exception, e: - _logger.exception("Authorization Failed.") raise exceptions.AuthorizationFailure("Authorization Failed: " "%s" % e)