optional join separator for error messages on colander.Invalid:asdict
, if not supplied return list of string instead of single string.
This commit is contained in:
@@ -179,13 +179,15 @@ class Invalid(Exception):
|
||||
return str(self.pos)
|
||||
return str(self.node.name)
|
||||
|
||||
def asdict(self, translate=None):
|
||||
def asdict(self, translate=None, separator='; '):
|
||||
""" Return a dictionary containing a basic
|
||||
(non-language-translated) error report for this exception.
|
||||
|
||||
If ``translate`` is supplied, it must be a callable taking a
|
||||
translation string as its sole argument and returning a localized,
|
||||
interpolated string.
|
||||
|
||||
If ``separator`` is supplied, error messages are joined with that.
|
||||
"""
|
||||
paths = self.paths()
|
||||
errors = {}
|
||||
@@ -198,7 +200,12 @@ class Invalid(Exception):
|
||||
keyname and keyparts.append(keyname)
|
||||
if translate:
|
||||
msgs = [translate(msg) for msg in msgs]
|
||||
errors['.'.join(keyparts)] = '; '.join(interpolate(msgs))
|
||||
msgs = interpolate(msgs)
|
||||
if separator:
|
||||
msgs = separator.join(msgs)
|
||||
else:
|
||||
msgs = list(msgs)
|
||||
errors['.'.join(keyparts)] = msgs
|
||||
return errors
|
||||
|
||||
def __str__(self):
|
||||
|
@@ -136,6 +136,14 @@ class TestInvalid(unittest.TestCase):
|
||||
result,
|
||||
{'': ("Number 1 must be lower than number 2; "
|
||||
"They can't be the same, either")})
|
||||
try:
|
||||
schema.deserialize(dict(number1=2, number2=2))
|
||||
except c.Invalid as e:
|
||||
result = e.asdict(separator=None)
|
||||
self.assertEqual(
|
||||
result,
|
||||
{'': ["Number 1 must be lower than number 2",
|
||||
"They can't be the same, either"]})
|
||||
|
||||
def test___str__(self):
|
||||
from colander import Positional
|
||||
|
Reference in New Issue
Block a user