Skip to content

Commit

Permalink
Merge pull request #40 from rbu/master
Browse files Browse the repository at this point in the history
Enable colander.Function to use ${val} in error messagehttps://github.com//issues/40/close
  • Loading branch information
kiorky committed Mar 1, 2012
2 parents d9f5934 + db8dbf3 commit 783bcb7
Show file tree
Hide file tree
Showing 2 changed files with 26 additions and 2 deletions.
4 changes: 2 additions & 2 deletions colander/__init__.py
Expand Up @@ -225,9 +225,9 @@ def __init__(self, function, message=_('Invalid value')):
def __call__(self, node, value):
result = self.function(value)
if not result:
raise Invalid(node, self.message)
raise Invalid(node, translationstring.TranslationString(self.message, mapping={'val':value}))
if isinstance(result, string_types):
raise Invalid(node, result)
raise Invalid(node, translationstring.TranslationString(result, mapping={'val':value}))

class Regex(object):
""" Regular expression validator.
Expand Down
24 changes: 24 additions & 0 deletions colander/tests/test_colander.py
Expand Up @@ -243,6 +243,30 @@ def test_fail_function_returns_string(self):
e = invalid_exc(validator, None, None)
self.assertEqual(e.msg, 'fail')

def test_error_message_adds_mapping_to_configured_message(self):
validator = self._makeOne(lambda x: False, message='fail ${val}')
e = invalid_exc(validator, None, None)
self.assertEqual(e.msg.interpolate(), 'fail None')

def test_error_message_adds_mapping_to_return_message(self):
validator = self._makeOne(lambda x: 'fail ${val}')
e = invalid_exc(validator, None, None)
self.assertEqual(e.msg.interpolate(), 'fail None')

def test_error_message_does_not_overwrite_configured_domain(self):
import translationstring
_ = translationstring.TranslationStringFactory('fnord')
validator = self._makeOne(lambda x: False, message=_('fail ${val}'))
e = invalid_exc(validator, None, None)
self.assertEqual(e.msg.domain, 'fnord')

def test_error_message_does_not_overwrite_returned_domain(self):
import translationstring
_ = translationstring.TranslationStringFactory('fnord')
validator = self._makeOne(lambda x: _('fail ${val}'))
e = invalid_exc(validator, None, None)
self.assertEqual(e.msg.domain, 'fnord')

def test_propagation(self):
validator = self._makeOne(lambda x: 'a' in x, 'msg')
self.assertRaises(TypeError, validator, None, None)
Expand Down

0 comments on commit 783bcb7

Please sign in to comment.