validate db_field
This commit is contained in:
parent
2770cec187
commit
e07cb82c15
@ -81,6 +81,17 @@ class BaseField(object):
|
|||||||
self.sparse = sparse
|
self.sparse = sparse
|
||||||
self._owner_document = None
|
self._owner_document = None
|
||||||
|
|
||||||
|
# Validate the db_field
|
||||||
|
if self.db_field and (
|
||||||
|
'.' in self.db_field or
|
||||||
|
'\0' in self.db_field or
|
||||||
|
self.db_field.startswith('$')
|
||||||
|
):
|
||||||
|
raise ValueError(
|
||||||
|
'field names cannot contain dots (".") or null characters '
|
||||||
|
'("\\0"), and they must not start with a dollar sign ("$").'
|
||||||
|
)
|
||||||
|
|
||||||
# Detect and report conflicts between metadata and base properties.
|
# Detect and report conflicts between metadata and base properties.
|
||||||
conflicts = set(dir(self)) & set(kwargs)
|
conflicts = set(dir(self)) & set(kwargs)
|
||||||
if conflicts:
|
if conflicts:
|
||||||
|
@ -306,6 +306,24 @@ class FieldTest(unittest.TestCase):
|
|||||||
person.id = '497ce96f395f2f052a494fd4'
|
person.id = '497ce96f395f2f052a494fd4'
|
||||||
person.validate()
|
person.validate()
|
||||||
|
|
||||||
|
def test_db_field_validation(self):
|
||||||
|
"""Ensure that db_field doesn't accept invalid values."""
|
||||||
|
|
||||||
|
# dot in the name
|
||||||
|
with self.assertRaises(ValueError):
|
||||||
|
class User(Document):
|
||||||
|
name = StringField(db_field='user.name')
|
||||||
|
|
||||||
|
# name starting with $
|
||||||
|
with self.assertRaises(ValueError):
|
||||||
|
class User(Document):
|
||||||
|
name = StringField(db_field='$name')
|
||||||
|
|
||||||
|
# name containing a null character
|
||||||
|
with self.assertRaises(ValueError):
|
||||||
|
class User(Document):
|
||||||
|
name = StringField(db_field='name\0')
|
||||||
|
|
||||||
def test_string_validation(self):
|
def test_string_validation(self):
|
||||||
"""Ensure that invalid values cannot be assigned to string fields.
|
"""Ensure that invalid values cannot be assigned to string fields.
|
||||||
"""
|
"""
|
||||||
@ -3973,30 +3991,25 @@ class FieldTest(unittest.TestCase):
|
|||||||
"""Tests if a `FieldDoesNotExist` exception is raised when trying to
|
"""Tests if a `FieldDoesNotExist` exception is raised when trying to
|
||||||
instanciate a document with a field that's not defined.
|
instanciate a document with a field that's not defined.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
class Doc(Document):
|
class Doc(Document):
|
||||||
foo = StringField(db_field='f')
|
foo = StringField()
|
||||||
|
|
||||||
def test():
|
with self.assertRaises(FieldDoesNotExist):
|
||||||
Doc(bar='test')
|
Doc(bar='test')
|
||||||
|
|
||||||
self.assertRaises(FieldDoesNotExist, test)
|
|
||||||
|
|
||||||
def test_undefined_field_exception_with_strict(self):
|
def test_undefined_field_exception_with_strict(self):
|
||||||
"""Tests if a `FieldDoesNotExist` exception is raised when trying to
|
"""Tests if a `FieldDoesNotExist` exception is raised when trying to
|
||||||
instanciate a document with a field that's not defined,
|
instanciate a document with a field that's not defined,
|
||||||
even when strict is set to False.
|
even when strict is set to False.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
class Doc(Document):
|
class Doc(Document):
|
||||||
foo = StringField(db_field='f')
|
foo = StringField()
|
||||||
meta = {'strict': False}
|
meta = {'strict': False}
|
||||||
|
|
||||||
def test():
|
with self.assertRaises(FieldDoesNotExist):
|
||||||
Doc(bar='test')
|
Doc(bar='test')
|
||||||
|
|
||||||
self.assertRaises(FieldDoesNotExist, test)
|
|
||||||
|
|
||||||
def test_long_field_is_considered_as_int64(self):
|
def test_long_field_is_considered_as_int64(self):
|
||||||
"""
|
"""
|
||||||
Tests that long fields are stored as long in mongo, even if long value
|
Tests that long fields are stored as long in mongo, even if long value
|
||||||
|
Loading…
x
Reference in New Issue
Block a user