def game_on_delete(obj, evt): """ Handle object delete """ try: unindex(obj) removeIntIdSubscriber(obj, evt) except Exception, err: logger.exception(err)
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)
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)
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)