Cleaned up ValidationError Refs #459
This commit is contained in:
parent
ab15c4eec9
commit
0240a09056
3
AUTHORS
3
AUTHORS
@ -101,4 +101,5 @@ that much better:
|
|||||||
* Nils Hasenbanck
|
* Nils Hasenbanck
|
||||||
* mostlystatic
|
* mostlystatic
|
||||||
* Greg Banks
|
* Greg Banks
|
||||||
* swashbuckler
|
* swashbuckler
|
||||||
|
* Adam Reeve
|
@ -53,9 +53,9 @@ class ValidationError(AssertionError):
|
|||||||
message = super(ValidationError, self).__getattribute__(name)
|
message = super(ValidationError, self).__getattribute__(name)
|
||||||
if name == 'message':
|
if name == 'message':
|
||||||
if self.field_name:
|
if self.field_name:
|
||||||
message += ' ("%s")' % self.field_name
|
message = '%s ("%s")' % (message, self.field_name)
|
||||||
if self.errors:
|
if self.errors:
|
||||||
message += ':\n' + self._format_errors()
|
message = '%s:\n%s' % (message, self._format_errors())
|
||||||
return message
|
return message
|
||||||
|
|
||||||
def _get_message(self):
|
def _get_message(self):
|
||||||
@ -94,12 +94,13 @@ class ValidationError(AssertionError):
|
|||||||
"""Returns a string listing all errors within a document"""
|
"""Returns a string listing all errors within a document"""
|
||||||
|
|
||||||
def format_error(field, value, prefix=''):
|
def format_error(field, value, prefix=''):
|
||||||
|
prefix = "%s.%s" % (prefix, field) if prefix else "%s" % field
|
||||||
if isinstance(value, dict):
|
if isinstance(value, dict):
|
||||||
new_prefix = (prefix + '.' if prefix else '') + str(field)
|
|
||||||
return '\n'.join(
|
return '\n'.join(
|
||||||
[format_error(k, value[k], new_prefix) for k in value])
|
[format_error(k, value[k], prefix) for k in value])
|
||||||
else:
|
else:
|
||||||
return (prefix + ": " if prefix else '') + str(value)
|
return "%s: %s" % (prefix, value)
|
||||||
|
|
||||||
return '\n'.join(
|
return '\n'.join(
|
||||||
[format_error(k, v) for k, v in self.to_dict().items()])
|
[format_error(k, v) for k, v in self.to_dict().items()])
|
||||||
|
@ -2861,5 +2861,62 @@ class DocumentTest(unittest.TestCase):
|
|||||||
}
|
}
|
||||||
) ]), "1,2")
|
) ]), "1,2")
|
||||||
|
|
||||||
|
|
||||||
|
class ValidatorErrorTest(unittest.TestCase):
|
||||||
|
|
||||||
|
def test_to_dict(self):
|
||||||
|
"""Ensure a ValidationError handles error to_dict correctly.
|
||||||
|
"""
|
||||||
|
error = ValidationError('root')
|
||||||
|
self.assertEquals(error.to_dict(), {})
|
||||||
|
|
||||||
|
# 1st level error schema
|
||||||
|
error.errors = {'1st': ValidationError('bad 1st'), }
|
||||||
|
self.assertTrue('1st' in error.to_dict())
|
||||||
|
self.assertEquals(error.to_dict()['1st'], 'bad 1st')
|
||||||
|
|
||||||
|
# 2nd level error schema
|
||||||
|
error.errors = {'1st': ValidationError('bad 1st', errors={
|
||||||
|
'2nd': ValidationError('bad 2nd'),
|
||||||
|
})}
|
||||||
|
self.assertTrue('1st' in error.to_dict())
|
||||||
|
self.assertTrue(isinstance(error.to_dict()['1st'], dict))
|
||||||
|
self.assertTrue('2nd' in error.to_dict()['1st'])
|
||||||
|
self.assertEquals(error.to_dict()['1st']['2nd'], 'bad 2nd')
|
||||||
|
|
||||||
|
# moar levels
|
||||||
|
error.errors = {'1st': ValidationError('bad 1st', errors={
|
||||||
|
'2nd': ValidationError('bad 2nd', errors={
|
||||||
|
'3rd': ValidationError('bad 3rd', errors={
|
||||||
|
'4th': ValidationError('Inception'),
|
||||||
|
}),
|
||||||
|
}),
|
||||||
|
})}
|
||||||
|
self.assertTrue('1st' in error.to_dict())
|
||||||
|
self.assertTrue('2nd' in error.to_dict()['1st'])
|
||||||
|
self.assertTrue('3rd' in error.to_dict()['1st']['2nd'])
|
||||||
|
self.assertTrue('4th' in error.to_dict()['1st']['2nd']['3rd'])
|
||||||
|
self.assertEquals(error.to_dict()['1st']['2nd']['3rd']['4th'],
|
||||||
|
'Inception')
|
||||||
|
|
||||||
|
self.assertEquals(error.message, "root:\n1st.2nd.3rd.4th: Inception")
|
||||||
|
|
||||||
|
def test_model_validation(self):
|
||||||
|
|
||||||
|
class User(Document):
|
||||||
|
username = StringField(primary_key=True)
|
||||||
|
name = StringField(required=True)
|
||||||
|
|
||||||
|
try:
|
||||||
|
User().validate()
|
||||||
|
except ValidationError, e:
|
||||||
|
expected_error_message = """Errors encountered validating document:
|
||||||
|
username: Field is required ("username")
|
||||||
|
name: Field is required ("name")"""
|
||||||
|
self.assertEquals(e.message, expected_error_message)
|
||||||
|
self.assertEquals(e.to_dict(), {
|
||||||
|
'username': 'Field is required ("username")',
|
||||||
|
'name': u'Field is required ("name")'})
|
||||||
|
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
unittest.main()
|
unittest.main()
|
||||||
|
@ -1902,43 +1902,5 @@ class FieldTest(unittest.TestCase):
|
|||||||
post.validate()
|
post.validate()
|
||||||
|
|
||||||
|
|
||||||
class ValidatorErrorTest(unittest.TestCase):
|
|
||||||
|
|
||||||
def test_to_dict(self):
|
|
||||||
"""Ensure a ValidationError handles error to_dict correctly.
|
|
||||||
"""
|
|
||||||
error = ValidationError('root')
|
|
||||||
self.assertEquals(error.to_dict(), {})
|
|
||||||
|
|
||||||
# 1st level error schema
|
|
||||||
error.errors = {'1st': ValidationError('bad 1st'), }
|
|
||||||
self.assertTrue('1st' in error.to_dict())
|
|
||||||
self.assertEquals(error.to_dict()['1st'], 'bad 1st')
|
|
||||||
|
|
||||||
# 2nd level error schema
|
|
||||||
error.errors = {'1st': ValidationError('bad 1st', errors={
|
|
||||||
'2nd': ValidationError('bad 2nd'),
|
|
||||||
})}
|
|
||||||
self.assertTrue('1st' in error.to_dict())
|
|
||||||
self.assertTrue(isinstance(error.to_dict()['1st'], dict))
|
|
||||||
self.assertTrue('2nd' in error.to_dict()['1st'])
|
|
||||||
self.assertEquals(error.to_dict()['1st']['2nd'], 'bad 2nd')
|
|
||||||
|
|
||||||
# moar levels
|
|
||||||
error.errors = {'1st': ValidationError('bad 1st', errors={
|
|
||||||
'2nd': ValidationError('bad 2nd', errors={
|
|
||||||
'3rd': ValidationError('bad 3rd', errors={
|
|
||||||
'4th': ValidationError('Inception'),
|
|
||||||
}),
|
|
||||||
}),
|
|
||||||
})}
|
|
||||||
self.assertTrue('1st' in error.to_dict())
|
|
||||||
self.assertTrue('2nd' in error.to_dict()['1st'])
|
|
||||||
self.assertTrue('3rd' in error.to_dict()['1st']['2nd'])
|
|
||||||
self.assertTrue('4th' in error.to_dict()['1st']['2nd']['3rd'])
|
|
||||||
self.assertEquals(error.to_dict()['1st']['2nd']['3rd']['4th'],
|
|
||||||
'Inception')
|
|
||||||
|
|
||||||
|
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
unittest.main()
|
unittest.main()
|
||||||
|
Loading…
x
Reference in New Issue
Block a user