
(ƒÄV÷  ã               @   s:   d  Z  d d l Z i  Z d d d d „ Z d d „  Z d S)aõ  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

é    NFc                sp   | d k r ‡  f d d †  St  s5 t j j j t ƒ ˆ  t  k rQ | g t  ˆ  <n t  ˆ  j | ƒ | rl t Sd S)z®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.
    Nc                s   t  ˆ  |  d ƒ S)NT)Úhandler)Úfunc)Úevent_class© ú9/usr/lib/python3/dist-packages/zope/event/classhandler.pyÚ<lambda>6   s    zhandler.<locals>.<lambda>)ÚregistryÚzopeÚeventZsubscribersÚappendÚdispatchr   )r   Zhandler_Z	decoratorr   )r   r   r   /   s    r   c             C   sB   x; |  j  j D]- } x$ t j | f  ƒ D] } | |  ƒ q& Wq Wd  S)N)Ú	__class__Ú__mro__r   Úget)r
   r   r   r   r   r   r   C   s    r   )Ú__doc__Z
zope.eventr	   r   r   r   r   r   r   r   Ú<module>*   s   