fixed a problem with the value management of instances
This commit is contained in:
@@ -71,10 +71,7 @@ class ModelMetaClass(type):
|
||||
def _transform_column(col_name, col_obj):
|
||||
_columns[col_name] = col_obj
|
||||
col_obj.set_db_name(col_name)
|
||||
allow_delete = not col_obj.primary_key
|
||||
attrs[col_name] = col_obj.get_property(allow_delete=allow_delete)
|
||||
|
||||
#import ipdb; ipdb.set_trace()
|
||||
column_definitions = [(k,v) for k,v in attrs.items() if isinstance(v, columns.BaseColumn)]
|
||||
column_definitions = sorted(column_definitions, lambda x,y: cmp(x[1].position, y[1].position))
|
||||
|
||||
@@ -91,7 +88,9 @@ class ModelMetaClass(type):
|
||||
|
||||
#setup primary key shortcut
|
||||
if pk_name != 'pk':
|
||||
attrs['pk'] = _columns[pk_name].get_property(allow_delete=False)
|
||||
pk_get = lambda self: getattr(self, pk_name)
|
||||
pk_set = lambda self, val: setattr(self, pk_name, val)
|
||||
attrs['pk'] = property(pk_get, pk_set)
|
||||
|
||||
#check for duplicate column names
|
||||
col_names = set()
|
||||
|
||||
@@ -18,10 +18,12 @@ class TestModelClassFunction(BaseCassEngTestCase):
|
||||
class TestModel(Model):
|
||||
text = columns.Text()
|
||||
|
||||
#check class attributes
|
||||
self.assertHasAttr(TestModel, '_columns')
|
||||
self.assertHasAttr(TestModel, 'id')
|
||||
self.assertNotHasAttr(TestModel, 'id')
|
||||
self.assertHasAttr(TestModel, 'text')
|
||||
|
||||
#check instance attributes
|
||||
inst = TestModel()
|
||||
self.assertHasAttr(inst, 'id')
|
||||
self.assertHasAttr(inst, 'text')
|
||||
@@ -63,3 +65,21 @@ class TestModelClassFunction(BaseCassEngTestCase):
|
||||
|
||||
self.assertEquals(Stuff._columns.keys(), ['id', 'words', 'content', 'numbers'])
|
||||
|
||||
def test_value_managers_are_keeping_model_instances_isolated(self):
|
||||
"""
|
||||
Tests that instance value managers are isolated from other instances
|
||||
"""
|
||||
class Stuff(Model):
|
||||
num = columns.Integer()
|
||||
|
||||
inst1 = Stuff(num=5)
|
||||
inst2 = Stuff(num=7)
|
||||
|
||||
self.assertNotEquals(inst1.num, inst2.num)
|
||||
self.assertEquals(inst1.num, 5)
|
||||
self.assertEquals(inst2.num, 7)
|
||||
|
||||
def test_meta_data_is_not_inherited(self):
|
||||
"""
|
||||
Test that metadata defined in one class, is not inherited by subclasses
|
||||
"""
|
||||
|
||||
Reference in New Issue
Block a user