Added 'strict' meta parameter
This commit is contained in:
parent
19dc312128
commit
cd2d9517a0
@ -72,7 +72,7 @@ class BaseDocument(object):
|
||||
|
||||
# Check if there are undefined fields supplied, if so raise an
|
||||
# Exception.
|
||||
if not self._dynamic:
|
||||
if not self._dynamic and self._meta.get('strict', True):
|
||||
for var in values.keys():
|
||||
if var not in self._fields.keys() + ['id', 'pk', '_cls', '_text_score']:
|
||||
msg = (
|
||||
|
@ -16,7 +16,8 @@ from tests.fixtures import (PickleEmbedded, PickleTest, PickleSignalsTest,
|
||||
|
||||
from mongoengine import *
|
||||
from mongoengine.errors import (NotRegistered, InvalidDocumentError,
|
||||
InvalidQueryError, NotUniqueError)
|
||||
InvalidQueryError, NotUniqueError,
|
||||
FieldDoesNotExist)
|
||||
from mongoengine.queryset import NULLIFY, Q
|
||||
from mongoengine.connection import get_db
|
||||
from mongoengine.base import get_document
|
||||
@ -2467,6 +2468,117 @@ class InstanceTest(unittest.TestCase):
|
||||
group = Group.objects.first()
|
||||
self.assertEqual("hello - default", group.name)
|
||||
|
||||
def test_load_undefined_fields(self):
|
||||
class User(Document):
|
||||
name = StringField()
|
||||
|
||||
User.drop_collection()
|
||||
|
||||
User._get_collection().save({
|
||||
'name': 'John',
|
||||
'foo': 'Bar',
|
||||
'data': [1, 2, 3]
|
||||
})
|
||||
|
||||
with self.assertRaises(FieldDoesNotExist):
|
||||
User.objects.first()
|
||||
|
||||
def test_load_undefined_fields_with_strict_false(self):
|
||||
class User(Document):
|
||||
name = StringField()
|
||||
|
||||
meta = {'strict': False}
|
||||
|
||||
User.drop_collection()
|
||||
|
||||
User._get_collection().save({
|
||||
'name': 'John',
|
||||
'foo': 'Bar',
|
||||
'data': [1, 2, 3]
|
||||
})
|
||||
|
||||
user = User.objects.first()
|
||||
self.assertEqual(user.name, 'John')
|
||||
self.assertFalse(hasattr(user, 'foo'))
|
||||
self.assertEqual(user._data['foo'], 'Bar')
|
||||
self.assertFalse(hasattr(user, 'data'))
|
||||
self.assertEqual(user._data['data'], [1, 2, 3])
|
||||
|
||||
def test_load_undefined_fields_on_embedded_document(self):
|
||||
class Thing(EmbeddedDocument):
|
||||
name = StringField()
|
||||
|
||||
class User(Document):
|
||||
name = StringField()
|
||||
thing = EmbeddedDocumentField(Thing)
|
||||
|
||||
User.drop_collection()
|
||||
|
||||
User._get_collection().save({
|
||||
'name': 'John',
|
||||
'thing': {
|
||||
'name': 'My thing',
|
||||
'foo': 'Bar',
|
||||
'data': [1, 2, 3]
|
||||
}
|
||||
})
|
||||
|
||||
with self.assertRaises(FieldDoesNotExist):
|
||||
User.objects.first()
|
||||
|
||||
def test_load_undefined_fields_on_embedded_document_with_strict_false_on_doc(self):
|
||||
class Thing(EmbeddedDocument):
|
||||
name = StringField()
|
||||
|
||||
class User(Document):
|
||||
name = StringField()
|
||||
thing = EmbeddedDocumentField(Thing)
|
||||
|
||||
meta = {'strict': False}
|
||||
|
||||
User.drop_collection()
|
||||
|
||||
User._get_collection().save({
|
||||
'name': 'John',
|
||||
'thing': {
|
||||
'name': 'My thing',
|
||||
'foo': 'Bar',
|
||||
'data': [1, 2, 3]
|
||||
}
|
||||
})
|
||||
|
||||
with self.assertRaises(FieldDoesNotExist):
|
||||
User.objects.first()
|
||||
|
||||
def test_load_undefined_fields_on_embedded_document_with_strict_false(self):
|
||||
class Thing(EmbeddedDocument):
|
||||
name = StringField()
|
||||
|
||||
meta = {'strict': False}
|
||||
|
||||
class User(Document):
|
||||
name = StringField()
|
||||
thing = EmbeddedDocumentField(Thing)
|
||||
|
||||
User.drop_collection()
|
||||
|
||||
User._get_collection().save({
|
||||
'name': 'John',
|
||||
'thing': {
|
||||
'name': 'My thing',
|
||||
'foo': 'Bar',
|
||||
'data': [1, 2, 3]
|
||||
}
|
||||
})
|
||||
|
||||
user = User.objects.first()
|
||||
self.assertEqual(user.name, 'John')
|
||||
self.assertEqual(user.thing.name, 'My thing')
|
||||
self.assertFalse(hasattr(user.thing, 'foo'))
|
||||
self.assertEqual(user.thing._data['foo'], 'Bar')
|
||||
self.assertFalse(hasattr(user.thing, 'data'))
|
||||
self.assertEqual(user.thing._data['data'], [1, 2, 3])
|
||||
|
||||
def test_spaces_in_keys(self):
|
||||
|
||||
class Embedded(DynamicEmbeddedDocument):
|
||||
|
@ -3160,7 +3160,7 @@ class FieldTest(unittest.TestCase):
|
||||
|
||||
def test_undefined_field_exception(self):
|
||||
"""Tests if a `FieldDoesNotExist` exception is raised when trying to
|
||||
set a value to a field that's not defined.
|
||||
instanciate a document with a field that's not defined.
|
||||
"""
|
||||
|
||||
class Doc(Document):
|
||||
|
Loading…
x
Reference in New Issue
Block a user