fixed empty sets, maps, lists
This commit is contained in:
		| @@ -473,14 +473,15 @@ class Set(BaseContainerColumn): | |||||||
|             cq = cql_quote |             cq = cql_quote | ||||||
|             return '{' + ', '.join([cq(v) for v in self.value]) + '}' |             return '{' + ', '.join([cq(v) for v in self.value]) + '}' | ||||||
|  |  | ||||||
|     def __init__(self, value_type, strict=True, **kwargs): |     def __init__(self, value_type, strict=True, default=set, **kwargs): | ||||||
|         """ |         """ | ||||||
|         :param value_type: a column class indicating the types of the value |         :param value_type: a column class indicating the types of the value | ||||||
|         :param strict: sets whether non set values will be coerced to set |         :param strict: sets whether non set values will be coerced to set | ||||||
|             type on validation, or raise a validation error, defaults to True |             type on validation, or raise a validation error, defaults to True | ||||||
|         """ |         """ | ||||||
|         self.strict = strict |         self.strict = strict | ||||||
|         super(Set, self).__init__(value_type, **kwargs) |  | ||||||
|  |         super(Set, self).__init__(value_type, default=default, **kwargs) | ||||||
|  |  | ||||||
|     def validate(self, value): |     def validate(self, value): | ||||||
|         val = super(Set, self).validate(value) |         val = super(Set, self).validate(value) | ||||||
| @@ -495,11 +496,12 @@ class Set(BaseContainerColumn): | |||||||
|         return {self.value_col.validate(v) for v in val} |         return {self.value_col.validate(v) for v in val} | ||||||
|  |  | ||||||
|     def to_python(self, value): |     def to_python(self, value): | ||||||
|         if value is None: return None |         if value is None: return set() | ||||||
|         return {self.value_col.to_python(v) for v in value} |         return {self.value_col.to_python(v) for v in value} | ||||||
|  |  | ||||||
|     def to_database(self, value): |     def to_database(self, value): | ||||||
|         if value is None: return None |         if value is None: return None | ||||||
|  |  | ||||||
|         if isinstance(value, self.Quoter): return value |         if isinstance(value, self.Quoter): return value | ||||||
|         return self.Quoter({self.value_col.to_database(v) for v in value}) |         return self.Quoter({self.value_col.to_database(v) for v in value}) | ||||||
|  |  | ||||||
| @@ -560,6 +562,9 @@ class List(BaseContainerColumn): | |||||||
|             cq = cql_quote |             cq = cql_quote | ||||||
|             return '[' + ', '.join([cq(v) for v in self.value]) + ']' |             return '[' + ', '.join([cq(v) for v in self.value]) + ']' | ||||||
|  |  | ||||||
|  |     def __init__(self, value_type, default=set, **kwargs): | ||||||
|  |         return super(List, self).__init__(value_type=value_type, default=default, **kwargs) | ||||||
|  |  | ||||||
|     def validate(self, value): |     def validate(self, value): | ||||||
|         val = super(List, self).validate(value) |         val = super(List, self).validate(value) | ||||||
|         if val is None: return |         if val is None: return | ||||||
| @@ -668,7 +673,7 @@ class Map(BaseContainerColumn): | |||||||
|             cq = cql_quote |             cq = cql_quote | ||||||
|             return '{' + ', '.join([cq(k) + ':' + cq(v) for k,v in self.value.items()]) + '}' |             return '{' + ', '.join([cq(k) + ':' + cq(v) for k,v in self.value.items()]) + '}' | ||||||
|  |  | ||||||
|     def __init__(self, key_type, value_type, **kwargs): |     def __init__(self, key_type, value_type, default=dict, **kwargs): | ||||||
|         """ |         """ | ||||||
|         :param key_type: a column class indicating the types of the key |         :param key_type: a column class indicating the types of the key | ||||||
|         :param value_type: a column class indicating the types of the value |         :param value_type: a column class indicating the types of the value | ||||||
| @@ -687,7 +692,7 @@ class Map(BaseContainerColumn): | |||||||
|         else: |         else: | ||||||
|             self.key_col = key_type |             self.key_col = key_type | ||||||
|             self.key_type = self.key_col.__class__ |             self.key_type = self.key_col.__class__ | ||||||
|         super(Map, self).__init__(value_type, **kwargs) |         super(Map, self).__init__(value_type, default=default, **kwargs) | ||||||
|  |  | ||||||
|     def get_column_def(self): |     def get_column_def(self): | ||||||
|         """ |         """ | ||||||
|   | |||||||
| @@ -40,6 +40,16 @@ class TestSetColumn(BaseCassEngTestCase): | |||||||
|         super(TestSetColumn, cls).tearDownClass() |         super(TestSetColumn, cls).tearDownClass() | ||||||
|         delete_table(TestSetModel) |         delete_table(TestSetModel) | ||||||
|  |  | ||||||
|  |  | ||||||
|  |     def test_empty_set_initial(self): | ||||||
|  |         """ | ||||||
|  |         tests that sets are set() by default, should never be none | ||||||
|  |         :return: | ||||||
|  |         """ | ||||||
|  |         m = TestSetModel.create() | ||||||
|  |         m.int_set.add(5) | ||||||
|  |         m.save() | ||||||
|  |  | ||||||
|     def test_io_success(self): |     def test_io_success(self): | ||||||
|         """ Tests that a basic usage works as expected """ |         """ Tests that a basic usage works as expected """ | ||||||
|         m1 = TestSetModel.create(int_set={1, 2}, text_set={'kai', 'andreas'}) |         m1 = TestSetModel.create(int_set={1, 2}, text_set={'kai', 'andreas'}) | ||||||
| @@ -129,6 +139,8 @@ class TestSetColumn(BaseCassEngTestCase): | |||||||
|         column = columns.Set(columns.Text(min_length=100)) |         column = columns.Set(columns.Text(min_length=100)) | ||||||
|         assert isinstance(column.value_col, columns.Text) |         assert isinstance(column.value_col, columns.Text) | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|     def test_to_python(self): |     def test_to_python(self): | ||||||
|         """ Tests that to_python of value column is called """ |         """ Tests that to_python of value column is called """ | ||||||
|         column = columns.Set(JsonTestColumn) |         column = columns.Set(JsonTestColumn) | ||||||
| @@ -157,6 +169,10 @@ class TestListColumn(BaseCassEngTestCase): | |||||||
|         super(TestListColumn, cls).tearDownClass() |         super(TestListColumn, cls).tearDownClass() | ||||||
|         delete_table(TestListModel) |         delete_table(TestListModel) | ||||||
|  |  | ||||||
|  |     def test_initial(self): | ||||||
|  |         tmp = TestListModel.create() | ||||||
|  |         tmp.int_list.append(1) | ||||||
|  |  | ||||||
|     def test_io_success(self): |     def test_io_success(self): | ||||||
|         """ Tests that a basic usage works as expected """ |         """ Tests that a basic usage works as expected """ | ||||||
|         m1 = TestListModel.create(int_list=[1, 2], text_list=['kai', 'andreas']) |         m1 = TestListModel.create(int_list=[1, 2], text_list=['kai', 'andreas']) | ||||||
| @@ -275,6 +291,10 @@ class TestMapColumn(BaseCassEngTestCase): | |||||||
|         super(TestMapColumn, cls).tearDownClass() |         super(TestMapColumn, cls).tearDownClass() | ||||||
|         delete_table(TestMapModel) |         delete_table(TestMapModel) | ||||||
|  |  | ||||||
|  |     def test_empty_default(self): | ||||||
|  |         tmp = TestMapModel.create() | ||||||
|  |         tmp.int_map['blah'] = 1 | ||||||
|  |  | ||||||
|     def test_io_success(self): |     def test_io_success(self): | ||||||
|         """ Tests that a basic usage works as expected """ |         """ Tests that a basic usage works as expected """ | ||||||
|         k1 = uuid4() |         k1 = uuid4() | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user
	 Jon Haddad
					Jon Haddad