def plain_init(self, *args, **kwargs):
pass
def hasparent(self, item):
- return item.__class__._attribute_manager.attribute_history(item).get('_hasparent_' + self.key)
+ return item.__class__._attribute_manager.attribute_history(item).get(('_hasparent_', self.obj.__class__, self.key))
def sethasparent(self, item, value):
if item is not None:
- item.__class__._attribute_manager.attribute_history(item)['_hasparent_' + self.key] = value
+ item.__class__._attribute_manager.attribute_history(item)[('_hasparent_', self.obj.__class__, self.key)] = value
class ScalarAttribute(ManagedAttribute):
"""Used by AttributeManager to track the history of a scalar attribute
assert y.element == 'this is the bar attr'
assert x.element2 == 'this is the shared attr'
assert y.element2 == 'this is the shared attr'
+
+ def testparenttrack(self):
+ class Foo(object):pass
+ class Bar(object):pass
+
+ manager = attributes.AttributeManager()
+
+ manager.register_attribute(Foo, 'element', uselist=False, trackparent=True)
+ manager.register_attribute(Bar, 'element', uselist=False, trackparent=True)
+
+ f1 = Foo()
+ f2 = Foo()
+ b1 = Bar()
+ b2 = Bar()
+
+ f1.element = b1
+ b2.element = f2
+
+ assert manager.get_history(f1, 'element').hasparent(b1)
+ assert not manager.get_history(f1, 'element').hasparent(b2)
+ assert not manager.get_history(f1, 'element').hasparent(f2)
+ assert manager.get_history(b2, 'element').hasparent(f2)
+
+ b2.element = None
+ assert not manager.get_history(b2, 'element').hasparent(f2)
if __name__ == "__main__":
unittest.main()