Merge "Make TransportErrors more descriptive"

This commit is contained in:
Jenkins 2016-03-01 22:40:12 +00:00 committed by Gerrit Code Review
commit b349758f06
2 changed files with 36 additions and 4 deletions

View File

@ -24,12 +24,24 @@ from zaqarclient import errors
__all__ = ['TransportError', 'ResourceNotFound', 'MalformedRequest',
'UnauthorizedError', 'ForbiddenError', 'ServiceUnavailableError',
'InternalServerError']
'InternalServerError', 'ConflictError']
class TransportError(errors.ZaqarError):
"""Base class for all transport errors."""
code = None
def __init__(self, title=None, description=None, text=None):
msg = 'Error response from Zaqar. Code: {0}.'.format(self.code)
if title:
msg += ' Title: {0}.'.format(title)
if description:
msg += ' Description: {0}.'.format(description)
if text:
msg += ' Text: {0}.'.format(text)
super(TransportError, self).__init__(msg)
class ResourceNotFound(TransportError):
"""Indicates that a resource is missing
@ -37,6 +49,8 @@ class ResourceNotFound(TransportError):
This error maps to HTTP's 404
"""
code = 404
class MalformedRequest(TransportError):
"""Indicates that a request is malformed
@ -44,6 +58,8 @@ class MalformedRequest(TransportError):
This error maps to HTTP's 400
"""
code = 400
class UnauthorizedError(TransportError):
"""Indicates that a request was not authenticated
@ -51,6 +67,8 @@ class UnauthorizedError(TransportError):
This error maps to HTTP's 401
"""
code = 401
class ForbiddenError(TransportError):
"""Indicates that a request is forbidden to access the particular resource
@ -58,6 +76,8 @@ class ForbiddenError(TransportError):
This error maps to HTTP's 403
"""
code = 403
class InternalServerError(TransportError):
"""Indicates that the server encountered an unexpected situation
@ -65,6 +85,8 @@ class InternalServerError(TransportError):
This error maps to HTTP's 500
"""
code = 500
class ServiceUnavailableError(TransportError):
"""Indicates that the server was unable to service the request
@ -72,9 +94,13 @@ class ServiceUnavailableError(TransportError):
This error maps to HTTP's 503
"""
code = 503
class ConflictError(TransportError):
"""Indicates that the server was unable to service the request
This error maps to HTTP's 409
"""
code = 409

View File

@ -97,14 +97,20 @@ class HttpTransport(base.Transport):
data=request.content)
if resp.status_code in self.http_to_zaqar:
kwargs = {}
try:
msg = json.loads(resp.text)['description']
error_body = json.loads(resp.text)
kwargs['title'] = error_body['title']
kwargs['description'] = error_body['description']
except Exception:
# TODO(flaper87): Log this exception
# but don't stop raising the corresponding
# exception
msg = ''
raise self.http_to_zaqar[resp.status_code](msg)
# Note(Eva-i): most of the error responses from Zaqar have
# dict with title and description in their bodies. If it's not
# the case, let's just show body text.
kwargs['text'] = resp.text
raise self.http_to_zaqar[resp.status_code](**kwargs)
# NOTE(flaper87): This reads the whole content
# and will consume any attempt of streaming.