def test_get_set_ProxiedObject(self): from zope.container.contained import getProxiedObject from zope.container.contained import setProxiedObject proxy = ContainedProxy(self) self.assertIs(self, getProxiedObject(proxy)) o = object() self.assertIs(o, getProxiedObject(o)) old = setProxiedObject(proxy, o) self.assertIs(self, old) self.assertIs(o, getProxiedObject(proxy)) with self.assertRaises(TypeError): setProxiedObject(self, 1)
def unrelateOnDeletion(event): """Remove all relationships when an object is deleted.""" if not IObjectRemovedEvent.providedBy(event): return linkset = IRelationshipLinks(event.object, None) if linkset is not None: # event.object may be a ContainedProxy unrelateAll(getProxiedObject(event.object))
def unrelateOnCopy(event): """Remove all relationships when an object is copied.""" if not IObjectCopiedEvent.providedBy(event): return # event.object may be a ContainedProxy obj = getProxiedObject(event.object) linkset = IRelationshipLinks(obj, None) if linkset is not None: links_to_remove = [] for link in linkset: other_linkset = IRelationshipLinks(link.target) try: other_linkset.find(link.role, obj, link.my_role, link.rel_type) except ValueError: # The corresponding other link was not copied, so we have a # degenerate one-sided relationship. Let's remove it # altogether. It would not difficult to have a different # function, cloneRelationshipsOnCopy, that would create # a corresponding link in other_linkset. links_to_remove.append(link) for link in links_to_remove: linkset.remove(link)