Пример #1
0
def game_on_delete(obj, evt):
    """ Handle object delete """
    try:
        unindex(obj)
        removeIntIdSubscriber(obj, evt)
    except Exception, err:
        logger.exception(err)
Пример #2
0
def newsitem_on_delete(obj, evt):
    """ Handle object delete
    """
    # timeline = getUtility(ITimeline, name=u'news.timeline')
    # timeline.unindex(obj)
    try:
        unindex(obj)
        removeIntIdSubscriber(obj, evt)
    except Exception, err:
        logger.exception(err)
Пример #3
0
    def test_removeIntIdSubscriber(self):
        from zope.lifecycleevent import ObjectRemovedEvent
        from zope.intid import removeIntIdSubscriber
        from zope.intid.interfaces import IIntIdRemovedEvent
        from zope.site.interfaces import IFolder
        parent_folder = self.root['folder1']['folder1_1']
        folder = self.root['folder1']['folder1_1']['folder1_1_1']
        id = self.utility.register(folder)
        id1 = self.utility1.register(folder)
        self.assertEquals(self.utility.getObject(id), folder)
        self.assertEquals(self.utility1.getObject(id1), folder)
        setSite(self.folder1_1)

        events = []
        objevents = []

        def appendObjectEvent(obj, event):
            objevents.append((obj, event))

        provideHandler(events.append, [IIntIdRemovedEvent])
        provideHandler(appendObjectEvent, [IFolder, IIntIdRemovedEvent])

        # This should unregister the object in all utilities, not just the
        # nearest one.
        removeIntIdSubscriber(folder, ObjectRemovedEvent(parent_folder))

        self.assertRaises(KeyError, self.utility.getObject, id)
        self.assertRaises(KeyError, self.utility1.getObject, id1)

        self.assertEquals(len(events), 1)
        self.assertEquals(events[0].object, folder)
        self.assertEquals(events[0].original_event.object, parent_folder)

        self.assertEquals(len(objevents), 1)
        self.assertEquals(objevents[0][0], folder)
        self.assertEquals(objevents[0][1].object, folder)
        self.assertEquals(objevents[0][1].original_event.object, parent_folder)
Пример #4
0
    def test_removeIntIdSubscriber(self):
        from zope.lifecycleevent import ObjectRemovedEvent
        from zope.intid import removeIntIdSubscriber
        from zope.intid.interfaces import IIntIdRemovedEvent
        from zope.site.interfaces import IFolder
        parent_folder = self.root['folder1']['folder1_1']
        folder = self.root['folder1']['folder1_1']['folder1_1_1']
        id = self.utility.register(folder)
        id1 = self.utility1.register(folder)
        self.assertEquals(self.utility.getObject(id), folder)
        self.assertEquals(self.utility1.getObject(id1), folder)
        setSite(self.folder1_1)

        events = []
        objevents = []

        def appendObjectEvent(obj, event):
            objevents.append((obj, event))

        provideHandler(events.append, [IIntIdRemovedEvent])
        provideHandler(appendObjectEvent, [IFolder, IIntIdRemovedEvent])

        # This should unregister the object in all utilities, not just the
        # nearest one.
        removeIntIdSubscriber(folder, ObjectRemovedEvent(parent_folder))

        self.assertRaises(KeyError, self.utility.getObject, id)
        self.assertRaises(KeyError, self.utility1.getObject, id1)

        self.assertEquals(len(events), 1)
        self.assertEquals(events[0].object, folder)
        self.assertEquals(events[0].original_event.object, parent_folder)

        self.assertEquals(len(objevents), 1)
        self.assertEquals(objevents[0][0], folder)
        self.assertEquals(objevents[0][1].object, folder)
        self.assertEquals(objevents[0][1].original_event.object, parent_folder)
Пример #5
0
    def test_removeIntIdSubscriber(self):
        from zope.lifecycleevent import ObjectRemovedEvent
        from zope.intid import removeIntIdSubscriber
        from zope.intid.interfaces import IIntIdRemovedEvent
        from zope.site.interfaces import IFolder
        parent_folder = self.root['folder1']['folder1_1']
        folder = self.root['folder1']['folder1_1']['folder1_1_1']
        id = self.utility.register(folder)
        id1 = self.utility1.register(folder)
        self.assertEqual(self.utility.getObject(id), folder)
        self.assertEqual(self.utility1.getObject(id1), folder)
        setSite(self.folder1_1)

        events = []
        objevents = []

        def appendObjectEvent(obj, event):
            objevents.append((obj, event))

        provideHandler(events.append, [IIntIdRemovedEvent])
        provideHandler(appendObjectEvent, [IFolder, IIntIdRemovedEvent])

        # Nothing happens for objects that can't be a keyreference
        removeIntIdSubscriber(self, None)
        self.assertEqual([], events)

        # This should unregister the object in all utilities, not just the
        # nearest one.
        removeIntIdSubscriber(folder, ObjectRemovedEvent(parent_folder))

        self.assertRaises(ObjectMissingError, self.utility.getObject, id)
        self.assertRaises(ObjectMissingError, self.utility1.getObject, id1)

        self.assertEqual(len(events), 1)
        self.assertEqual(events[0].object, folder)
        self.assertEqual(events[0].original_event.object, parent_folder)

        self.assertEqual(len(objevents), 1)
        self.assertEqual(objevents[0][0], folder)
        self.assertEqual(objevents[0][1].object, folder)
        self.assertEqual(objevents[0][1].original_event.object, parent_folder)

        # Removing again will produce key errors, but those don't
        # propagate from the subscriber
        del events[:]
        del objevents[:]
        self.assertRaises(IntIdMissingError, self.utility.unregister, parent_folder)

        removeIntIdSubscriber(folder, ObjectRemovedEvent(parent_folder))
        # Note that even though we didn't remove it, we still sent an event...
        self.assertEqual(len(events), 1)