summaryrefslogtreecommitdiff
path: root/ceilometerclient/exc.py
diff options
context:
space:
mode:
authorMehdi Abaakouk <sileht@redhat.com>2016-10-06 16:39:44 +0200
committerMehdi Abaakouk (sileht) <sileht@redhat.com>2016-10-11 09:10:10 +0000
commit9d9b477708fdce08db162a9bf3723cf7ee0df267 (patch)
treea01380657ffc5944fbeb3d3b94d205701df570ad /ceilometerclient/exc.py
parent05cbdbb6f5fb7c9d73e0b0d25f6a7f9dbdea7c92 (diff)
downloadpython-ceilometerclient-stable/newton.tar.gz
Set code and details on HTTPExceptionnewton-eol2.6.2stable/newton
Even the HTTPException is unknown for ceilometer we should set the code and print it with the details. Closes-bug: #1626404 Change-Id: Ib244d8822f7a1ebc1b8ec1b95d13b20bbb69ece0 (cherry picked from commit b8a78396b273c23ba7a633d98365a5dfc969b1f2)
Diffstat (limited to 'ceilometerclient/exc.py')
-rw-r--r--ceilometerclient/exc.py31
1 files changed, 21 insertions, 10 deletions
diff --git a/ceilometerclient/exc.py b/ceilometerclient/exc.py
index 3db1c0c..8d56038 100644
--- a/ceilometerclient/exc.py
+++ b/ceilometerclient/exc.py
@@ -43,15 +43,21 @@ class HTTPException(BaseException):
self.details = details
def __str__(self):
- try:
- data = json.loads(self.details)
- message = data.get("error_message", {}).get("faultstring")
+ message = ""
+ if self.details:
+ message = self.details
+ try:
+ data = json.loads(self.details)
+ message = data.get("error_message", "")
+ if isinstance(message, dict) and "faultstring" in message:
+ message = "ERROR %s" % message["faultstring"]
+ except (ValueError, TypeError, AttributeError):
+ pass
+
if message:
- return "%s (HTTP %s) ERROR %s" % (
- self.__class__.__name__, self.code, message)
- except (ValueError, TypeError, AttributeError):
- pass
- return "%s (HTTP %s)" % (self.__class__.__name__, self.code)
+ message = " %s" % message
+ return "%s (HTTP %s)%s" % (self.__class__.__name__, self.code,
+ message)
class HTTPMultipleChoices(HTTPException):
@@ -129,5 +135,10 @@ def from_response(response, details=None):
# it is something unexpected
raise TypeError("Function 'from_response' expects only response object"
" from httplib or requests libraries.")
- cls = _code_map.get(code, HTTPException)
- return cls(details)
+ cls = _code_map.get(code)
+ if cls is None:
+ exc = HTTPException(details)
+ exc.code = code
+ return exc
+ else:
+ return cls(details)