[Zope3-dev] Heads up: major event changes
Jim Fulton
jim at zope.com
Thu May 27 05:44:54 EDT 2004
This morning I'll be checking in a major simplification of Zope 3's event
system, http://dev.zope.org/Zope/SimplifyEventSystem.
The major change for application developers:
1. Any object can be an event
2. You publish events like this:
from zope.event import notify
...
notify(event)
Calling zope.app.event.publish still works, but generates a
deprecation warning.
3. Event handlers are now defined as functions. For example, before:
from datetime import datetime
from zope.app.dublincore.interfaces import IZopeDublinCore
from zope.app.event.interfaces import ISubscriber
from zope.interface import implements
class DCTimeAnnotatorBase:
"""Update Dublin-Core time property
"""
implements(ISubscriber)
def notify(self, event):
dc = IZopeDublinCore(event.object, None)
if dc is not None:
self.annotate(dc)
def annotate(self, dc):
raise RuntimeError, 'annotate not implemented'
class ModifiedAnnotatorClass(DCTimeAnnotatorBase):
"""Updates DC modified when an object is modified."""
def annotate(self, dc):
dc.modified = datetime.utcnow()
class CreatedAnnotatorClass(DCTimeAnnotatorBase):
"""Sets DC created and modified when an object is created."""
def annotate(self, dc):
now = datetime.utcnow()
dc.created = now
dc.modified = now
ModifiedAnnotator = ModifiedAnnotatorClass()
CreatedAnnotator = CreatedAnnotatorClass()
After:
from datetime import datetime
from zope.app.dublincore.interfaces import IZopeDublinCore
def ModifiedAnnotator(event):
dc = IZopeDublinCore(event.object, None)
if dc is not None:
dc.modified = datetime.utcnow()
def CreatedAnnotator(event):
dc = IZopeDublinCore(event.object, None)
if dc is not None:
now = datetime.utcnow()
dc.created = now
dc.modified = now
:)
Handlers are also registered differently in ZCML. There are no longer
event:subscriber directives. Rather, subscriber directoves from the zope
namespace are used, as in:
<subscriber
for="zope.app.event.interfaces.IObjectModifiedEvent"
factory=".timeannotators.ModifiedAnnotator"
/>
<subscriber
for="zope.app.event.interfaces.IObjectCreatedEvent"
factory=".timeannotators.CreatedAnnotator"
/>
Jim
--
Jim Fulton mailto:jim at zope.com Python Powered!
CTO (540) 361-1714 http://www.python.org
Zope Corporation http://www.zope.com http://www.zope.org
More information about the Zope3-dev
mailing list