Improve ClientSideError interface + raise wsme.exc coverage to 100%

This commit is contained in:
Christophe de Vienne 2011-10-11 13:49:57 +02:00
parent fe12f239e5
commit e734bbf2a0
3 changed files with 47 additions and 12 deletions

View File

@ -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' % (

View File

@ -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
View 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