U
    x^                     @   sd   d Z ddlmZ ddlmZ ddlmZ dd Zdd Zd	d
 Zdd Z	dd Z
dd Zdd ZdS )zgprivate module containing functions used for copying data
between instances based on join conditions.

   )
attributes)exc)utilc              
   C   s   | j }|j }|D ]\}	}
z(|j|	 }| j|j j| |tj}W n& tj	k
rf   t
d||	||
 Y nX z(|j|
 }|j|j j|||d  W n& tj	k
r   t
d||	||
 Y nX |r|	jr|
jr|
|	rd|jd||
f< qd S )NFTZpk_cascaded)dict_columntopropertymanagerkeyimplgetr   PASSIVE_OFFr   UnmappedColumnError_raise_col_to_propsetprimary_keyZ
references)sourcesource_mapperdestdest_mappersynchronize_pairs	uowcommitZflag_cascaded_pkssource_dictZ	dest_dictlrpropvalue r   ;/tmp/pip-install-dq5v43_d/SQLAlchemy/sqlalchemy/orm/sync.pypopulate   s4    	
  
r   c              
   C   s   |D ]\}}z|j | }| |j }W n& tjk
rJ   td|||| Y nX z|j | }|| |j< W q tjk
r   td|||| Y qX qd S )NFT)r   r   r   r   r   )r   r   r   r   r   r   r   r   r   r   bulk_populate_inherit_keys=   s    

r   c              
   C   s   |D ]x\}}|j r>|| | j|tjkr>td|t| f z|| | j|d  W q tj	k
rz   t
dd ||| Y qX qd S )NzKDependency rule tried to blank-out primary key column '%s' on instance '%s'T)r   _get_state_attr_by_columnr   orm_utilZ	_none_setAssertionErrorZ	state_strZ_set_state_attr_by_columnr   r   r   )r   r   r   r   r   r   r   r   clearM   s     r"   c           	   
   C   s|   |D ]r\}}z*| |  |}|j| | j|tjd}W n& tjk
r\   td||d | Y nX |||j	< ||||j	 < qd S N)ZpassiveF)
Z_get_committed_attr_by_columnobjr   r   r   r   r   r   r   r   )	r   r   r   Z
old_prefixr   r   r   Zoldvaluer   r   r   r   update_   s         

r%   c              
   C   s^   |D ]T\}}z|j | | j|tjd}W n& tjk
rL   td||d | Y nX |||j< qd S r#   )r   r   r   r   r   r   r   r   )r   r   Zdict_r   r   r   r   r   r   r   populate_dictn   s       
r&   c              
   C   sj   |D ]`\}}z|j | }W n& tjk
r@   td||d| Y nX | ||jtj}t|j	r dS qdS )zpreturn true if the source object has changes from an old to a
    new value on the given synchronize pairs

    FNT)
r   r   r   r   Zget_attribute_historyr   r   ZPASSIVE_NO_INITIALIZEboolZdeleted)r   r   r   r   r   r   r   historyr   r   r   source_modifiedz   s      
r)   c                 C   s0   | rt d||f nt d|||f d S )NzCan'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).zCan'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   )Zisdestr   Zsource_columnr   Zdest_columnr   r   r   r      s    r   N)__doc__ r   r   r   r    r   r   r"   r%   r&   r)   r   r   r   r   r   <module>   s   +