B
    ÀÔ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ÚMessageZNoticeZShutdownÚKickZCommandCalledÚChannelModeÚQuitc                   s   e Zd Z‡ fdd„Z‡  ZS )Ú
HandlerSetc                s.   dd„ | D ƒ}||  ¡ kr"|| S tƒ  |¡S )Nc             S   s   i | ]}||j “qS © )Ú__name__)Ú.0Úfr   r   ú%/home/sam/code/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 t| |ƒ¡ |  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|  t| 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 ¡  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   r-   /   s    zEvent.__str__c             C   s   |   ¡ S )N)r-   )r   r   r   r   Ú__repr__5   s    zEvent.__repr__c             C   s   | j  |¡ | S )z) Register a function as an event handler )r)   r!   )r   Úhandlerr   r   r   Úregister8   s    zEvent.registerc          
   O   sš   |  ¡ }yHxB| jD ]8}t|dƒs,|||Ž q| d| ji¡ |||Ž |}qW W nD tk
r” } z&t|ƒtkr|| j||Ž nt 	¡  W dd}~X Y nX dS )z Fire this event Z
_want_typer*   N)
Úcopyr)   r    Úupdater*   Ú	ExceptionÚRuntimeErrorÚfireÚ	tracebackÚ	print_exc)r   ÚargsÚkwargsÚ_kwargsr0   Úer   r   r   r6   =   s    

z
Event.firec             C   s2   y| 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   r0   r   r   r   ÚunhandleO   s
    zEvent.unhandleN)
r   r   r   Ú__doc__r   r-   r/   r1   r6   r?   r   r   r   r   r(   )   s   r(   c                   s(   e Zd ZdZ‡ fdd„Zdd„ Z‡  ZS )r>   z: EventError class - When something goes wrong in an event.c                s   t ƒ  |¡ || _d S )N)r   r   Úvalue)r   rA   )r   r   r   r   Z   s    zEventError.__init__c             C   s   | j S )N)rA   )r   r   r   r   r-   ^   s    zEventError.__str__)r   r   r   r@   r   r-   r   r   r   )r   r   r>   X   s   r>   )r7   ÚStandardÚsetr   r   r(   r$   r>   r   r   r   r   Ú<module>   s
   /