Introduce HTTP exception into common

This commit is contained in:
tengqm
2015-01-20 21:42:45 +08:00
parent 3e6be82dad
commit 9b90617e91

View File

@@ -23,5 +23,40 @@ class BaseException(Exception):
class CommandError(BaseException):
'''Invalid usage of CLI.'''
class FileFormatError(BaseException):
'''Illegal file format detected.'''
class HTTPException(BaseException):
"""Base exception for all HTTP-derived exceptions."""
code = 'N/A'
def __init__(self, message=None):
super(HTTPException, self).__init__(message)
try:
self.error = jsonutils.loads(message)
if 'error' not in self.error:
raise KeyError(_('Key "error" not exists'))
except KeyError:
# NOTE(jianingy): If key 'error' happens not exist,
# self.message becomes no sense. In this case, we
# return doc of current exception class instead.
self.error = {'error':
{'message': self.__class__.__doc__}}
except Exception:
self.error = {'error':
{'message': self.message or self.__class__.__doc__}}
def __str__(self):
message = self.error['error'].get('message', 'Internal Error')
if verbose:
traceback = self.error['error'].get('traceback', '')
return (_('ERROR: %(message)s\n%(traceback)s') %
{'message': message, 'traceback': traceback})
else:
return _('ERROR: %s') % message
class HTTPNotFound(HTTPException):
code = 404