3
´éx[‡  ã               @   sN   d dl Z dZG dd„ deƒZG dd„ deƒZG dd„ dƒZG dd„ deƒZdS )é    NÚWelcomeÚModeÚJoinÚPartÚNamesÚNamesEndÚMessageÚNoticeÚShutdownÚKickÚCommandCalledÚChannelModeÚQuitc                   s   e Zd Z‡ fdd„Z‡  ZS )Ú
HandlerSetc                s.   dd„ | D ƒ}||j ƒ kr"|| S tƒ j|ƒS )Nc             S   s   i | ]}||j “qS © )Ú__name__)Ú.0Úfr   r   ú/opt/Infobot/core/events.pyú
<dictcomp>	   s    z/HandlerSet.__getattribute__.<locals>.<dictcomp>)ÚkeysÚsuperÚ__getattribute__)ÚselfÚnameÚx)Ú	__class__r   r   r      s    zHandlerSet.__getattribute__)r   Ú
__module__Ú__qualname__r   Ú__classcell__r   r   )r   r   r      s   r   c               @   s$   e Zd Zdd„ Zdd„ Zdd„ ZdS )ÚAdvancedHandlerSetc             C   s   t ƒ | _d S )N)r   Údisabled_set)r   r   r   r   Ú__init__   s    zAdvancedHandlerSet.__init__c             C   sR   y8t | |ƒr2| jjt| |ƒƒ | jt| |ƒƒ dS dS W n tk
rL   dS X d S )NTF)Úhasattrr!   ÚaddÚgetattrÚdiscardÚBaseException)r   Úsr   r   r   Údisable   s    
zAdvancedHandlerSet.disablec             C   sX   y>t | j|ƒr8| jt| j|ƒƒ | jjt| j|ƒƒ dS dS W n tk
rR   dS X d S )NTF)r#   r!   r$   r%   r&   r'   )r   r(   r   r   r   Úenable   s    zAdvancedHandlerSet.enableN)r   r   r   r"   r)   r*   r   r   r   r   r       s   r    c               @   s@   e Zd ZdZdd„ Zdd„ Zdd„ Zdd	„ Zd
d„ Zdd„ Z	dS )ÚEventz A simple event class c             C   s   t ƒ | _|| _d S )N)r    ÚhandlersÚtype)r   Ztype_r   r   r   r"   +   s    zEvent.__init__c             C   s4   t | jƒdkr&d| jjƒ jdƒd  S d| j S d S )Né   zEvent(handlers=%s, ...}))z, r   zEvent(handlers=%s))Úlenr,   Ú__str__Úsplit)r   r   r   r   r0   /   s    zEvent.__str__c             C   s   | j ƒ S )N)r0   )r   r   r   r   Ú__repr__5   s    zEvent.__repr__c             C   s   | j j|ƒ | S )z) Register a function as an event handler )r,   r$   )r   Úhandlerr   r   r   Úregister8   s    zEvent.registerc             O   sš   |j ƒ }yHxB| jD ]8}t|dƒs,|||Ž q|jd| jiƒ |||Ž |}qW W nD tk
r” } z(t|ƒtkr|| j||Ž ntj	ƒ  W Y dd}~X nX dS )z Fire this event Z
_want_typer-   N)
Úcopyr,   r#   Úupdater-   Ú	ExceptionÚRuntimeErrorÚfireÚ	tracebackÚ	print_exc)r   ÚargsÚkwargsÚ_kwargsr3   Úer   r   r   r9   =   s    

z
Event.firec          
   C   s2   y| j j|ƒ W n   td||f ƒ‚Y nX dS )z@ De-register an event handler from this event. Throws EventErrorzTCan't unhandle handler %s:                 handler %s does not hook into this event!N)r,   ÚremoveÚ
EventError)r   r3   r   r   r   ÚunhandleO   s
    zEvent.unhandleN)
r   r   r   Ú__doc__r"   r0   r2   r4   r9   rB   r   r   r   r   r+   )   s   r+   c                   s(   e Zd ZdZ‡ fdd„Zdd„ Z‡  ZS )rA   z: EventError class - When something goes wrong in an event.c                s   t ƒ j|ƒ || _d S )N)r   r"   Úvalue)r   rD   )r   r   r   r"   Z   s    zEventError.__init__c             C   s   | j S )N)rD   )r   r   r   r   r0   ^   s    zEventError.__str__)r   r   r   rC   r"   r0   r   r   r   )r   r   rA   X   s   rA   )r   r   r   r   r   r   r   r	   r
   r   r   r   r   )r:   ÚStandardÚsetr   r    r+   r'   rA   r   r   r   r   Ú<module>   s     /