[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