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