fixed a problem with the value management of instances

This commit is contained in:
Blake Eggleston
2012-11-13 21:17:21 -08:00
parent fd881636ea
commit 7180033621
2 changed files with 24 additions and 5 deletions

View File

@@ -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()

View File

@@ -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
"""