예제 #1
0
    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)
예제 #2
0
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))
예제 #3
0
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)