| @@ -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() | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user