Merge "Allow fault code customization"

This commit is contained in:
Zuul 2020-01-02 10:46:44 +00:00 committed by Gerrit Code Review
commit b261be6e73
3 changed files with 24 additions and 3 deletions

View File

@ -217,7 +217,8 @@ def format_exception(excinfo, debug=False):
if code and utils.is_valid_code(code) and utils.is_client_error(code):
faultstring = (error.faultstring if hasattr(error, 'faultstring')
else six.text_type(error))
r = dict(faultcode="Client",
faultcode = getattr(error, 'faultcode', 'Client')
r = dict(faultcode=faultcode,
faultstring=faultstring)
log.debug("Client-side error: %s" % r['faultstring'])
r['debuginfo'] = None
@ -229,7 +230,8 @@ def format_exception(excinfo, debug=False):
log.error('Server-side error: "%s". Detail: \n%s' % (
faultstring, debuginfo))
r = dict(faultcode="Server", faultstring=faultstring)
faultcode = getattr(error, 'faultcode', 'Server')
r = dict(faultcode=faultcode, faultstring=faultstring)
if debug:
r['debuginfo'] = debuginfo
else:

View File

@ -4,9 +4,10 @@ from wsme.utils import _
class ClientSideError(RuntimeError):
def __init__(self, msg=None, status_code=400):
def __init__(self, msg=None, status_code=400, faultcode='Client'):
self.msg = msg
self.code = status_code
self.faultcode = faultcode
super(ClientSideError, self).__init__(self.faultstring)
@property

View File

@ -396,6 +396,15 @@ class TestFormatException(unittest.TestCase):
self.assertEqual('Client', ret['faultcode'])
self.assertEqual(faultstring, ret['faultstring'])
def test_format_client_exception_with_faultcode(self):
faultcode = 'AccessDenied'
faultstring = 'boom'
ret = self._test_format_exception(
exc.ClientSideError(faultstring, faultcode=faultcode))
self.assertIsNone(ret['debuginfo'])
self.assertEqual('AccessDenied', ret['faultcode'])
self.assertEqual(faultstring, ret['faultstring'])
def test_format_server_exception(self):
faultstring = 'boom'
ret = self._test_format_exception(Exception(faultstring))
@ -410,6 +419,15 @@ class TestFormatException(unittest.TestCase):
self.assertEqual('Server', ret['faultcode'])
self.assertEqual(faultstring, ret['faultstring'])
def test_format_server_exception_with_faultcode(self):
faultstring = 'boom'
exception = Exception(faultstring)
exception.faultcode = 'ServerError'
ret = self._test_format_exception(exception)
self.assertIsNone(ret['debuginfo'])
self.assertEqual('ServerError', ret['faultcode'])
self.assertEqual(faultstring, ret['faultstring'])
def test_format_server_exception_debug(self):
faultstring = 'boom'
ret = self._test_format_exception(Exception(faultstring), debug=True)