| Server IP : 176.32.38.42 / Your IP : 216.73.217.104 Web Server : LiteSpeed System : Linux ha006.mymail.zone 4.18.0-553.51.1.lve.1.el8.x86_64 #1 SMP Wed May 14 14:34:57 UTC 2025 x86_64 User : s1225329 ( 1835) PHP Version : 7.4.33 Disable Function : exec,system,passthru,shell_exec,proc_close,proc_open,dl,popen,show_source,posix_kill,posix_mkfifo,posix_getpwuid,posix_setpgid,posix_setsid,posix_setuid,posix_setgid,posix_seteuid,posix_setegid,posix_uname MySQL : OFF | cURL : ON | WGET : ON | Perl : ON | Python : ON | Sudo : OFF | Pkexec : OFF Directory : /usr/lib/python3.6/site-packages/zope/event/ |
Upload File : |
"""Class-based event handlers
A light-weight event-handler framework based on event classes.
Handlers are registered for event classes:
>>> import zope.event.classhandler
>>> class MyEvent(object):
... def __repr__(self):
... return self.__class__.__name__
>>> def handler1(event):
... print("handler1 %r" % event)
>>> zope.event.classhandler.handler(MyEvent, handler1)
Descriptor syntax:
>>> @zope.event.classhandler.handler(MyEvent)
... def handler2(event):
... print("handler2 %r" % event)
>>> class MySubEvent(MyEvent):
... pass
>>> @zope.event.classhandler.handler(MySubEvent)
... def handler3(event):
... print("handler3 %r" % event)
Subscribers are called in class method-resolution order, so only
new-style event classes are supported, and then by order of registry.
>>> import zope.event
>>> zope.event.notify(MySubEvent())
handler3 MySubEvent
handler1 MySubEvent
handler2 MySubEvent
"""
import zope.event
registry = {}
def handler(event_class, handler_=None, decorator=False):
"""Define an event handler for a (new-style) class.
This can be called with a class and a handler, or with just a
class and the result used as a handler decorator.
"""
if handler_ is None:
return lambda func: handler(event_class, func, True)
if not registry:
zope.event.subscribers.append(dispatch)
if event_class not in registry:
registry[event_class] = [handler_]
else:
registry[event_class].append(handler_)
if decorator:
return handler
def dispatch(event):
for event_class in event.__class__.__mro__:
for handler in registry.get(event_class, ()):
handler(event)