MINI MINI MANI MO
σ
ΎΓ9Qc           @   sq   d  Z  d d g Z d e f d     YZ d e f d     YZ d e f d     YZ d e e f d     YZ d	 S(
   s[   This module contains variants of certain base types which call registered
hooks on changes.t   Hookablet   HookableSett   HookableTypec           B   s    e  Z d    Z e d    Z RS(   c         C   s½   | j  d  r§ y | d } WnY t k
 rx d  } xC t d   |  D]+ } | rk t d t |    qF | } qF Wn Xx+ | d D] } t j | |  | | <q Wn  t j	 |  | | |  S(   Nt   _hookable_change_methodst   _hookable_base_classc         S   s
   |  t  k S(   N(   R    (   t   x(    (    s6   /usr/lib/python2.7/site-packages/slip/util/hookable.pyt   <lambda>$   s    s   too many base classes: %s(
   t   has_keyt   KeyErrort   Nonet   filtert	   TypeErrort   strR   t   wrap_methodt   typet   __new__(   t   clst   namet   basest   dctt   baset   base_candidatet
   methodname(    (    s6   /usr/lib/python2.7/site-packages/slip/util/hookable.pyR      s    
c            s+   t  | |      f d   } | | _ | S(   Nc            s      |  | |  } |  j    | S(   N(   t
   _run_hooks(   t   selft   pt   kt   retval(   t   func(    s6   /usr/lib/python2.7/site-packages/slip/util/hookable.pyt
   methodwrapper4   s    
(   t   getattrt	   func_name(   R   R   R   R   (    (   R   s6   /usr/lib/python2.7/site-packages/slip/util/hookable.pyR
   0   s    	(   t   __name__t
   __module__R   t   classmethodR
   (    (    (    s6   /usr/lib/python2.7/site-packages/slip/util/hookable.pyR      s   	t
   _HookEntryc           B   s,   e  Z d    Z d   Z d   Z d   Z RS(   c         C   s   | |  _  | |  _ | |  _ d  S(   N(   t   _HookEntry__hookt   _HookEntry__argst   _HookEntry__kwargs(   R   t   hookt   argst   kwargs(    (    s6   /usr/lib/python2.7/site-packages/slip/util/hookable.pyt   __init__?   s    		c         C   s4   |  j  | j  k o3 |  j | j k o3 |  j | j k S(   N(   R$   R%   R&