σ
H`ΎTc           @@  s΅   d  Z  d d l m Z d d l Z d d l Z d d l Z d d l m Z m Z e j	 e
  Z e j	 e
  Z d   Z d   Z d   Z d	   Z d
   Z d e f d     YZ d S(   sJ  Provides managed registration services on behalf of :func:`.listen`
arguments.

By "managed registration", we mean that event listening functions and
other objects can be added to various collections in such a way that their
membership in all those collections can be revoked at once, based on
an equivalent :class:`._EventKey`.

i    (   t   absolute_importNi   (   t   exct   utilc         C@  s}   t  s |  t  k r d  St  j |   } xP | j   D]B } | t k r3 t | } | j |   | su t j |  qu q3 q3 Wd  S(   N(   t   _collection_to_keyt   popt   valuest   _key_to_collection(   t   reft   listener_to_keyt   keyt   dispatch_reg(    (    s_   /var/www/send.findwatt.com/datamanager/lib/python2.7/site-packages/sqlalchemy/event/registry.pyt   _collection_gced3   s    
c         C@  s`   |  j  } t | } | j } t j |  j  } | | k r> t S| | | <t | } | | | <t S(   N(   t   _keyR   R   t   weakreft
   _listen_fnt   FalseR   t   True(   t	   event_keyt   ownerR	   R
   t	   owner_reft
   listen_refR   (    (    s_   /var/www/send.findwatt.com/datamanager/lib/python2.7/site-packages/sqlalchemy/event/registry.pyt   _stored_in_collectionA   s    	
	


c         C@  sx   |  j  } t | } t j |  j  } | j } | j | d   | sN t | =n  | t k rt t | } | j |  n  d  S(   N(   R   R   R   R   R   R   t   NoneR   (   R   R   R	   R
   R   R   R   (    (    s_   /var/www/send.findwatt.com/datamanager/lib/python2.7/site-packages/sqlalchemy/event/registry.pyt   _removed_from_collectionT   s    	
	

c   	      C@  s‘   | s
 d  S| j  } |  j  }  t | } t |  } xj | D]b } t j  |  } | | } t | } |  | k r | |  | k s t  n
 | | |  <| | | <q7 Wd  S(   N(   R   R   R   R   t   AssertionError(	   t   newownert   oldownert   elementst   old_listener_to_keyt   new_listener_to_keyt	   listen_fnR   R	   R
   (    (    s_   /var/www/send.findwatt.com/datamanager/lib/python2.7/site-packages/sqlalchemy/event/registry.pyt   _stored_in_collection_multie   s    		




c         C@  su   | s
 d  S|  j  }  t |  } xQ | D]I } t j  |  } | | } t | } | j |  d   | s$ t | =q$ q$ Wd  S(   N(   R   R   R   R   R   R   (   R   R   R   R   R   R	   R
   (    (    s_   /var/www/send.findwatt.com/datamanager/lib/python2.7/site-packages/sqlalchemy/event/registry.pyt   _clear{   s    	


t	   _EventKeyc           B@  s   e  Z d  Z d d  Z e d    Z d   Z d   Z d   Z	 d   Z
 d   Z e e e d  Z e d	    Z d
   Z d   Z d   Z RS(   s)   Represent :func:`.listen` arguments.
    c         C@  sv   | |  _  | |  _ | |  _ t | t j  rQ t | j  t | j  f |  _	 n t |  |  _	 | |  _
 | |  _ d  S(   N(   t   targett
   identifiert   fnt
   isinstancet   typest
   MethodTypet   idt   __func__t   __self__t   fn_keyt   fn_wrapt   dispatch_target(   t   selfR"   R#   R$   R-   t   _fn_wrap(    (    s_   /var/www/send.findwatt.com/datamanager/lib/python2.7/site-packages/sqlalchemy/event/registry.pyt   __init__   s    			$	c         C@  s   t  |  j  |  j |  j f S(   N(   R(   R"   R#   R+   (   R.   (    (    s_   /var/www/send.findwatt.com/datamanager/lib/python2.7/site-packages/sqlalchemy/event/registry.pyR      s    c         C@  s<   | |  j  k r |  St |  j |  j |  j |  j d | Sd  S(   NR/   (   R   R!   R"   R#   R$   R-   (   R.   R,   (    (    s_   /var/www/send.findwatt.com/datamanager/lib/python2.7/site-packages/sqlalchemy/event/registry.pyt   with_wrapper   s    	c         C@  s<   | |  j  k r |  St |  j |  j |  j | d |  j Sd  S(   NR/   (   R-   R!   R"   R#   R$   R,   (   R.   R-   (    (    s_   /var/www/send.findwatt.com/datamanager/lib/python2.7/site-packages/sqlalchemy/event/registry.pyt   with_dispatch_target«   s    c   
      O@  sΏ   | j  d t  } | j  d t  } |  j |  j |  j } } } t | j |  } | j | |  }	 |  j |	  }  | r’ |  j t	 j
 |  j   j | |   n |  j j j |  | |  d  S(   Nt   oncet   named(   R   R   R-   R#   R   t   getattrt   dispatcht   _adjust_fn_specR1   R   t	   only_oncet   listent   _listen(
   R.   t   argst   kwR3   R4   R"   R#   R$   t   dispatch_descriptort   adjusted_fn(    (    s_   /var/www/send.findwatt.com/datamanager/lib/python2.7/site-packages/sqlalchemy/event/registry.pyR9   ·   s    "c         C@  s°   |  j  } | t k r= t j d |  j |  j |  j f   n  t j |  } x] | j   D]O \ } } |   } |   } | d  k	 rY | d  k	 rY | j
 |  j |   qY qY Wd  S(   Ns*   No listeners found for event %s / %r / %s (   R   R   R   t   InvalidRequestErrorR"   R#   R$   R   t   itemsR   t   removeR1   (   R.   R	   R
   t   collection_reft   listener_reft
   collectiont   listener_fn(    (    s_   /var/www/send.findwatt.com/datamanager/lib/python2.7/site-packages/sqlalchemy/event/registry.pyRA   Κ   s    			c         C@  s   |  j  t k S(   s?   Return True if this event key is registered to listen.
        (   R   R   (   R.   (    (    s_   /var/www/send.findwatt.com/datamanager/lib/python2.7/site-packages/sqlalchemy/event/registry.pyt   containsΪ   s    c         C@  st   |  j  |  j |  j } } } t | j |  } | rT | j | j  j |  |  n | j | j  j |  |  d  S(   N(   R-   R#   R   R5   R6   t
   for_modifyt   insertt   append(   R.   t	   propagateRH   R4   R"   R#   R$   R=   (    (    s_   /var/www/send.findwatt.com/datamanager/lib/python2.7/site-packages/sqlalchemy/event/registry.pyt   base_listenί   s    c         C@  s   |  j  p |  j S(   N(   R,   R$   (   R.   (    (    s_   /var/www/send.findwatt.com/datamanager/lib/python2.7/site-packages/sqlalchemy/event/registry.pyR   ξ   s    c         C@  s+   t  |  |  r# | j |  j  t St Sd  S(   N(   R   RI   R   R   R   (   R.   R   t   list_(    (    s_   /var/www/send.findwatt.com/datamanager/lib/python2.7/site-packages/sqlalchemy/event/registry.pyt   append_to_listς   s    c         C@  s!   t  |  |  | j |  j  d  S(   N(   R   RA   R   (   R.   R   RL   (    (    s_   /var/www/send.findwatt.com/datamanager/lib/python2.7/site-packages/sqlalchemy/event/registry.pyt   remove_from_listω   s    c         C@  s.   t  |  |  r& | j d |  j  t St Sd  S(   Ni    (   R   RH   R   R   R   (   R.   R   RL   (    (    s_   /var/www/send.findwatt.com/datamanager/lib/python2.7/site-packages/sqlalchemy/event/registry.pyt   prepend_to_listύ   s    N(   t   __name__t
   __module__t   __doc__R   R0   t   propertyR   R1   R2   R9   RA   RF   R   RK   R   RM   RN   RO   (    (    (    s_   /var/www/send.findwatt.com/datamanager/lib/python2.7/site-packages/sqlalchemy/event/registry.pyR!      s   							(   RR   t
   __future__R    R   t   collectionsR&   t    R   R   t   defaultdictt   dictR   R   R   R   R   R   R    t   objectR!   (    (    (    s_   /var/www/send.findwatt.com/datamanager/lib/python2.7/site-packages/sqlalchemy/event/registry.pyt   <module>   s   					