o
    i                     @   sp   d Z ddlm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)util   c                 C   s  | j }|j }|D ]{\}	}
z|j|	 }| j|j j| |tj}W n tj	y< } zt
d||	||
| W Y d }~nd }~ww z|j|
 }|j|j j|||d  W n tj	ym } zt
d||	||
| W Y d }~nd }~ww |r|	jr|
jr|
|	rd|jd||
f< qd S )NFTpk_cascaded)dict_columntopropertymanagerkeyimplgetr   PASSIVE_OFFr   UnmappedColumnError_raise_col_to_propsetprimary_key
references)sourcesource_mapperdestdest_mappersynchronize_pairs	uowcommitflag_cascaded_pkssource_dict	dest_dictlrpropvalueerr r!   N/var/www/edux/Edux_v2/venv/lib/python3.10/site-packages/sqlalchemy/orm/sync.pypopulate   s<   	

	r#   c                 C   s   |D ]K\}}z|j | }| |j }W n tjy. } ztd||||| W Y d }~nd }~ww z|j | }|| |j< W q tjyM   td|||| Y qw d S )NFT)r   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 ]D\}}|j r|| | j|tjvrtd|t| f z|| | j|d  W q tj	yF } zt
dd |||| W Y d }~qd }~ww d S )NzKDependency rule tried to blank-out primary key column '%s' on instance '%s'T)r   _get_state_attr_by_columnr   orm_util	_none_setAssertionError	state_str_set_state_attr_by_columnr   r   r   )r   r   r   r   r   r    r!   r!   r"   clearN   s$   r+   c           
      C   s   |D ]B\}}z| |  |}|j| | j|tjd}W n tjy7 }	 ztd||d ||	 W Y d }	~	nd }	~	ww |||j	< ||||j	 < qd S N)passiveF)
_get_committed_attr_by_columnobjr%   r   r   r   r   r   r   r
   )
r   r   r   
old_prefixr   r   r   oldvaluer   r    r!   r!   r"   update`   s   

r2   c                 C   sp   |D ]3\}}z|j | | j|tjd}W n tjy/ } ztd||d || W Y d }~nd }~ww |||j< qd S r,   )r%   r   r   r   r   r   r   r
   )r   r   dict_r   r   r   r   r    r!   r!   r"   populate_dicto   s   
r4   c           	      C   s|   |D ]9\}}z|j | }W n tjy) } ztd||d|| W Y d}~nd}~ww | ||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   get_attribute_historyr
   r   PASSIVE_NO_INITIALIZEbooldeleted)	r   r   r   r   r   r   r   r    historyr!   r!   r"   source_modified{   s   

r:   c                 C   sF   | rt jtd||f |d d S t jtd|||f |d 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).)replace_contextzCan'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   raise_r   r   )isdestr   source_columnr   dest_columnr    r!   r!   r"   r      s"   

r   N)__doc__ r   r   r   r&   r#   r$   r+   r2   r4   r:   r   r!   r!   r!   r"   <module>   s   +