parent
d83e67c121
commit
1b17fb0ae7
@ -4,6 +4,7 @@ Changelog
|
|||||||
|
|
||||||
Changes in 0.6.15
|
Changes in 0.6.15
|
||||||
=================
|
=================
|
||||||
|
- Updated validation error message
|
||||||
- Added support for null / zero / false values in item_frequencies
|
- Added support for null / zero / false values in item_frequencies
|
||||||
- Fixed cascade save edge case
|
- Fixed cascade save edge case
|
||||||
- Fixed geo index creation through reference fields
|
- Fixed geo index creation through reference fields
|
||||||
|
@ -1,4 +1,5 @@
|
|||||||
import warnings
|
import warnings
|
||||||
|
from collections import defaultdict
|
||||||
|
|
||||||
from queryset import QuerySet, QuerySetManager
|
from queryset import QuerySet, QuerySetManager
|
||||||
from queryset import DoesNotExist, MultipleObjectsReturned
|
from queryset import DoesNotExist, MultipleObjectsReturned
|
||||||
@ -53,9 +54,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 ("%s")' % (message, self.field_name)
|
message = '%s' % message
|
||||||
if self.errors:
|
if self.errors:
|
||||||
message = '%s:\n%s' % (message, self._format_errors())
|
message = '%s(%s)' % (message, self._format_errors())
|
||||||
return message
|
return message
|
||||||
|
|
||||||
def _get_message(self):
|
def _get_message(self):
|
||||||
@ -93,17 +94,20 @@ class ValidationError(AssertionError):
|
|||||||
def _format_errors(self):
|
def _format_errors(self):
|
||||||
"""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 generate_key(value, prefix=''):
|
||||||
prefix = "%s.%s" % (prefix, field) if prefix else "%s" % field
|
if isinstance(value, list):
|
||||||
|
value = ' '.join([generate_key(k) for k in value])
|
||||||
if isinstance(value, dict):
|
if isinstance(value, dict):
|
||||||
|
value = ' '.join(
|
||||||
|
[generate_key(v, k) for k, v in value.iteritems()])
|
||||||
|
|
||||||
return '\n'.join(
|
results = "%s.%s" % (prefix, value) if prefix else value
|
||||||
[format_error(k, value[k], prefix) for k in value])
|
return results
|
||||||
else:
|
|
||||||
return "%s: %s" % (prefix, value)
|
|
||||||
|
|
||||||
return '\n'.join(
|
error_dict = defaultdict(list)
|
||||||
[format_error(k, v) for k, v in self.to_dict().items()])
|
for k, v in self.to_dict().iteritems():
|
||||||
|
error_dict[generate_key(v)].append(k)
|
||||||
|
return ' '.join(["%s: %s" % (k, v) for k, v in error_dict.iteritems()])
|
||||||
|
|
||||||
|
|
||||||
_document_registry = {}
|
_document_registry = {}
|
||||||
@ -899,8 +903,7 @@ class BaseDocument(object):
|
|||||||
errors[field.name] = ValidationError('Field is required',
|
errors[field.name] = ValidationError('Field is required',
|
||||||
field_name=field.name)
|
field_name=field.name)
|
||||||
if errors:
|
if errors:
|
||||||
raise ValidationError('Errors encountered validating document',
|
raise ValidationError('ValidationError', errors=errors)
|
||||||
errors=errors)
|
|
||||||
|
|
||||||
def to_mongo(self):
|
def to_mongo(self):
|
||||||
"""Return data dictionary ready for use with MongoDB.
|
"""Return data dictionary ready for use with MongoDB.
|
||||||
|
@ -3137,7 +3137,7 @@ class ValidatorErrorTest(unittest.TestCase):
|
|||||||
self.assertEquals(error.to_dict()['1st']['2nd']['3rd']['4th'],
|
self.assertEquals(error.to_dict()['1st']['2nd']['3rd']['4th'],
|
||||||
'Inception')
|
'Inception')
|
||||||
|
|
||||||
self.assertEquals(error.message, "root:\n1st.2nd.3rd.4th: Inception")
|
self.assertEquals(error.message, "root(2nd.3rd.4th.Inception: ['1st'])")
|
||||||
|
|
||||||
def test_model_validation(self):
|
def test_model_validation(self):
|
||||||
|
|
||||||
@ -3148,13 +3148,11 @@ class ValidatorErrorTest(unittest.TestCase):
|
|||||||
try:
|
try:
|
||||||
User().validate()
|
User().validate()
|
||||||
except ValidationError, e:
|
except ValidationError, e:
|
||||||
expected_error_message = """Errors encountered validating document:
|
expected_error_message = """ValidationError(Field is required: ['username', 'name'])"""
|
||||||
username: Field is required ("username")
|
|
||||||
name: Field is required ("name")"""
|
|
||||||
self.assertEquals(e.message, expected_error_message)
|
self.assertEquals(e.message, expected_error_message)
|
||||||
self.assertEquals(e.to_dict(), {
|
self.assertEquals(e.to_dict(), {
|
||||||
'username': 'Field is required ("username")',
|
'username': 'Field is required',
|
||||||
'name': u'Field is required ("name")'})
|
'name': 'Field is required'})
|
||||||
|
|
||||||
def test_spaces_in_keys(self):
|
def test_spaces_in_keys(self):
|
||||||
|
|
||||||
|
@ -2122,7 +2122,7 @@ class FieldTest(unittest.TestCase):
|
|||||||
self.assertTrue(1 in error_dict['comments'])
|
self.assertTrue(1 in error_dict['comments'])
|
||||||
self.assertTrue('content' in error_dict['comments'][1])
|
self.assertTrue('content' in error_dict['comments'][1])
|
||||||
self.assertEquals(error_dict['comments'][1]['content'],
|
self.assertEquals(error_dict['comments'][1]['content'],
|
||||||
u'Field is required ("content")')
|
'Field is required')
|
||||||
|
|
||||||
post.comments[1].content = 'here we go'
|
post.comments[1].content = 'here we go'
|
||||||
post.validate()
|
post.validate()
|
||||||
|
Loading…
x
Reference in New Issue
Block a user