ó
¿b›]c           @   sy   d  Z  d d l m Z d d l m Z d d l m Z d „  Z d „  Z d „  Z d „  Z	 d	 „  Z
 d
 „  Z d „  Z d S(   sg   private module containing functions used for copying data
between instances based on join conditions.

i   (   t
   attributes(   t   exc(   t   utilc         C   s1  |  j  } | j  } x| D]\ }	 }
 y6 | j |	 } |  j | j j j |  | t j ƒ } Wn* t j	 k
 r‡ t
 t | |	 | |
 ƒ n Xy4 | j |
 } | j | j j j | | | d  ƒ Wn* t j	 k
 rè t
 t | |	 | |
 ƒ n X| r |	 j r |
 j r |
 j |	 ƒ r t | j d | |
 f <q q Wd  S(   Nt   pk_cascaded(   t   dictt   _columntopropertyt   managert   keyt   implt   getR    t   PASSIVE_OFFR   t   UnmappedColumnErrort   _raise_col_to_propt   Falset   sett   Nonet   Truet   primary_keyt
   references(   t   sourcet   source_mappert   destt   dest_mappert   synchronize_pairst	   uowcommitt   flag_cascaded_pkst   source_dictt	   dest_dictt   lt   rt   propt   value(    (    s2   lib/python2.7/site-packages/sqlalchemy/orm/sync.pyt   populate   s&    			'		c         C   s±   xª | D]¢ \ } } y | j  | } |  | j } Wn* t j k
 r] t t | | | | ƒ n Xy | j  | } | |  | j <Wq t j k
 r¨ t t | | | | ƒ q Xq Wd  S(   N(   R   R   R   R   R   R   R   (   R   R   R   R   R   R   R   (    (    s2   lib/python2.7/site-packages/sqlalchemy/orm/sync.pyt   bulk_populate_inherit_keys=   s    c         C   s±   xª | D]¢ \ } } | j  r_ | j |  |  j | ƒ t j k r_ t d | t j |  ƒ f ƒ ‚ n  y | j |  |  j | d  ƒ Wq t	 j
 k
 r¨ t t d  | | | ƒ q Xq Wd  S(   NsK   Dependency rule tried to blank-out primary key column '%s' on instance '%s'(   R   t   _get_state_attr_by_columnR   t   orm_utilt	   _none_sett   AssertionErrort	   state_strt   _set_state_attr_by_columnR   R   R   R   R   (   R   R   R   R   R   (    (    s2   lib/python2.7/site-packages/sqlalchemy/orm/sync.pyt   clearM   s    	c   	      C   s£   xœ | D]” \ } } y= | j  |  j ƒ  | ƒ } | j |  |  j | d t j ƒ} Wn* t j k
 r| t t	 | | d  | ƒ n X| | | j <| | | | j <q Wd  S(   Nt   passive(   t   _get_committed_attr_by_columnt   objR"   R   R    R
   R   R   R   R   R   R   (	   R   R   R   t
   old_prefixR   R   R   t   oldvalueR   (    (    s2   lib/python2.7/site-packages/sqlalchemy/orm/sync.pyt   update_   s    c         C   sz   xs | D]k \ } } y% | j  |  |  j | d t j ƒ} Wn* t j k
 rd t t | | d  | ƒ n X| | | j	 <q Wd  S(   NR)   (
   R"   R   R    R
   R   R   R   R   R   R   (   R   R   t   dict_R   R   R   R   (    (    s2   lib/python2.7/site-packages/sqlalchemy/orm/sync.pyt   populate_dictn   s    c         C   s‹   x„ | D]x \ } } y | j  | } Wn* t j k
 rP t t | | d | ƒ n X|  j | | j t j	 ƒ } t
 | j ƒ r t Sq Wt Sd S(   sp   return true if the source object has changes from an old to a
    new value on the given synchronize pairs

    N(   R   R   R   R   R   R   t   get_attribute_historyR   R    t   PASSIVE_NO_INITIALIZEt   boolt   deletedR   (   R   R   R   R   R   R   R   t   history(    (    s2   lib/python2.7/site-packages/sqlalchemy/orm/sync.pyt   source_modifiedz   s    c         C   sB   |  r" t  j d | | f ƒ ‚ n t  j d | | | f ƒ ‚ d  S(   NsÑ   Can't execute sync rule for destination column '%s'; mapper '%s' does not map this column.  Try using an explicit `foreign_keys` collection which does not include this column (or use a viewonly=True relation).sØ   Can't execute sync rule for source column '%s'; mapper '%s' does not map this column.  Try using an explicit `foreign_keys` collection which does not include destination column '%s' (or use a viewonly=True relation).(   R   R   (   t   isdestR   t   source_columnR   t   dest_column(    (    s2   lib/python2.7/site-packages/sqlalchemy/orm/sync.pyR      s    N(   t   __doc__t    R    R   R   R#   R    R!   R(   R.   R0   R6   R   (    (    (    s2   lib/python2.7/site-packages/sqlalchemy/orm/sync.pyt   <module>   s   	+					