[Checkins] SVN: Products.CMFCore/trunk/Products/CMFCore/ - fixed content creation refactoring (addCreator wasn't called)

Yvo Schubbe y.2008 at wcm-solutions.de
Sun Apr 20 13:05:05 EDT 2008


Log message for revision 85506:
  - fixed content creation refactoring (addCreator wasn't called)

Changed:
  U   Products.CMFCore/trunk/Products/CMFCore/CHANGES.txt
  U   Products.CMFCore/trunk/Products/CMFCore/CMFCatalogAware.py
  U   Products.CMFCore/trunk/Products/CMFCore/TypesTool.py
  U   Products.CMFCore/trunk/Products/CMFCore/tests/test_TypesTool.py

-=-
Modified: Products.CMFCore/trunk/Products/CMFCore/CHANGES.txt
===================================================================
--- Products.CMFCore/trunk/Products/CMFCore/CHANGES.txt	2008-04-20 16:44:45 UTC (rev 85505)
+++ Products.CMFCore/trunk/Products/CMFCore/CHANGES.txt	2008-04-20 17:05:04 UTC (rev 85506)
@@ -7,10 +7,11 @@
       DEPENDENCIES.txt and automatic installation in setup.py.
 
     - TypesTool: Refactored content creation.
-      Moved notifyWorkflowCreated and indexObject calls to IObjectAddedEvent
-      handler. Please make sure all oldstyle content factory methods use
-      _setObject with suppress_events=True. CMF factory methods don't finish
-      object creation, so they should not send the IObjectAddedEvent.
+      Moved addCreator call to IObjectCreatedEvent handler and moved
+      notifyWorkflowCreated and indexObject calls to IObjectAddedEvent handler.
+      Please make sure all oldstyle content factory methods use _setObject with
+      suppress_events=True. CMF factory methods don't finish object creation,
+      so they should not send the IObjectAddedEvent.
 
     - interfaces: Added new interfaces for CMFCatalogAware methods.
       In the long run ICatalogAware, IWorkflowAware and IOpaqueItemManager will

Modified: Products.CMFCore/trunk/Products/CMFCore/CMFCatalogAware.py
===================================================================
--- Products.CMFCore/trunk/Products/CMFCore/CMFCatalogAware.py	2008-04-20 16:44:45 UTC (rev 85505)
+++ Products.CMFCore/trunk/Products/CMFCore/CMFCatalogAware.py	2008-04-20 17:05:04 UTC (rev 85506)
@@ -28,6 +28,8 @@
 from zope.app.container.interfaces import IObjectMovedEvent
 from zope.component import subscribers
 from zope.interface import implements
+from zope.lifecycleevent.interfaces import IObjectCopiedEvent
+from zope.lifecycleevent.interfaces import IObjectCreatedEvent
 
 from interfaces import ICallableOpaqueItem
 from interfaces import ICatalogAware
@@ -244,6 +246,13 @@
         if event.oldParent is not None:
             ob.unindexObject()
 
+    elif IObjectCopiedEvent.providedBy(event):
+        pass
+
+    elif IObjectCreatedEvent.providedBy(event):
+        if hasattr(aq_base(ob), 'addCreator'):
+            ob.addCreator()
+
 def handleDynamicTypeCopiedEvent(ob, event):
     """ Event subscriber for (IDynamicType, IObjectCopiedEvent) events.
     """

Modified: Products.CMFCore/trunk/Products/CMFCore/TypesTool.py
===================================================================
--- Products.CMFCore/trunk/Products/CMFCore/TypesTool.py	2008-04-20 16:44:45 UTC (rev 85505)
+++ Products.CMFCore/trunk/Products/CMFCore/TypesTool.py	2008-04-20 17:05:04 UTC (rev 85506)
@@ -36,6 +36,7 @@
 from zope.event import notify
 from zope.i18nmessageid import Message
 from zope.interface import implements
+from zope.lifecycleevent import ObjectCreatedEvent
 
 from ActionProviderBase import ActionProviderBase
 from exceptions import AccessControl_Unauthorized
@@ -433,6 +434,7 @@
             obj = container._getOb(newid)
             if hasattr(obj, '_setPortalTypeName'):
                 obj._setPortalTypeName(self.getId())
+            notify(ObjectCreatedEvent(obj))
             notify(ObjectAddedEvent(obj, container, newid))
             notifyContainerModified(container)
 
@@ -442,6 +444,7 @@
             obj = factory(id, *args, **kw)
             if hasattr(obj, '_setPortalTypeName'):
                 obj._setPortalTypeName(self.getId())
+            notify(ObjectCreatedEvent(obj))
             rval = container._setObject(id, obj)
             newid = isinstance(rval, basestring) and rval or id
             obj = container._getOb(newid)

Modified: Products.CMFCore/trunk/Products/CMFCore/tests/test_TypesTool.py
===================================================================
--- Products.CMFCore/trunk/Products/CMFCore/tests/test_TypesTool.py	2008-04-20 16:44:45 UTC (rev 85505)
+++ Products.CMFCore/trunk/Products/CMFCore/tests/test_TypesTool.py	2008-04-20 17:05:04 UTC (rev 85506)
@@ -35,6 +35,7 @@
 from zope.component.interfaces import IFactory
 from zope.interface import implements
 from zope.interface.verify import verifyClass
+from zope.lifecycleevent.interfaces import IObjectCreatedEvent
 from zope.testing.cleanup import cleanUp
 
 from Products.CMFCore.ActionInformation import ActionInformation
@@ -450,6 +451,11 @@
     def test_events(self):
         events = []
 
+        @adapter(IObjectCreatedEvent)
+        def _handleObjectCreated(event):
+            events.append(event)
+        provideHandler(_handleObjectCreated)
+
         @adapter(IObjectWillBeAddedEvent)
         def _handleObjectWillBeAdded(event):
             events.append(event)
@@ -466,9 +472,13 @@
         provideHandler(_handleContainerModified)
 
         self.ti.constructInstance(self.f, 'foo')
-        self.assertEquals(len(events), 2)
+        self.assertEquals(len(events), 3)
 
         evt = events[0]
+        self.failUnless(IObjectCreatedEvent.providedBy(evt))
+        self.assertEquals(evt.object, self.f.foo)
+
+        evt = events[1]
         self.failUnless(IObjectAddedEvent.providedBy(evt))
         self.assertEquals(evt.object, self.f.foo)
         self.assertEquals(evt.oldParent, None)
@@ -476,7 +486,7 @@
         self.assertEquals(evt.newParent, self.f)
         self.assertEquals(evt.newName, 'foo')
 
-        evt = events[1]
+        evt = events[2]
         self.failUnless(IContainerModifiedEvent.providedBy(evt))
         self.assertEquals(evt.object, self.f)
 
@@ -500,6 +510,11 @@
     def test_events(self):
         events = []
 
+        @adapter(IObjectCreatedEvent)
+        def _handleObjectCreated(event):
+            events.append(event)
+        provideHandler(_handleObjectCreated)
+
         @adapter(IObjectWillBeAddedEvent)
         def _handleObjectWillBeAdded(event):
             events.append(event)
@@ -516,9 +531,13 @@
         provideHandler(_handleContainerModified)
 
         self.ti.constructInstance(self.f, 'foo')
-        self.assertEquals(len(events), 3)
+        self.assertEquals(len(events), 4)
 
         evt = events[0]
+        self.failUnless(IObjectCreatedEvent.providedBy(evt))
+        self.assertEquals(evt.object, self.f.foo)
+
+        evt = events[1]
         self.failUnless(IObjectWillBeAddedEvent.providedBy(evt))
         self.assertEquals(evt.object, self.f.foo)
         self.assertEquals(evt.oldParent, None)
@@ -526,7 +545,7 @@
         self.assertEquals(evt.newParent, self.f)
         self.assertEquals(evt.newName, 'foo')
 
-        evt = events[1]
+        evt = events[2]
         self.failUnless(IObjectAddedEvent.providedBy(evt))
         self.assertEquals(evt.object, self.f.foo)
         self.assertEquals(evt.oldParent, None)
@@ -534,7 +553,7 @@
         self.assertEquals(evt.newParent, self.f)
         self.assertEquals(evt.newName, 'foo')
 
-        evt = events[2]
+        evt = events[3]
         self.failUnless(IContainerModifiedEvent.providedBy(evt))
         self.assertEquals(evt.object, self.f)
 



More information about the Checkins mailing list