diff --git a/heatclient/common/http.py b/heatclient/common/http.py index bf05e5c8..449deb65 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 d768fbf8..7d32bc10 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):