
H`Tc           @   s   d  Z  d d l m Z m Z m Z d d l m Z m Z m Z m Z m Z	 d d l
 m Z m Z m Z d e f d     YZ d e f d	     YZ d
 e f d     YZ d e f d     YZ d e f d     YZ i e e 6e e 6e e 6Z d S(   s   Relationship dependencies.

i   (   t   sqlt   utilt   exci   (   t
   attributesR   t   synct
   unitofworkR   (   t	   ONETOMANYt	   MANYTOONEt
   MANYTOMANYt   DependencyProcessorc           B   s   e  Z d    Z e d    Z d   Z d   Z d   Z d   Z d   Z	 d   Z
 d   Z d	   Z d
   Z d   Z d   Z d   Z d   Z d   Z d   Z RS(   c         C   s   | |  _  | j |  _ | j |  _ | j |  _ | j |  _ | j |  _ | j |  _ | j |  _ | j |  _ | j	 |  _	 |  j r t
 j |  _ n t
 j |  _ |  j r t
 j |  _ n t
 j |  _ | j |  _ |  j  j s t j d |  j    n  d  S(   Ns|   Can't build a DependencyProcessor for relationship %s. No target attributes to populate between parent and child are present(   t   propt   cascadet   mappert   parentt	   secondaryt	   directiont   post_updatet   passive_deletest   passive_updatest   enable_typechecksR   t   PASSIVE_NO_INITIALIZEt   _passive_delete_flagt   PASSIVE_OFFt   _passive_update_flagt   keyt   synchronize_pairst   sa_exct   ArgumentError(   t   selfR
   (    (    s_   /var/www/send.findwatt.com/datamanager/lib/python2.7/site-packages/sqlalchemy/orm/dependency.pyt   __init__   s*    			c         C   s   t  | j |  S(   N(   t   _direction_to_processorR   (   t   clsR
   (    (    s_   /var/www/send.findwatt.com/datamanager/lib/python2.7/site-packages/sqlalchemy/orm/dependency.pyt   from_relationship/   s    c         C   s   |  j  j j |  j  j |  S(   s   return True if the given object instance has a parent,
        according to the ``InstrumentedAttribute`` handled by this
        ``DependencyProcessor``.

        (   R   t   class_managert   get_implR   t	   hasparent(   R   t   state(    (    s_   /var/www/send.findwatt.com/datamanager/lib/python2.7/site-packages/sqlalchemy/orm/dependency.pyR#   3   s    c         C   s   | j  |  t  d S(   s   establish actions and dependencies related to a flush.

        These actions will operate on all relevant states in
        the aggregate.

        N(   t   register_preprocessort   True(   R   t   uow(    (    s_   /var/www/send.findwatt.com/datamanager/lib/python2.7/site-packages/sqlalchemy/orm/dependency.pyt   per_property_preprocessors;   s    c         C   s   t  j | |  t t  } t  j | |  t t  } t  j | |  j j  } t  j | |  j j  } t  j | |  j j  } t  j | |  j j  } |  j	 | | | | | | |  d  S(   N(
   R   t
   ProcessAllt   FalseR&   t   SaveUpdateAllR   t   primary_base_mapperR   t	   DeleteAllt   per_property_dependencies(   R   R'   t
   after_savet   before_deletet   parent_savest   child_savest   parent_deletest   child_deletes(    (    s_   /var/www/send.findwatt.com/datamanager/lib/python2.7/site-packages/sqlalchemy/orm/dependency.pyt   per_property_flush_actionsD   s*    	c         C   s  |  j  j } |  j j } t j | |  } t j | |  } | rf t j | |  t t  } t | _ n! t j | |  t	 t  }	 t |	 _ | | j
 k r | | j
 k s t  | t	 f | t f g }
 t	 } n t } | st j | |  j  j  } d } } | | j
 k rOt } qOn: t j | |  j  j  } d } }	 | | j
 k rOt } n  x| D]} | j |  j j j | | j | r|  j n t j  } | sqVn  | rt j | |  t |  } | rt j | | |  } qn6 t j | |  t	 |  }	 | rt j | | |  } n  | rg  }
 x | D] \ } } | | j k rKd } nR | j | \ } } | rt j | | |  t f } n t j | | |  t	 f } |
 j |  q'Wn  x6 |
 D]. \ } } |  j | | | | |	 | | |  qWqVWd S(   s   establish actions and dependencies related to a flush.

        These actions will operate on all relevant states
        individually.    This occurs only if there are cycles
        in the 'aggregated' version of events.

        N(   NN(   R   R,   R   R   R+   R-   R)   R&   t   disabledR*   t   cyclest   AssertionErrort   base_mappert   Nonet   managerR   t   implt   get_all_pendingt   dictR   R   R   t   ProcessStatet   DeleteStatet   SaveUpdateStatet   statest   appendt   per_state_dependencies(   R   R'   RB   t   isdeletet   parent_base_mappert   child_base_mapperR2   R4   R0   R/   t   child_actionst   child_in_cyclesR1   R3   t   parent_in_cyclesR$   t   sum_t   child_statet   childt   child_actiont   deletedt   listonlyt   childisdelete(    (    s_   /var/www/send.findwatt.com/datamanager/lib/python2.7/site-packages/sqlalchemy/orm/dependency.pyt   per_state_flush_actionsc   s    			

					c         C   s   t  S(   N(   R*   (   R   t	   uowcommitRB   (    (    s_   /var/www/send.findwatt.com/datamanager/lib/python2.7/site-packages/sqlalchemy/orm/dependency.pyt   presort_deletes   s    c         C   s   t  S(   N(   R*   (   R   RS   RB   (    (    s_   /var/www/send.findwatt.com/datamanager/lib/python2.7/site-packages/sqlalchemy/orm/dependency.pyt   presort_saves   s    c         C   s   d  S(   N(    (   R   RS   RB   (    (    s_   /var/www/send.findwatt.com/datamanager/lib/python2.7/site-packages/sqlalchemy/orm/dependency.pyt   process_deletes   s    c         C   s   d  S(   N(    (   R   RS   RB   (    (    s_   /var/www/send.findwatt.com/datamanager/lib/python2.7/site-packages/sqlalchemy/orm/dependency.pyt   process_saves   s    c         C   s   | s |  j  r t j } n$ |  j t k r7 t j } n	 t j } x` | D]5 } | j | |  j |  } | rG | j	   rG t
 SqG W| o |  j j o |  j | j k Sd  S(   N(   R   R   R   R   R   t   PASSIVE_NO_FETCH_RELATEDR   t   get_attribute_historyR   t   emptyR&   R
   t   _is_self_referentialR   t   mappers(   R   RS   RB   RE   t   passivet   st   history(    (    s_   /var/www/send.findwatt.com/datamanager/lib/python2.7/site-packages/sqlalchemy/orm/dependency.pyt   prop_has_changes   s    		c         C   s   |  j  j r4 | d  k r4 t j d |  j  f   n | d  k	 r |  j j | d |  j r |  j j | d t r t j d i | j	 d 6|  j  d 6|  j j	 d 6|  j d 6  q t j d i | j	 d 6|  j  d 6|  j j	 d 6  n  d  S(	   Ns-   Can't flush None value found in collection %st   allow_subtypessE  Attempting to flush an item of type %(x)s as a member of collection "%(y)s". Expected an object of type %(z)s or a polymorphic subclass of this type. If %(x)s is a subclass of %(z)s, configure mapper "%(zm)s" to load this subtype polymorphically, or set enable_typechecks=False to allow any subtype to be accepted for flush. t   xt   yt   zt   zms   Attempting to flush an item of type %(x)s as a member of collection "%(y)s". Expected an object of type %(z)s or a polymorphic subclass of this type.(
   R
   t   uselistR:   R   t
   FlushErrorR   t   _canloadR   R&   t   class_(   R   R$   (    (    s_   /var/www/send.findwatt.com/datamanager/lib/python2.7/site-packages/sqlalchemy/orm/dependency.pyt   _verify_canload   s(    			



c         C   s   t     d  S(   N(   t   NotImplementedError(   R   R$   RM   t   associationrowt	   clearkeysRS   (    (    s_   /var/www/send.findwatt.com/datamanager/lib/python2.7/site-packages/sqlalchemy/orm/dependency.pyt   _synchronize!  s    c         C   s^   |  j  j s d  St t |  j g g  |  j  j D] } | j ^ q,   } | j d | f t  S(   Nt   reverse_key(   R
   t   _reverse_propertyR:   t   tuplet   sortedR   t   memot   set(   R   R'   t   pt   process_key(    (    s_   /var/www/send.findwatt.com/datamanager/lib/python2.7/site-packages/sqlalchemy/orm/dependency.pyt   _get_reversed_processed_set%  s    	)	c         C   sT   xM | D]E } | d  k	 r | j | g  |  j j D] \ } } | ^ q/  Pq q Wd  S(   N(   R:   t   issue_post_updateR
   R   (   R   R$   RS   t   relatedRb   t   lt   r(    (    s_   /var/www/send.findwatt.com/datamanager/lib/python2.7/site-packages/sqlalchemy/orm/dependency.pyt   _post_update2  s    &c         C   s   t     d  S(   N(   Rk   (   R   RS   R$   (    (    s_   /var/www/send.findwatt.com/datamanager/lib/python2.7/site-packages/sqlalchemy/orm/dependency.pyt   _pks_changed;  s    c         C   s   d |  j  j |  j f S(   Ns   %s(%s)(   t	   __class__t   __name__R
   (   R   (    (    s_   /var/www/send.findwatt.com/datamanager/lib/python2.7/site-packages/sqlalchemy/orm/dependency.pyt   __repr__>  s    (   R   t
   __module__R   t   classmethodR    R#   R(   R5   RR   RT   RU   RV   RW   R`   Rj   Rn   Rw   R|   R}   R   (    (    (    s_   /var/www/send.findwatt.com/datamanager/lib/python2.7/site-packages/sqlalchemy/orm/dependency.pyR	      s"   						w						$					t   OneToManyDPc           B   sP   e  Z d    Z d   Z d   Z d   Z d   Z d   Z d   Z d   Z	 RS(   c   
   	   C   s   |  j  r t j | |  j j t  } t j | |  j j t  }	 | j j | | f | | f | | f | |	 f |	 | f |	 | f g  nO | j j | | f | | f | | f | | f | | f | | f | | f g  d  S(   N(	   R   R   t   IssuePostUpdateR   R,   R*   R&   t   dependenciest   update(
   R   R'   R1   R2   R3   R4   R/   R0   t   child_post_updatest   child_pre_updates(    (    s_   /var/www/send.findwatt.com/datamanager/lib/python2.7/site-packages/sqlalchemy/orm/dependency.pyR.   D  s0    																		c	         C   sH  |  j  r t j | |  j j t  }	 t j | |  j j t  }
 | s | rp | j j | | f | |	 f g  q | j j | | f | | f | |	 f g  qD| r | j j | |
 f |
 | f g  qD| j j | |
 f |
 | f g  nV | s"| j j | | f | | f | | f g  n" | j j | | f | | f g  d  S(   N(	   R   R   R   R   R,   R*   R&   R   R   (   R   R'   t   save_parentt   delete_parentRN   R/   R0   RE   RQ   R   R   (    (    s_   /var/www/send.findwatt.com/datamanager/lib/python2.7/site-packages/sqlalchemy/orm/dependency.pyRD   l  sB    																			c      	   C   s  |  j  j o |  j d k } x | D] } | j | |  j |  j  } | r$ xd | j D]Y } | d  k	 rU |  j |  t	 k rU |  j  j
 r | j | d t q | j |  qU qU W| r x? | j D]1 } | d  k	 r | j | d d d |  j q q Wq q$ q$ Wd  S(   Nt   allRE   t	   operationt   deleteR
   (   R   R   R   RY   R   R   RO   R:   R#   R*   t   delete_orphant   register_objectR&   t	   unchangedR
   (   R   RS   RB   t   should_null_fksR$   R_   RM   (    (    s_   /var/www/send.findwatt.com/datamanager/lib/python2.7/site-packages/sqlalchemy/orm/dependency.pyRT     s$    !c         C   s  | j  d |  f t  } x| D]} |  j | |  } | sG |  j rS t j } n	 t j } | j | |  j |  } | rxB | j	 D]7 } | d  k	 r | j | d t d d d |  j q q W| j | j	  x | j D] } |  j j s| j | d t d d d |  j q |  j |  t k r | j | d t d d d |  j x? |  j j d |  D]% \ }	 }
 } } | j | d t q]Wq q Wn  | r | rxH | j D]: } | d  k	 r| j | t |  j d d d |  j qqWqq q Wd  S(	   Nt   children_addedt   cancel_deleteR   t   addR
   RE   R   s	   pk change(   Rs   Rt   R}   R   R   R   R   RY   R   t   addedR:   R   R&   R
   R   RO   R   R   R*   R#   R   t   cascade_iteratorR   (   R   RS   RB   R   R$   t   pks_changedR]   R_   RM   t   ct   mt   st_t   dct_(    (    s_   /var/www/send.findwatt.com/datamanager/lib/python2.7/site-packages/sqlalchemy/orm/dependency.pyRU     sR    			c         C   sx  |  j  s |  j d k rt| j d |  f t  } x@| D]5} | j | |  j |  j  } | r8 xy | j D]n } | d  k	 ri |  j	 |  t
 k ri |  j | | d  t | t
  |  j  r | r |  j | | | g  q qi qi W|  j  s |  j j rmxv t | j  j |  D]Y } | d  k	 r
|  j | | d  t | t
  |  j  rc| rc|  j | | | g  qcq
q
Wqmq8 q8 Wn  d  S(   NR   R   (   R   R   Rs   Rt   RY   R   R   RO   R:   R#   R*   Rn   R&   R|   R   R   R   t
   difference(   R   RS   RB   R   R$   R_   RM   (    (    s_   /var/www/send.findwatt.com/datamanager/lib/python2.7/site-packages/sqlalchemy/orm/dependency.pyRV     s>    
 
	c      
   C   s,  x%| D]} | j  | |  j t j  } | r x[ | j D]P } |  j | | d  t | t  | d  k	 r8 |  j r8 |  j	 | | | g  q8 q8 WxM | j
 D]B } |  j j r |  j |  r |  j | | d  t | t  q q W|  j | |  r$x0 | j D]" } |  j | | d  t | t  q Wq$q q Wd  S(   N(   RY   R   R   R   R   Rn   R:   R*   R   R|   RO   R   R   R#   R&   R}   R   (   R   RS   RB   R$   R_   RM   (    (    s_   /var/www/send.findwatt.com/datamanager/lib/python2.7/site-packages/sqlalchemy/orm/dependency.pyRW     s(    c   	      C   s   | } | } |  j  |  | d  k s> |  j rB | j |  rB d  S| rg t j | |  j |  j j  n4 t j	 | |  j
 | |  j |  j j | |  j o |  d  S(   N(   Rj   R:   R   t
   is_deletedR   t   clearR   R
   R   t   populateR   R   (	   R   R$   RM   Rl   Rm   RS   R   t   sourcet   dest(    (    s_   /var/www/send.findwatt.com/datamanager/lib/python2.7/site-packages/sqlalchemy/orm/dependency.pyRn   5  s    c         C   s   t  j | | |  j |  j j  S(   N(   R   t   source_modifiedR   R
   R   (   R   RS   R$   (    (    s_   /var/www/send.findwatt.com/datamanager/lib/python2.7/site-packages/sqlalchemy/orm/dependency.pyR}   E  s
    (
   R   R   R.   RD   RT   RU   RV   RW   Rn   R}   (    (    (    s_   /var/www/send.findwatt.com/datamanager/lib/python2.7/site-packages/sqlalchemy/orm/dependency.pyR   B  s   	(	7		2	.		t   ManyToOneDPc           B   sS   e  Z d    Z d   Z d   Z d   Z d   Z d   Z d   Z d d  Z
 RS(	   c         C   s-   t  j |  |  |  j j j t |   d  S(   N(   R	   R   R   t   _dependency_processorsRC   t   DetectKeySwitch(   R   R
   (    (    s_   /var/www/send.findwatt.com/datamanager/lib/python2.7/site-packages/sqlalchemy/orm/dependency.pyR   N  s    c   
      C   s   |  j  r t j | |  j j t  } t j | |  j j t  }	 | j j | | f | | f | | f | |	 f | |	 f |	 | f g  n4 | j j | | f | | f | | f | | f g  d  S(   N(	   R   R   R   R   R,   R*   R&   R   R   (
   R   R'   R1   R2   R3   R4   R/   R0   t   parent_post_updatest   parent_pre_updates(    (    s_   /var/www/send.findwatt.com/datamanager/lib/python2.7/site-packages/sqlalchemy/orm/dependency.pyR.   R  s*    															c	         C   s?  |  j  r | s t j | |  j j t  }	 | rU | j j | |	 f |	 | f g  q | j j | | f | | f | |	 f g  q;t j | |  j j t  }
 | j j | |
 f |
 | f |
 | f g  no | s| s | j j | | f | | f g  q;| j j | | f g  n" | r;| j j | | f g  n  d  S(   N(	   R   R   R   R   R,   R*   R   R   R&   (   R   R'   R   R   RN   R/   R0   RE   RQ   R   R   (    (    s_   /var/www/send.findwatt.com/datamanager/lib/python2.7/site-packages/sqlalchemy/orm/dependency.pyRD   v  s@    																	c         C   s  |  j  j s |  j  j rx | D] } | j | |  j |  j  } | r |  j  j ra | j   } n | j   } x | D] } | d  k r qt n  | j	 | d t
 d d d |  j |  j j d |  } x- | D]% \ } }	 }
 } | j	 |
 d t
 q Wqt Wq q Wn  d  S(   NRE   R   R   R
   (   R   R   R   RY   R   R   t   sumt   non_deletedR:   R   R&   R
   R   R   (   R   RS   RB   R$   R_   t   todeleteRM   t   tR   R   R   R   (    (    s_   /var/www/send.findwatt.com/datamanager/lib/python2.7/site-packages/sqlalchemy/orm/dependency.pyRT     s(    c      
   C   s   x | D] } | j  | d d d |  j |  j j r | j | |  j |  j  } | r x | j D] } |  j |  t	 k r` | j  | d t
 d d d |  j |  j j d |  } x0 | D]% \ } } }	 }
 | j  |	 d t
 q Wq` q` Wq q q Wd  S(   NR   R   R
   RE   R   (   R   R
   R   R   RY   R   R   RO   R#   R*   R&   R   R   (   R   RS   RB   R$   R_   RM   R   R   R   R   R   (    (    s_   /var/www/send.findwatt.com/datamanager/lib/python2.7/site-packages/sqlalchemy/orm/dependency.pyRU     s     c      	   C   s   |  j  r |  j j r |  j d k r xy | D]n } |  j | d  d  t |  | r- |  j  r- | j | |  j |  j	  } | r |  j
 | | | j    q q- q- Wn  d  S(   NR   (   R   R   R   R   Rn   R:   R&   RY   R   R   R|   R   (   R   RS   RB   R$   R_   (    (    s_   /var/www/send.findwatt.com/datamanager/lib/python2.7/site-packages/sqlalchemy/orm/dependency.pyRV     s    	c      	   C   s   x | D] } | j  | |  j t j  } | r | j rj x0 | j D]" } |  j | | d  t | d  qA Wn  |  j r |  j	 | | | j
    q q q Wd  S(   NR   (   RY   R   R   R   R   Rn   R:   R*   R   R|   R   (   R   RS   RB   R$   R_   RM   (    (    s_   /var/www/send.findwatt.com/datamanager/lib/python2.7/site-packages/sqlalchemy/orm/dependency.pyRW     s    		c         C   s   | d  k s% |  j r) | j |  r) d  S| d  k	 r~ | d  k	 r~ | j j |  r~ t j d t j |  | |  j	 f  d  S| s | d  k r t
 j | |  j |  j	 j  n8 |  j |  t
 j | |  j | |  j |  j	 j | t  d  S(   NsG   Object of type %s not in session, %s operation along '%s' won't proceed(   R:   R   R   t   sessiont   _contains_stateR   t   warnt
   mapperutilt   state_class_strR
   R   R   R   R   Rj   R   R   R*   (   R   R$   RM   Rl   Rm   RS   R   (    (    s_   /var/www/send.findwatt.com/datamanager/lib/python2.7/site-packages/sqlalchemy/orm/dependency.pyRn     s$    	N(   R   R   R   R.   RD   RT   RU   RV   RW   R:   Rn   (    (    (    s_   /var/www/send.findwatt.com/datamanager/lib/python2.7/site-packages/sqlalchemy/orm/dependency.pyR   M  s   		$	7				R   c           B   sq   e  Z d  Z d   Z d   Z d   Z d   Z d   Z d   Z d   Z	 d   Z
 d	   Z d
   Z d   Z RS(   s  For many-to-one relationships with no one-to-many backref,
    searches for parents through the unit of work when a primary
    key has changed and updates them.

    Theoretically, this approach could be expanded to support transparent
    deletion of objects referenced via many-to-one as well, although
    the current attribute system doesn't do enough bookkeeping for this
    to be efficient.

    c         C   sP   |  j  j r< |  j r d  St d   |  j  j D k r< d  Sn  | j |  t  d  S(   Nc         s   s   |  ] } | j  Vq d  S(   N(   R   (   t   .0R
   (    (    s_   /var/www/send.findwatt.com/datamanager/lib/python2.7/site-packages/sqlalchemy/orm/dependency.pys	   <genexpr>"  s   (   R
   Rp   R   R*   R%   (   R   R'   (    (    s_   /var/www/send.findwatt.com/datamanager/lib/python2.7/site-packages/sqlalchemy/orm/dependency.pyR(     s    		c         C   sM   t  j | |  j j  } t  j | |  t t  } | j j | | f g  d  S(   N(   R   R+   R   R9   R)   R*   R   R   (   R   R'   R1   R/   (    (    s_   /var/www/send.findwatt.com/datamanager/lib/python2.7/site-packages/sqlalchemy/orm/dependency.pyR5   (  s    	c         C   s   d  S(   N(    (   R   R'   RB   RE   (    (    s_   /var/www/send.findwatt.com/datamanager/lib/python2.7/site-packages/sqlalchemy/orm/dependency.pyRR   1  s    c         C   s   d  S(   N(    (   R   RS   RB   (    (    s_   /var/www/send.findwatt.com/datamanager/lib/python2.7/site-packages/sqlalchemy/orm/dependency.pyRT   4  s    c         C   s    |  j  s |  j | |  n  d  S(   N(   R   t   _process_key_switches(   R   R'   RB   (    (    s_   /var/www/send.findwatt.com/datamanager/lib/python2.7/site-packages/sqlalchemy/orm/dependency.pyRU   7  s    	c         C   s0   | r, |  j  r, |  j | |  } t |  St S(   N(   R   t   _key_switcherst   boolR*   (   R   R'   RB   RE   t   d(    (    s_   /var/www/send.findwatt.com/datamanager/lib/python2.7/site-packages/sqlalchemy/orm/dependency.pyR`   =  s    
c         C   s   t  s t  d  S(   N(   R*   R8   (   R   RS   RB   (    (    s_   /var/www/send.findwatt.com/datamanager/lib/python2.7/site-packages/sqlalchemy/orm/dependency.pyRV   D  s    c         C   s#   |  j  s t  |  j | |  d  S(   N(   R   R8   R   (   R   RS   RB   (    (    s_   /var/www/send.findwatt.com/datamanager/lib/python2.7/site-packages/sqlalchemy/orm/dependency.pyRW   G  s    c         C   s   | j  d |  f d    \ } } | j |  } xL | D]D } | | k r7 |  j | |  rk | j |  q{ | j |  q7 q7 W| S(   Nt   pk_switchersc           S   s   t    t    f S(   N(   Rt   (    (    (    s_   /var/www/send.findwatt.com/datamanager/lib/python2.7/site-packages/sqlalchemy/orm/dependency.pyt   <lambda>R  s    (   Rs   t   unionR}   R   (   R   R'   RB   t   switchedt   notswitchedt	   allstatesR^   (    (    s_   /var/www/send.findwatt.com/datamanager/lib/python2.7/site-packages/sqlalchemy/orm/dependency.pyR   O  s    	c      
   C   s  |  j  | |  } | rx | j j j   D] } t | j |  j j  sO q+ n  | j } | j |  j	  j
 | | d |  j } | t j k	 r+ | d  k	 r+ t j | |  j	  } | | k r| j | t |  j  t j | |  j | |  j |  j j | |  j  qq+ q+ Wn  d  S(   NR]   (   R   R   t   identity_mapt
   all_statest
   issubclassRi   R   R>   R"   R   t   getR   R   t   PASSIVE_NO_RESULTR:   t   instance_stateR   R*   R   R   R   R   R
   R   (   R   t   deplistRS   t	   switchersR$   t   dict_Ry   t   related_state(    (    s_   /var/www/send.findwatt.com/datamanager/lib/python2.7/site-packages/sqlalchemy/orm/dependency.pyR   ^  s(    		
	c         C   s.   t  | j  o- t j | | |  j |  j j  S(   N(   R   R   R   R   R   R
   R   (   R   RS   R$   (    (    s_   /var/www/send.findwatt.com/datamanager/lib/python2.7/site-packages/sqlalchemy/orm/dependency.pyR}   v  s    (   R   R   t   __doc__R(   R5   RR   RT   RU   R`   RV   RW   R   R   R}   (    (    (    s_   /var/www/send.findwatt.com/datamanager/lib/python2.7/site-packages/sqlalchemy/orm/dependency.pyR     s   
											t   ManyToManyDPc           B   sY   e  Z d    Z d   Z d   Z d   Z d   Z d   Z d   Z d   Z	 d   Z
 RS(	   c      	   C   sS   | j  j | | f | | f | | f | | f | | f | | f | | f g  d  S(   N(   R   R   (   R   R'   R1   R2   R3   R4   R/   R0   (    (    s_   /var/www/send.findwatt.com/datamanager/lib/python2.7/site-packages/sqlalchemy/orm/dependency.pyR.   }  s    							c	   	      C   s|   | sV | r1 | j  j | | f | | f g  qx | j  j | | f | | f g  n" | j  j | | f | | f g  d  S(   N(   R   R   (	   R   R'   R   R   RN   R/   R0   RE   RQ   (    (    s_   /var/www/send.findwatt.com/datamanager/lib/python2.7/site-packages/sqlalchemy/orm/dependency.pyRD     s    						c         C   s:   |  j  s6 x* | D] } | j | |  j |  j  q Wn  d  S(   N(   R   RY   R   R   (   R   RS   RB   R$   (    (    s_   /var/www/send.findwatt.com/datamanager/lib/python2.7/site-packages/sqlalchemy/orm/dependency.pyRT     s    	c   
   
   C   s#  |  j  sM xA | D]6 } |  j | |  r | j | |  j t j  } q q Wn  |  j j s] d  Sx | D] } | j | |  j t j  } | rd x | j	 D] } |  j
 |  t k r | j | d t d d d |  j x? |  j j d |  D]% \ } } } }	 | j | d t q Wq q Wqd qd Wd  S(   NRE   R   R   R
   (   R   R}   RY   R   R   R   R   R   R   RO   R#   R*   R   R&   R
   R   R   (
   R   RS   RB   R$   R_   RM   R   R   R   R   (    (    s_   /var/www/send.findwatt.com/datamanager/lib/python2.7/site-packages/sqlalchemy/orm/dependency.pyRU     s2    	c            s6  g  } g  } g  } |  j  |  } t   } x | D]   | j   |  j |  j  } | r1 x{ | j   D]m }	 |	 d  k se | d  k	 r   |	 f | k r qe n  i  }
 |  j   |	 |
 t | d  s qe n  | j	 |
  qe W| j
   f d   | j   D  q1 q1 W| d  k	 r| j
 |  n  |  j | | | |  d  S(   NR   c         3   s   |  ] } |   f Vq d  S(   N(    (   R   R   (   R$   (    s_   /var/www/send.findwatt.com/datamanager/lib/python2.7/site-packages/sqlalchemy/orm/dependency.pys	   <genexpr>  s    (   Rw   Rt   RY   R   R   t	   non_addedR:   Rn   R*   RC   R   t	   _run_crud(   R   RS   RB   t   secondary_deletet   secondary_insertt   secondary_updatet	   processedt   tmpR_   RM   Rl   (    (   R$   s_   /var/www/send.findwatt.com/datamanager/lib/python2.7/site-packages/sqlalchemy/orm/dependency.pyRV     s:    	*c            sB  g  } g  } g  } |  j  |  } t   } x| D]  |  j oP |  j |    } | re t j }	 n	 t j }	 | j   |  j |	  }
 |
 r1 xl |
 j	 D]a } | d  k	 r   | f | k r q n  i  } |  j   | | t | d  s q n  | j |  q Wxl |
 j D]a } | d  k	 r/  | f | k r/qn  i  } |  j   | | t | d  sYqn  | j |  qW| j   f d   |
 j	 |
 j D  | rxk |
 j D]] } i  } t j   |  j | d |  j j  t j | |  j | d |  j j  | j |  qWqq1 q1 W| d  k	 r(| j |  n  |  j | | | |  d  S(   NR   R   c         3   s   |  ] } |   f Vq d  S(   N(    (   R   R   (   R$   (    s_   /var/www/send.findwatt.com/datamanager/lib/python2.7/site-packages/sqlalchemy/orm/dependency.pys	   <genexpr>*  s   t   old_(   Rw   Rt   R   R}   R   R   R   RY   R   R   R:   Rn   R*   RC   RO   R   R   R   R   R
   R   R   t   secondary_synchronize_pairsR   (   R   RS   RB   R   R   R   R   R   t   need_cascade_pksR]   R_   RM   Rl   (    (   R$   s_   /var/www/send.findwatt.com/datamanager/lib/python2.7/site-packages/sqlalchemy/orm/dependency.pyRW     sp    	
						c   
   
   C   s  | j  j |  j  } | r | d } |  j j t j g  |  j j D]6 } | j | k rA | t j	 | j d | j
 k ^ qA    } | j | |  }	 |	 j   r |	 j t |  k r t j d |  j j t |  |	 j f   q n  | r| d } |  j j t j g  |  j j D]: } | j | k r| t j	 d | j d | j
 k ^ q   } | j | |  }	 |	 j   r|	 j t |  k rt j d |  j j t |  |	 j f   qn  | r|  j j   } | j | |  n  d  S(   Ni    t   type_sR   DELETE statement on table '%s' expected to delete %d row(s); Only %d were matched.R   sR   UPDATE statement on table '%s' expected to update %d row(s); Only %d were matched.(   t   transactiont
   connectionR   R   R   R    t   and_R   R   t	   bindparamt   typet   executet   supports_sane_multi_rowcountt   rowcountt   lenR   t   StaleDataErrort   descriptionR   t   insert(
   R   RS   R   R   R   R   Rl   R   t	   statementt   result(    (    s_   /var/www/send.findwatt.com/datamanager/lib/python2.7/site-packages/sqlalchemy/orm/dependency.pyR   D  s<    
<
@c         C   s   |  j  |  | d  k r t S| d  k	 rr | j j |  rr | j sn t j d t j	 |  | |  j
 f  n  t St j | |  j | |  j
 j  t j | |  j | |  j
 j  t S(   NsG   Object of type %s not in session, %s operation along '%s' won't proceed(   Rj   R:   R*   R   R   RO   R   R   R   R   R
   R   t   populate_dictR   R   R   R   R&   (   R   R$   RM   Rl   Rm   RS   R   (    (    s_   /var/www/send.findwatt.com/datamanager/lib/python2.7/site-packages/sqlalchemy/orm/dependency.pyRn   p  s    	 c         C   s   t  j | | |  j |  j j  S(   N(   R   R   R   R
   R   (   R   RS   R$   (    (    s_   /var/www/send.findwatt.com/datamanager/lib/python2.7/site-packages/sqlalchemy/orm/dependency.pyR}     s
    (   R   R   R.   RD   RT   RU   RV   RW   R   Rn   R}   (    (    (    s_   /var/www/send.findwatt.com/datamanager/lib/python2.7/site-packages/sqlalchemy/orm/dependency.pyR   {  s   				"	%	C	,	N(   R   t    R    R   R   R   R   R   R   R   t
   interfacesR   R   R   t   objectR	   R   R   R   R   R   (    (    (    s_   /var/www/send.findwatt.com/datamanager/lib/python2.7/site-packages/sqlalchemy/orm/dependency.pyt   <module>
   s   ( 1 j 