highlight places where ValidationError is raised outside of validate() method
This commit is contained in:
		| @@ -614,6 +614,7 @@ class EmbeddedDocumentField(BaseField): | |||||||
|     """ |     """ | ||||||
|  |  | ||||||
|     def __init__(self, document_type, **kwargs): |     def __init__(self, document_type, **kwargs): | ||||||
|  |         # XXX ValidationError raised outside of the "validate" method. | ||||||
|         if not ( |         if not ( | ||||||
|             isinstance(document_type, six.string_types) or |             isinstance(document_type, six.string_types) or | ||||||
|             issubclass(document_type, EmbeddedDocument) |             issubclass(document_type, EmbeddedDocument) | ||||||
| @@ -919,8 +920,11 @@ class DictField(ComplexBaseField): | |||||||
|         self.field = field |         self.field = field | ||||||
|         self._auto_dereference = False |         self._auto_dereference = False | ||||||
|         self.basecls = basecls or BaseField |         self.basecls = basecls or BaseField | ||||||
|  |  | ||||||
|  |         # XXX ValidationError raised outside of the "validate" method. | ||||||
|         if not issubclass(self.basecls, BaseField): |         if not issubclass(self.basecls, BaseField): | ||||||
|             self.error('DictField only accepts dict values') |             self.error('DictField only accepts dict values') | ||||||
|  |  | ||||||
|         kwargs.setdefault('default', lambda: {}) |         kwargs.setdefault('default', lambda: {}) | ||||||
|         super(DictField, self).__init__(*args, **kwargs) |         super(DictField, self).__init__(*args, **kwargs) | ||||||
|  |  | ||||||
| @@ -969,6 +973,7 @@ class MapField(DictField): | |||||||
|     """ |     """ | ||||||
|  |  | ||||||
|     def __init__(self, field=None, *args, **kwargs): |     def __init__(self, field=None, *args, **kwargs): | ||||||
|  |         # XXX ValidationError raised outside of the "validate" method. | ||||||
|         if not isinstance(field, BaseField): |         if not isinstance(field, BaseField): | ||||||
|             self.error('Argument to MapField constructor must be a valid ' |             self.error('Argument to MapField constructor must be a valid ' | ||||||
|                        'field') |                        'field') | ||||||
| @@ -1028,6 +1033,7 @@ class ReferenceField(BaseField): | |||||||
|             A reference to an abstract document type is always stored as a |             A reference to an abstract document type is always stored as a | ||||||
|             :class:`~pymongo.dbref.DBRef`, regardless of the value of `dbref`. |             :class:`~pymongo.dbref.DBRef`, regardless of the value of `dbref`. | ||||||
|         """ |         """ | ||||||
|  |         # XXX ValidationError raised outside of the "validate" method. | ||||||
|         if ( |         if ( | ||||||
|             not isinstance(document_type, six.string_types) and |             not isinstance(document_type, six.string_types) and | ||||||
|             not issubclass(document_type, Document) |             not issubclass(document_type, Document) | ||||||
| @@ -1082,6 +1088,8 @@ class ReferenceField(BaseField): | |||||||
|         if isinstance(document, Document): |         if isinstance(document, Document): | ||||||
|             # We need the id from the saved object to create the DBRef |             # We need the id from the saved object to create the DBRef | ||||||
|             id_ = document.pk |             id_ = document.pk | ||||||
|  |  | ||||||
|  |             # XXX ValidationError raised outside of the "validate" method. | ||||||
|             if id_ is None: |             if id_ is None: | ||||||
|                 self.error('You can only reference documents once they have' |                 self.error('You can only reference documents once they have' | ||||||
|                            ' been saved to the database') |                            ' been saved to the database') | ||||||
| @@ -1121,7 +1129,6 @@ class ReferenceField(BaseField): | |||||||
|         return self.to_mongo(value) |         return self.to_mongo(value) | ||||||
|  |  | ||||||
|     def validate(self, value): |     def validate(self, value): | ||||||
|  |  | ||||||
|         if not isinstance(value, (self.document_type, LazyReference, DBRef, ObjectId)): |         if not isinstance(value, (self.document_type, LazyReference, DBRef, ObjectId)): | ||||||
|             self.error('A ReferenceField only accepts DBRef, LazyReference, ObjectId or documents') |             self.error('A ReferenceField only accepts DBRef, LazyReference, ObjectId or documents') | ||||||
|  |  | ||||||
| @@ -1129,11 +1136,14 @@ class ReferenceField(BaseField): | |||||||
|             self.error('You can only reference documents once they have been ' |             self.error('You can only reference documents once they have been ' | ||||||
|                        'saved to the database') |                        'saved to the database') | ||||||
|  |  | ||||||
|         if self.document_type._meta.get('abstract') and \ |         if ( | ||||||
|                 not isinstance(value, self.document_type): |             self.document_type._meta.get('abstract') and | ||||||
|  |             not isinstance(value, self.document_type) | ||||||
|  |         ): | ||||||
|             self.error( |             self.error( | ||||||
|                 '%s is not an instance of abstract reference type %s' % ( |                 '%s is not an instance of abstract reference type %s' % ( | ||||||
|                     self.document_type._class_name) |                     self.document_type._class_name | ||||||
|  |                 ) | ||||||
|             ) |             ) | ||||||
|  |  | ||||||
|     def lookup_member(self, member_name): |     def lookup_member(self, member_name): | ||||||
| @@ -1156,6 +1166,7 @@ class CachedReferenceField(BaseField): | |||||||
|         if fields is None: |         if fields is None: | ||||||
|             fields = [] |             fields = [] | ||||||
|  |  | ||||||
|  |         # XXX ValidationError raised outside of the "validate" method. | ||||||
|         if ( |         if ( | ||||||
|             not isinstance(document_type, six.string_types) and |             not isinstance(document_type, six.string_types) and | ||||||
|             not issubclass(document_type, Document) |             not issubclass(document_type, Document) | ||||||
| @@ -1230,6 +1241,7 @@ class CachedReferenceField(BaseField): | |||||||
|         id_field_name = self.document_type._meta['id_field'] |         id_field_name = self.document_type._meta['id_field'] | ||||||
|         id_field = self.document_type._fields[id_field_name] |         id_field = self.document_type._fields[id_field_name] | ||||||
|  |  | ||||||
|  |         # XXX ValidationError raised outside of the "validate" method. | ||||||
|         if isinstance(document, Document): |         if isinstance(document, Document): | ||||||
|             # We need the id from the saved object to create the DBRef |             # We need the id from the saved object to create the DBRef | ||||||
|             id_ = document.pk |             id_ = document.pk | ||||||
| @@ -1238,7 +1250,6 @@ class CachedReferenceField(BaseField): | |||||||
|                            ' been saved to the database') |                            ' been saved to the database') | ||||||
|         else: |         else: | ||||||
|             self.error('Only accept a document object') |             self.error('Only accept a document object') | ||||||
|             # TODO: should raise here or will fail next statement |  | ||||||
|  |  | ||||||
|         value = SON(( |         value = SON(( | ||||||
|             ('_id', id_field.to_mongo(id_)), |             ('_id', id_field.to_mongo(id_)), | ||||||
| @@ -1256,6 +1267,7 @@ class CachedReferenceField(BaseField): | |||||||
|         if value is None: |         if value is None: | ||||||
|             return None |             return None | ||||||
|  |  | ||||||
|  |         # XXX ValidationError raised outside of the "validate" method. | ||||||
|         if isinstance(value, Document): |         if isinstance(value, Document): | ||||||
|             if value.pk is None: |             if value.pk is None: | ||||||
|                 self.error('You can only reference documents once they have' |                 self.error('You can only reference documents once they have' | ||||||
| @@ -1269,7 +1281,6 @@ class CachedReferenceField(BaseField): | |||||||
|         raise NotImplementedError |         raise NotImplementedError | ||||||
|  |  | ||||||
|     def validate(self, value): |     def validate(self, value): | ||||||
|  |  | ||||||
|         if not isinstance(value, self.document_type): |         if not isinstance(value, self.document_type): | ||||||
|             self.error('A CachedReferenceField only accepts documents') |             self.error('A CachedReferenceField only accepts documents') | ||||||
|  |  | ||||||
| @@ -1330,6 +1341,8 @@ class GenericReferenceField(BaseField): | |||||||
|                 elif isinstance(choice, type) and issubclass(choice, Document): |                 elif isinstance(choice, type) and issubclass(choice, Document): | ||||||
|                     self.choices.append(choice._class_name) |                     self.choices.append(choice._class_name) | ||||||
|                 else: |                 else: | ||||||
|  |                     # XXX ValidationError raised outside of the "validate" | ||||||
|  |                     # method. | ||||||
|                     self.error('Invalid choices provided: must be a list of' |                     self.error('Invalid choices provided: must be a list of' | ||||||
|                                'Document subclasses and/or six.string_typess') |                                'Document subclasses and/or six.string_typess') | ||||||
|  |  | ||||||
| @@ -1393,6 +1406,7 @@ class GenericReferenceField(BaseField): | |||||||
|             # We need the id from the saved object to create the DBRef |             # We need the id from the saved object to create the DBRef | ||||||
|             id_ = document.id |             id_ = document.id | ||||||
|             if id_ is None: |             if id_ is None: | ||||||
|  |                 # XXX ValidationError raised outside of the "validate" method. | ||||||
|                 self.error('You can only reference documents once they have' |                 self.error('You can only reference documents once they have' | ||||||
|                            ' been saved to the database') |                            ' been saved to the database') | ||||||
|         else: |         else: | ||||||
| @@ -2209,6 +2223,7 @@ class LazyReferenceField(BaseField): | |||||||
|         automatically call `fetch()` and try to retrive the field on the fetched |         automatically call `fetch()` and try to retrive the field on the fetched | ||||||
|         document. Note this only work getting field (not setting or deleting). |         document. Note this only work getting field (not setting or deleting). | ||||||
|         """ |         """ | ||||||
|  |         # XXX ValidationError raised outside of the "validate" method. | ||||||
|         if ( |         if ( | ||||||
|             not isinstance(document_type, six.string_types) and |             not isinstance(document_type, six.string_types) and | ||||||
|             not issubclass(document_type, Document) |             not issubclass(document_type, Document) | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user