From be1cbdee764f68bbae8887f6068043e495fa096d Mon Sep 17 00:00:00 2001 From: Itai Shirav Date: Mon, 13 Aug 2018 08:36:01 +0300 Subject: [PATCH] Add validation of array field's inner field --- src/infi/clickhouse_orm/fields.py | 2 ++ tests/test_array_fields.py | 7 ++++++- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/src/infi/clickhouse_orm/fields.py b/src/infi/clickhouse_orm/fields.py index 6ee18d8..dc51a57 100644 --- a/src/infi/clickhouse_orm/fields.py +++ b/src/infi/clickhouse_orm/fields.py @@ -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) diff --git a/tests/test_array_fields.py b/tests/test_array_fields.py index 5676f04..de8f2d6 100644 --- a/tests/test_array_fields.py +++ b/tests/test_array_fields.py @@ -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):