Add validation of array field's inner field

This commit is contained in:
Itai Shirav 2018-08-13 08:36:01 +03:00
parent cec543eee7
commit be1cbdee76
2 changed files with 8 additions and 1 deletions

View File

@ -363,6 +363,8 @@ class ArrayField(Field):
class_default = []
def __init__(self, inner_field, default=None, alias=None, materialized=None, readonly=None):
assert isinstance(inner_field, Field), "The first argument of ArrayField must be a Field instance"
assert not isinstance(inner_field, ArrayField), "Multidimensional array fields are not supported by the ORM"
self.inner_field = inner_field
super(ArrayField, self).__init__(default, alias, materialized, readonly)

View File

@ -21,7 +21,7 @@ class ArrayFieldsTest(unittest.TestCase):
instance = ModelWithArrays(
date_field='2016-08-30',
arr_str=['goodbye,', 'cruel', 'world', 'special chars: ,"\\\'` \n\t\\[]'],
arr_date=['2010-01-01']
arr_date=['2010-01-01'],
)
self.database.insert([instance])
query = 'SELECT * from $db.modelwitharrays ORDER BY date_field'
@ -62,6 +62,11 @@ class ArrayFieldsTest(unittest.TestCase):
with self.assertRaises(ValueError):
parse_array(s)
def test_invalid_inner_field(self):
for x in (DateField, None, "", ArrayField(Int32Field())):
with self.assertRaises(AssertionError):
ArrayField(x)
class ModelWithArrays(Model):