
ä¾Tà  ã            	   @   s³   d  d l  Z  d d i d d i d d i d d	 i d
 d i d d i d d i d d i g Z Gd d „  d e ƒ Z Gd d „  d e ƒ Z Gd d „  d ƒ Z Gd d „  d e ƒ Z d S)é    NZWelcomeEventÚwelcomeZ	JoinEventÚjoinZ	PartEventÚpartÚMessageEventÚmessageZNoticeEventÚnoticeZShutdownEventZshutdownZ	KickEventZkickZCommandCalledEventÚcmdc                   s"   e  Z d  Z ‡  f d d †  Z ‡  S)Ú
HandlerSetc                s=   d d „  |  Dƒ } | | j  ƒ  k r- | | St ƒ  j | ƒ S)Nc             S   s   i  |  ] } | | j  “ q S© )Ú__name__)Ú.0Úfr
   r
   ú&/home/sam/code/Infobot/utils/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   r
   r
   )r   r   r	      s   r	   c               @   s4   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   sg   yJ t  |  | ƒ rE |  j j t |  | ƒ ƒ |  j t |  | ƒ ƒ d Sd SWn t k
 rb d SYn Xd  S)NTF)Úhasattrr   ÚaddÚgetattrÚdiscardÚBaseException)r   Úsr
   r
   r   Údisable   s    zAdvancedHandlerSet.disablec             C   sp   yS t  |  j | ƒ rN |  j t |  j | ƒ ƒ |  j j t |  j | ƒ ƒ d Sd SWn t k
 rk d SYn Xd  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   Útype_r
   r
   r   r   2   s    zEvent.__init__c             C   sB   t  |  j ƒ d k r3 d |  j j ƒ  j d ƒ d Sd |  j Sd  S)Né   zEvent(handlers=%s, ...}))z, r   zEvent(handlers=%s))Úlenr%   Ú__str__Úsplit)r   r
   r
   r   r*   6   s    zEvent.__str__c             C   s
   |  j  ƒ  S)N)r*   )r   r
   r
   r   Ú__repr__<   s    zEvent.__repr__c             C   s   |  j  j | ƒ |  S)z) Register a function as an event handler )r%   r   )r   Úhandlerr
   r
   r   Úregister?   s    zEvent.registerc             O   sÇ   | j  ƒ  } y` xY |  j D]N } t | d ƒ s> | | | Ž  q | j d |  j i ƒ | | | Ž  | } q WWnT t k
 rÂ } z4 t | ƒ t k r¦ |  j | | Ž  n
 t j	 ƒ  WYd d } ~ Xn Xd S)z Fire this event Z
_want_typer&   N)
Úcopyr%   r   Úupdater&   Ú	ExceptionÚRuntimeErrorÚfireÚ	tracebackÚ	print_exc)r   ÚargsÚkwargsÚ_kwargsr-   Úer
   r
   r   r3   D   s    z
Event.firec          
   C   s9   y |  j  j | ƒ Wn t d | | f ƒ ‚ Yn Xd 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   r-   r
   r
   r   ÚunhandleV   s
    zEvent.unhandleN)
r   r   r   Ú__doc__r   r*   r,   r.   r3   r<   r
   r
   r
   r   r$   0   s   r$   c                   s4   e  Z d  Z d Z ‡  f d d †  Z d d „  Z ‡  S)r;   z: EventError class - When something goes wrong in an event.c                s   t  ƒ  j | ƒ | |  _ d  S)N)r   r   Úvalue)r   r>   )r   r
   r   r   a   s    zEventError.__init__c             C   s   |  j  S)N)r>   )r   r
   r
   r   r*   e   s    zEventError.__str__)r   r   r   r=   r   r*   r
   r
   )r   r   r;   _   s   r;   )r4   ÚStandardÚsetr	   r   r$   r    r;   r
   r
   r
   r   Ú<module>   s   							/