diff options
author | Steve Baker <sbaker@redhat.com> | 2012-12-11 13:48:55 +1300 |
---|---|---|
committer | Steve Baker <sbaker@redhat.com> | 2012-12-11 13:48:55 +1300 |
commit | c7130de0a979c8adb32fd52efd41ae05456d9d55 (patch) | |
tree | b3cb26829820204b501ad0ab647181b61085464b | |
parent | e1ce4162e48c9de2e1b4edee2d66467e6c3793e6 (diff) | |
download | python-heatclient-c7130de0a979c8adb32fd52efd41ae05456d9d55.tar.gz |
Display a better error message on HTTP exception
Instead of just getting the HTTP code, the message from the actual
exception is printed to the console
Change-Id: I43265e1e01e3e972e444778b3058637c0e1fd441
-rw-r--r-- | heatclient/common/http.py | 6 | ||||
-rw-r--r-- | heatclient/exc.py | 17 |
2 files changed, 6 insertions, 17 deletions
diff --git a/heatclient/common/http.py b/heatclient/common/http.py index bf05e5c..449deb6 100644 --- a/heatclient/common/http.py +++ b/heatclient/common/http.py @@ -163,9 +163,7 @@ class HTTPClient(object): self.log_http_response(resp) if 400 <= resp.status < 600: - if resp.status != 404: - LOG.warn("Request returned failure status %s" % resp.status) - raise exc.from_response(resp) + raise exc.from_response(resp, body_iter) elif resp.status in (301, 302, 305): # Redirected. Reissue the request to the new location. location = resp.getheader('location', None) @@ -180,7 +178,7 @@ class HTTPClient(object): raise exc.InvalidEndpoint(message=message) return self._http_request(location, method, **kwargs) elif resp.status == 300: - raise exc.from_response(resp) + raise exc.from_response(resp, body_iter) return resp, body_iter diff --git a/heatclient/exc.py b/heatclient/exc.py index d768fbf..7d32bc1 100644 --- a/heatclient/exc.py +++ b/heatclient/exc.py @@ -34,20 +34,10 @@ class CommunicationError(BaseException): """Unable to communicate with server.""" -class ClientException(Exception): - """DEPRECATED""" - - -class HTTPException(ClientException): +class HTTPException(BaseException): """Base exception for all HTTP-derived exceptions""" code = 'N/A' - def __init__(self, details=None): - self.details = details - - def __str__(self): - return "%s (HTTP %s)" % (self.__class__.__name__, self.code) - class HTTPMultipleChoices(HTTPException): code = 300 @@ -147,10 +137,11 @@ for obj_name in dir(sys.modules[__name__]): _code_map[obj.code] = obj -def from_response(response): +def from_response(response, body_iter): """Return an instance of an HTTPException based on httplib response.""" cls = _code_map.get(response.status, HTTPException) - return cls() + body_str = ''.join([chunk for chunk in body_iter]) + return cls(body_str) class NoTokenLookupException(Exception): |