[Checkins] SVN: z3c.indexing.dispatch/trunk/src/z3c/indexing/dispatch/events. Added event-handlers.

Malthe Borch mborch at gmail.com
Sun Mar 30 20:09:28 EDT 2008


Log message for revision 85025:
  Added event-handlers.

Changed:
  A   z3c.indexing.dispatch/trunk/src/z3c/indexing/dispatch/events.py
  A   z3c.indexing.dispatch/trunk/src/z3c/indexing/dispatch/events.zcml

-=-
Added: z3c.indexing.dispatch/trunk/src/z3c/indexing/dispatch/events.py
===================================================================
--- z3c.indexing.dispatch/trunk/src/z3c/indexing/dispatch/events.py	                        (rev 0)
+++ z3c.indexing.dispatch/trunk/src/z3c/indexing/dispatch/events.py	2008-03-31 00:09:27 UTC (rev 85025)
@@ -0,0 +1,63 @@
+from zope import component
+
+from zope.event import notify
+from zope.lifecycleevent import ObjectModifiedEvent, Attributes
+from zope.app.container.contained import dispatchToSublocations
+
+from interfaces import IDispatcher
+from interfaces import IIndexable
+
+def objectAdded(ev):
+    obj = ev.object
+    if not IIndexable.providedBy(obj):
+        return
+    
+    indexer = component.getUtility(IDispatcher)
+    indexer.index(obj)
+
+def objectModified(ev):
+    obj = ev.object
+    if not IIndexable.providedBy(obj):
+        return
+
+    indexer = component.getUtility(IDispatcher)
+    
+    if ev.descriptions:     # not used by archetypes/plone atm...
+        # build the list of to be updated attributes
+        attrs = []
+        for desc in ev.descriptions:
+            if isinstance(desc, Attributes):
+                attrs.extend(desc.attributes)
+        indexer.reindex(obj, attrs)
+        if 'allow' in attrs:    # dispatch to sublocations on security changes
+            dispatchToSublocations(obj, ev)
+    else:
+        # with no descriptions (of changed attributes) just reindex all
+        indexer.reindex(obj)
+
+def objectCopied(ev):
+    objectAdded(ev)
+
+def objectRemoved(ev):
+    obj = ev.object
+    if not IIndexable.providedBy(obj):
+        return
+
+    indexer = component.getUtility(IDispatcher)
+    indexer.unindex(obj)
+
+def objectMoved(ev):
+    obj = ev.object
+    if not IIndexable.providedBy(obj):
+        return
+
+    if ev.newParent is None or ev.oldParent is None:
+        # it's an IObjectRemovedEvent or IObjectAddedEvent
+        return
+
+    if ev.newParent is ev.oldParent:
+        # it's a renaming operation
+        dispatchToSublocations(obj, ev)
+    
+    indexer = component.getUtility(IDispatcher)
+    indexer.reindex(obj)

Added: z3c.indexing.dispatch/trunk/src/z3c/indexing/dispatch/events.zcml
===================================================================
--- z3c.indexing.dispatch/trunk/src/z3c/indexing/dispatch/events.zcml	                        (rev 0)
+++ z3c.indexing.dispatch/trunk/src/z3c/indexing/dispatch/events.zcml	2008-03-31 00:09:27 UTC (rev 85025)
@@ -0,0 +1,34 @@
+<configure
+    xmlns="http://namespaces.zope.org/zope">
+
+  <subscriber
+     handler=".events.objectAdded"
+     for="zope.app.event.interfaces.IObjectCreatedEvent"
+     trusted="y" />
+  
+  <subscriber
+     handler=".events.objectAdded"
+     for="zope.app.container.interfaces.IObjectAddedEvent"
+     trusted="y" />
+  
+  <subscriber
+     handler=".events.objectModified"
+     for="zope.app.event.interfaces.IObjectModifiedEvent"
+     trusted="y" />
+  
+  <subscriber
+     handler=".events.objectCopied"
+     for="zope.app.event.interfaces.IObjectCopiedEvent"
+     trusted="y" />
+  
+  <subscriber
+     handler=".events.objectRemoved"
+     for="zope.app.container.interfaces.IObjectRemovedEvent"
+     trusted="y" />
+  
+  <subscriber
+     handler=".events.objectMoved"
+     for="zope.app.container.interfaces.IObjectMovedEvent"
+     trusted="y" />
+
+</configure>



More information about the Checkins mailing list