Improve ClientSideError interface + raise wsme.exc coverage to 100%
This commit is contained in:
parent
fe12f239e5
commit
e734bbf2a0
@ -260,14 +260,15 @@ class WSRoot(object):
|
||||
|
||||
def _format_exception(self, excinfo):
|
||||
"""Extract informations that can be sent to the client."""
|
||||
if isinstance(excinfo[1], exc.ClientSideError):
|
||||
error = excinfo[1]
|
||||
if isinstance(error, exc.ClientSideError):
|
||||
r = dict(faultcode="Client",
|
||||
faultstring=unicode(excinfo[1]))
|
||||
faultstring=error.faultstring)
|
||||
log.warning("Client-side error: %s" % r['faultstring'])
|
||||
r['debuginfo'] = None
|
||||
return r
|
||||
else:
|
||||
faultstring = str(excinfo[1])
|
||||
faultstring = str(error)
|
||||
debuginfo = "\n".join(traceback.format_exception(*excinfo))
|
||||
|
||||
log.error('Server-side error: "%s". Detail: \n%s' % (
|
||||
|
20
wsme/exc.py
20
wsme/exc.py
@ -5,11 +5,9 @@ if '_' not in __builtin__.__dict__:
|
||||
|
||||
|
||||
class ClientSideError(RuntimeError):
|
||||
def __unicode__(self):
|
||||
return RuntimeError.__str__(self)
|
||||
|
||||
def __str__(self):
|
||||
return unicode(self).encode('utf8', 'ignore')
|
||||
@property
|
||||
def faultstring(self):
|
||||
return str(self)
|
||||
|
||||
|
||||
class InvalidInput(ClientSideError):
|
||||
@ -18,7 +16,8 @@ class InvalidInput(ClientSideError):
|
||||
self.value = value
|
||||
self.msg = msg
|
||||
|
||||
def __unicode__(self):
|
||||
@property
|
||||
def faultstring(self):
|
||||
return _(u"Invalid input for field/attribute %s. Value: '%s'. %s") % (
|
||||
self.fieldname, self.value, self.msg)
|
||||
|
||||
@ -28,7 +27,8 @@ class MissingArgument(ClientSideError):
|
||||
self.argname = argname
|
||||
self.msg = msg
|
||||
|
||||
def __unicode__(self):
|
||||
@property
|
||||
def faultstring(self):
|
||||
return _(u'Missing argument: "%s"%s') % (
|
||||
self.argname, self.msg and ": " + self.msg or "")
|
||||
|
||||
@ -38,7 +38,8 @@ class UnknownArgument(ClientSideError):
|
||||
self.argname = argname
|
||||
self.msg = msg
|
||||
|
||||
def __unicode__(self):
|
||||
@property
|
||||
def faultstring(self):
|
||||
return _(u'Unknown argument: "%s"%s') % (
|
||||
self.argname, self.msg and ": " + self.msg or "")
|
||||
|
||||
@ -47,5 +48,6 @@ class UnknownFunction(ClientSideError):
|
||||
def __init__(self, name):
|
||||
self.name = name
|
||||
|
||||
def __unicode__(self):
|
||||
@property
|
||||
def faultstring(self):
|
||||
return _(u"Unknown function name: %s") % (self.name)
|
||||
|
32
wsme/tests/test_exc.py
Normal file
32
wsme/tests/test_exc.py
Normal file
@ -0,0 +1,32 @@
|
||||
# encoding=utf8
|
||||
|
||||
from wsme.exc import *
|
||||
|
||||
|
||||
def test_clientside_error():
|
||||
e = ClientSideError("Test")
|
||||
|
||||
assert e.faultstring == "Test"
|
||||
|
||||
|
||||
def test_invalidinput():
|
||||
e = InvalidInput('field', 'badvalue', "error message")
|
||||
|
||||
assert e.faultstring == \
|
||||
u"Invalid input for field/attribute field. Value: 'badvalue'. " \
|
||||
"error message", e.faultstring
|
||||
|
||||
|
||||
def test_missingargument():
|
||||
e = MissingArgument('argname', "error message")
|
||||
|
||||
assert e.faultstring == \
|
||||
u'Missing argument: "argname": error message', e.faultstring
|
||||
|
||||
|
||||
def test_unknownargument():
|
||||
e = UnknownArgument('argname', "error message")
|
||||
|
||||
assert e.faultstring == \
|
||||
u'Unknown argument: "argname": error message', e.faultstring
|
||||
|
Loading…
x
Reference in New Issue
Block a user