Hi, On Wed, Mar 28, 2007 at 12:16:23PM +0200, Lorenzo Gil Sanchez wrote:
[snip] > But I'd like to avoid the if clause inside my subscriber function by > doing something similar to this: > > def intIdRemovedSubscriber(obj, event): > # do some stuff with obj, which is garanteed to provide IMyInterface > > <subscriber > handler=".intIdRemovedSubscriber" > for=".interfaces.IMyInterface > zope.app.intid.interfaces.IIntIdRemovedEvent" > /> [snip] > So the question is: why the intid package is succesful in registering a > subscriber only for ILocation objects and I can't do the same with > IMyInterface objects? > > I want to avoid a lot of calls to my subscriber which will happend > everytime an IntId is removed from *any* object. [snip] You need a dispatcher - a quite common concept in zope3: [events.py, not tested] from zope.event import notify def removeIntId(event): notify(event.object,event) def addIntId(event): notify(event.object,event) [configure.zcml, not tested] [...] <subscriber for="zope.app.intid.interfaces.IntIdAddedEvent" handler=".event.addIntId" /> <subscriber for="zope.app.intid.interfaces.IntIdRemovedEvent" handler=".events.removeIntId" /> [...] Thanks to zope3's component infrastructure, a package (like intid) doesn't have to provide the dispatcher - a different package providing the dispatcher is perfectly fine. Regards, Frank _______________________________________________ Zope3-users mailing list Zope3-users@zope.org http://mail.zope.org/mailman/listinfo/zope3-users