[Checkins] SVN: zope.app.intid/trunk/ Make IntId events subclass IObjectEvent

Dan Korostelev nadako at gmail.com
Thu Dec 11 07:05:12 EST 2008


Log message for revision 93900:
  Make IntId events subclass IObjectEvent

Changed:
  U   zope.app.intid/trunk/CHANGES.txt
  U   zope.app.intid/trunk/src/zope/app/intid/interfaces.py
  U   zope.app.intid/trunk/src/zope/app/intid/tests.py

-=-
Modified: zope.app.intid/trunk/CHANGES.txt
===================================================================
--- zope.app.intid/trunk/CHANGES.txt	2008-12-11 10:53:55 UTC (rev 93899)
+++ zope.app.intid/trunk/CHANGES.txt	2008-12-11 12:05:12 UTC (rev 93900)
@@ -2,6 +2,12 @@
 CHANGES
 =======
 
+3.5.1 (unreleased)
+
+- Make IIntIdAddedEvent and IIntIdRemovedEvent subclass
+  zope.component.interfaces.IObjectEvent to make subscribers
+  for like (ISomeObject, IIntIdAddedEvent) work.
+
 3.5.0 (2008-06-19)
 ------------------
 

Modified: zope.app.intid/trunk/src/zope/app/intid/interfaces.py
===================================================================
--- zope.app.intid/trunk/src/zope/app/intid/interfaces.py	2008-12-11 10:53:55 UTC (rev 93899)
+++ zope.app.intid/trunk/src/zope/app/intid/interfaces.py	2008-12-11 12:05:12 UTC (rev 93900)
@@ -4,6 +4,7 @@
 $Id$
 """
 from zope.interface import Interface, Attribute, implements
+from zope.component.interfaces import IObjectEvent
 
 
 class IIntIdsQuery(Interface):
@@ -64,15 +65,13 @@
     """
 
 
-class IIntIdRemovedEvent(Interface):
+class IIntIdRemovedEvent(IObjectEvent):
     """A unique id will be removed
 
     The event is published before the unique id is removed
     from the utility so that the indexing objects can unindex the object.
     """
 
-    object = Attribute("The object being removed")
-
     original_event = Attribute("The IObjectRemoveEvent related to this event")
 
 
@@ -88,15 +87,13 @@
         self.original_event = event
 
 
-class IIntIdAddedEvent(Interface):
+class IIntIdAddedEvent(IObjectEvent):
     """A unique id has been added
 
     The event gets sent when an object is registered in a
     unique id utility.
     """
 
-    object = Attribute("The object being added")
-
     original_event = Attribute("The ObjectAddedEvent related to this event")
 
 

Modified: zope.app.intid/trunk/src/zope/app/intid/tests.py
===================================================================
--- zope.app.intid/trunk/src/zope/app/intid/tests.py	2008-12-11 10:53:55 UTC (rev 93899)
+++ zope.app.intid/trunk/src/zope/app/intid/tests.py	2008-12-11 12:05:12 UTC (rev 93900)
@@ -208,6 +208,7 @@
         from zope.app.intid import removeIntIdSubscriber
         from zope.app.container.contained import ObjectRemovedEvent
         from zope.app.intid.interfaces import IIntIdRemovedEvent
+        from zope.app.folder.interfaces import IFolder
         parent_folder = self.root['folder1']['folder1_1']
         folder = self.root['folder1']['folder1_1']['folder1_1_1']
         id = self.utility.register(folder)
@@ -217,7 +218,12 @@
         setSite(self.folder1_1)
 
         events = []
+
+        def appendObjectEvent(obj, event):
+            events.append((obj, event))
+
         ztapi.subscribe([IIntIdRemovedEvent], None, events.append)
+        ztapi.subscribe([IFolder, IIntIdRemovedEvent], None, appendObjectEvent)
 
         # This should unregister the object in all utilities, not just the
         # nearest one.
@@ -226,20 +232,29 @@
         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(events), 2)
+        self.assertEquals(events[0][0], folder)
+        self.assertEquals(events[0][1].object, folder)
+        self.assertEquals(events[0][1].original_event.object, parent_folder)
+        self.assertEquals(events[1].object, folder)
+        self.assertEquals(events[1].original_event.object, parent_folder)
 
     def test_addIntIdSubscriber(self):
         from zope.app.intid import addIntIdSubscriber
         from zope.app.container.contained import ObjectAddedEvent
         from zope.app.intid.interfaces import IIntIdAddedEvent
+        from zope.app.folder.interfaces import IFolder
         parent_folder = self.root['folder1']['folder1_1']
         folder = self.root['folder1']['folder1_1']['folder1_1_1']
         setSite(self.folder1_1)
 
         events = []
+
+        def appendObjectEvent(obj, event):
+            events.append((obj, event))
+
         ztapi.subscribe([IIntIdAddedEvent], None, events.append)
+        ztapi.subscribe([IFolder, IIntIdAddedEvent], None, appendObjectEvent)
 
         # This should register the object in all utilities, not just the
         # nearest one.
@@ -249,9 +264,12 @@
         id = self.utility.getId(folder)
         id1 = self.utility1.getId(folder)
 
-        self.assertEquals(len(events), 1)
-        self.assertEquals(events[0].original_event.object, parent_folder)
-        self.assertEquals(events[0].object, folder)
+        self.assertEquals(len(events), 2)
+        self.assertEquals(events[0][1].original_event.object, parent_folder)
+        self.assertEquals(events[0][1].object, folder)
+        self.assertEquals(events[0][0], folder)
+        self.assertEquals(events[1].original_event.object, parent_folder)
+        self.assertEquals(events[1].object, folder)
 
 
 class TestIntIds64(TestIntIds):



More information about the Checkins mailing list