σ
H`ΎTc           @@  s	  d  Z  d d l m Z d d l m Z d d l m Z m Z m Z e j	 e
  Z d   Z d e f d	     YZ d
 e f d     YZ d   Z d e f d     YZ d   Z d   Z d e j e e  f d     YZ d e f d     YZ d e f d     YZ d S(   s΅  Base implementation classes.

The public-facing ``Events`` serves as the base class for an event interface;
its public attributes represent different kinds of events.   These attributes
are mirrored onto a ``_Dispatch`` class, which serves as a container for
collections of listener functions.   These collections are represented both
at the class level of a particular ``_Dispatch`` class as well as within
instances of ``_Dispatch``.

i    (   t   absolute_importi   (   t   utili   (   t   _JoinedDispatchDescriptort   _EmptyListenert   _DispatchDescriptorc         C@  s   |  j  d  o |  d k S(   Nt   _t   dispatch(   t
   startswith(   t   name(    (    s[   /var/www/send.findwatt.com/datamanager/lib/python2.7/site-packages/sqlalchemy/event/base.pyt   _is_event_name   s    t   _UnpickleDispatchc           B@  s   e  Z d  Z d   Z RS(   s   Serializable callable that re-generates an instance of
    :class:`_Dispatch` given a particular :class:`.Events` subclass.

    c         C@  sG   x@ | j  D]) } d | j k r
 | j d j |  Sq
 Wt d   d  S(   NR   s*   No class with a 'dispatch' member present.(   t   __mro__t   __dict__t   dispatch_clst   AttributeError(   t   selft   _parent_clst   cls(    (    s[   /var/www/send.findwatt.com/datamanager/lib/python2.7/site-packages/sqlalchemy/event/base.pyt   __call__%   s    (   t   __name__t
   __module__t   __doc__R   (    (    (    s[   /var/www/send.findwatt.com/datamanager/lib/python2.7/site-packages/sqlalchemy/event/base.pyR
      s   t	   _Dispatchc           B@  s_   e  Z d  Z d Z d   Z e j d    Z d   Z	 d   Z
 e d  Z e j d    Z RS(   s;  Mirror the event listening definitions of an Events class with
    listener collections.

    Classes which define a "dispatch" member will return a
    non-instantiated :class:`._Dispatch` subclass when the member
    is accessed at the class level.  When the "dispatch" member is
    accessed at the instance level of its owner, an instance
    of the :class:`._Dispatch` class is returned.

    A :class:`._Dispatch` class is generated for each :class:`.Events`
    class defined, by the :func:`._create_dispatcher_class` function.
    The original :class:`.Events` classes remain untouched.
    This decouples the construction of :class:`.Events` subclasses from
    the implementation used by the event internals, and allows
    inspecting tools like Sphinx to work in an unsurprising
    way against the public API.

    c         C@  s   | |  _  d  S(   N(   R   (   R   R   (    (    s[   /var/www/send.findwatt.com/datamanager/lib/python2.7/site-packages/sqlalchemy/event/base.pyt   __init__E   s    c         C@  s
   |  j  j S(   N(   t   _eventst   _listen(   R   (    (    s[   /var/www/send.findwatt.com/datamanager/lib/python2.7/site-packages/sqlalchemy/event/base.pyR   H   s    c         C@  s   d |  j  j k ry t d |  j  j t |  j  f i   } x0 t |   D]" } t | | j t | j   qD W| |  j  _	 n  |  j	 |  |  S(   s‘   Create a 'join' of this :class:`._Dispatch` and another.

        This new dispatcher will dispatch events to both
        :class:`._Dispatch` objects.

        t   _joined_dispatch_clss   Joined%s(
   t	   __class__R   t   typeR   t   _JoinedDispatchert   _event_descriptorst   setattrR   R   R   (   R   t   otherR   t   ls(    (    s[   /var/www/send.findwatt.com/datamanager/lib/python2.7/site-packages/sqlalchemy/event/base.pyt   _joinL   s     c         C@  s   t    |  j f f S(   N(   R
   R   (   R   (    (    s[   /var/www/send.findwatt.com/datamanager/lib/python2.7/site-packages/sqlalchemy/event/base.pyt
   __reduce__^   s    c         C@  sX   xQ t  |  D]C } t | t  r( q n  t |  | j  j |   j | d | q Wd S(   sM   Populate from the listeners in another :class:`_Dispatch`
            object.t   only_propagateN(   R   t
   isinstanceR   t   getattrR   t
   for_modifyt   _update(   R   R    R$   R!   (    (    s[   /var/www/send.findwatt.com/datamanager/lib/python2.7/site-packages/sqlalchemy/event/base.pyR(   a   s
    c         C@  sF   x? t  |   D]1 } t |  r t |  |  j |   j   q q Wd  S(   N(   t   dirR	   R&   R'   t   clear(   R   t   attr(    (    s[   /var/www/send.findwatt.com/datamanager/lib/python2.7/site-packages/sqlalchemy/event/base.pyt   _cleark   s    N(   R   R   R   t   NoneR   R   R   t   classpropertyR   R"   R#   t   TrueR(   t   hybridmethodR,   (    (    (    s[   /var/www/send.findwatt.com/datamanager/lib/python2.7/site-packages/sqlalchemy/event/base.pyR   -   s   			
c         C@  s2   g  t  |   D]! } t |  r t |  |  ^ q S(   N(   R)   R	   R&   (   t   targett   k(    (    s[   /var/www/send.findwatt.com/datamanager/lib/python2.7/site-packages/sqlalchemy/event/base.pyR   r   s    t
   _EventMetac           B@  s   e  Z d  Z d   Z RS(   sK   Intercept new Event subclasses and create
    associated _Dispatch classes.c         C@  s)   t  |  | | |  t j |  | | |  S(   N(   t   _create_dispatcher_classR   R   (   R   t	   classnamet   basest   dict_(    (    s[   /var/www/send.findwatt.com/datamanager/lib/python2.7/site-packages/sqlalchemy/event/base.pyR   z   s    (   R   R   R   R   (    (    (    s[   /var/www/send.findwatt.com/datamanager/lib/python2.7/site-packages/sqlalchemy/event/base.pyR3   v   s   c         C@  s΄   t  |  d t  } t d | | f i   } |  j |  |  xK | D]C } t |  rB t | | t |  | |   t | j |   qB qB Wt  |  d d  r° t
 |   |  j _ n  d S(   sR   Create a :class:`._Dispatch` class corresponding to an
    :class:`.Events` class.R   s
   %sDispatcht   _dispatch_targetN(   R&   R   R   t   _set_dispatchR	   R   R   t   _registrarst   appendR-   t
   dispatcherR8   R   (   R   R5   R6   R7   t   dispatch_baseR   R2   (    (    s[   /var/www/send.findwatt.com/datamanager/lib/python2.7/site-packages/sqlalchemy/event/base.pyR4      s    
c         C@  sO   xH t  |   D]: } t |  r t | j |   t | sG t | =qG q q Wd  S(   N(   R)   R	   R:   t   remove(   R   R2   (    (    s[   /var/www/send.findwatt.com/datamanager/lib/python2.7/site-packages/sqlalchemy/event/base.pyt   _remove_dispatcher   s
    
t   Eventsc           B@  sb   e  Z d  Z e d    Z e d    Z e e e e d   Z e d    Z	 e d    Z
 RS(   s>   Define event listening functions for a particular target type.c         C@  s   | |  _  |  | _ d  S(   N(   R   R   (   R   R   (    (    s[   /var/www/send.findwatt.com/datamanager/lib/python2.7/site-packages/sqlalchemy/event/base.pyR9      s    	c         C@  sW   t  | d  rO t | j |  j  sK t | j t  rO t | j |  j  rO | Sd  Sd  S(   NR   (   t   hasattrR%   R   R   t
   issubclassR-   (   R   R1   (    (    s[   /var/www/send.findwatt.com/datamanager/lib/python2.7/site-packages/sqlalchemy/event/base.pyt   _accept_with©   s    c         C@  s    | j  d | d | d |  d  S(   Nt	   propagatet   insertt   named(   t   base_listen(   R   t	   event_keyRD   RE   RF   (    (    s[   /var/www/send.findwatt.com/datamanager/lib/python2.7/site-packages/sqlalchemy/event/base.pyR   Ά   s    c         C@  s   | j    d  S(   N(   R>   (   R   RH   (    (    s[   /var/www/send.findwatt.com/datamanager/lib/python2.7/site-packages/sqlalchemy/event/base.pyt   _removeΊ   s    c         C@  s   |  j  j   d  S(   N(   R   R,   (   R   (    (    s[   /var/www/send.findwatt.com/datamanager/lib/python2.7/site-packages/sqlalchemy/event/base.pyR,   Ύ   s    (   R   R   R   t   staticmethodR9   t   classmethodRC   t   FalseR   RI   R,   (    (    (    s[   /var/www/send.findwatt.com/datamanager/lib/python2.7/site-packages/sqlalchemy/event/base.pyR@      s   
R   c           B@  s   e  Z d  Z d   Z RS(   s5   Represent a connection between two _Dispatch objects.c         C@  s"   | |  _  | |  _ | j |  _ d  S(   N(   t   localt   parentR   (   R   RM   RN   (    (    s[   /var/www/send.findwatt.com/datamanager/lib/python2.7/site-packages/sqlalchemy/event/base.pyR   Ζ   s    		(   R   R   R   R   (    (    (    s[   /var/www/send.findwatt.com/datamanager/lib/python2.7/site-packages/sqlalchemy/event/base.pyR   Γ   s   R<   c           B@  s    e  Z d  Z d   Z d   Z RS(   s   Descriptor used by target classes to
    deliver the _Dispatch class at the class level
    and produce new _Dispatch instances for target
    instances.

    c         C@  s   | j  |  _ | |  _ d  S(   N(   R   R   t   events(   R   RO   (    (    s[   /var/www/send.findwatt.com/datamanager/lib/python2.7/site-packages/sqlalchemy/event/base.pyR   Τ   s    c         C@  s1   | d  k r |  j S|  j |  | j d <} | S(   NR   (   R-   R   R   (   R   t   objR   t   disp(    (    s[   /var/www/send.findwatt.com/datamanager/lib/python2.7/site-packages/sqlalchemy/event/base.pyt   __get__Ψ   s    (   R   R   R   R   RR   (    (    (    s[   /var/www/send.findwatt.com/datamanager/lib/python2.7/site-packages/sqlalchemy/event/base.pyR<   Μ   s   	N(   R   t
   __future__R    t    R   R+   R   R   R   t   defaultdictt   listR:   R	   t   objectR
   R   R   R   R3   R4   R?   t   with_metaclassR@   R   R<   (    (    (    s[   /var/www/send.findwatt.com/datamanager/lib/python2.7/site-packages/sqlalchemy/event/base.pyt   <module>   s   	E				"'	