§
    eŠtjº  ã                  ó4  — d Z ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ	 dd	l
mZ dd
l
mZ ddl
mZ ddlmZ ddlmZ ddlmZ  G d„ d¦  «        Z G d„ de¦  «        Z G d„ de¦  «        Z G d„ de¦  «        Z G d„ de¦  «        ZeeeeeeiZdS )zRelationship dependencies.é    )Úannotationsé   )Ú
attributes)Úexc)Úsync)Ú
unitofwork)Úutil)Ú
MANYTOMANY)Ú	MANYTOONE)Ú	ONETOMANYé   )Úsqlc                  ó†   — e Zd 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d„Zd„ Zd„ ZdS )ÚDependencyProcessorc                ó2  — || _         |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        ›d|j        ›�| _        |j        | _        | j         j        st'          j        d| j         z  ¦  «        ‚d S )NÚ_z|Can't build a DependencyProcessor for relationship %s. No target attributes to populate between parent and child are present)ÚpropÚcascadeÚmapperÚparentÚ	secondaryÚ	directionÚpost_updateÚpassive_deletesÚpassive_updatesÚenable_typechecksr   ÚPASSIVE_NO_INITIALIZEÚ_passive_delete_flagÚPASSIVE_OFFÚ_passive_update_flagÚ	_sort_keyÚkeyÚsort_keyÚsynchronize_pairsÚsa_excÚArgumentError)Úselfr   s     úW/var/www/html/CA-Chatbot/venv/lib/python3.11/site-packages/sqlalchemy/orm/dependency.pyÚ__init__zDependencyProcessor.__init__   s	  € ØˆŒ	Ø”|ˆŒØ”kˆŒØ”kˆŒØœˆŒØœˆŒØÔ+ˆÔØ#Ô3ˆÔØ#Ô3ˆÔØ!%Ô!7ˆÔØÔð 	?Ý(2Ô(HˆDÔ%Ð%å(2Ô(>ˆDÔ%ØÔð 	?Ý(2Ô(HˆDÔ%Ð%å(2Ô(>ˆDÔ%à#'¤;Ô#8Ð#8Ð#8¸$¼(¸(ÐCˆŒØ”8ˆŒØŒyÔ*ð 	ÝÔ&ð$à&*¤iñ0ñô ð ð	ð 	ó    c                ó6   — t          |j                 |¦  «        S ©N)Ú_direction_to_processorr   )Úclsr   s     r(   Úfrom_relationshipz%DependencyProcessor.from_relationship9   s   € å& t¤~Ô6°tÑ<Ô<Ð<r*   c                óp   — | j         j                             | j        ¦  «                             |¦  «        S )z¤return True if the given object instance has a parent,
        according to the ``InstrumentedAttribute`` handled by this
        ``DependencyProcessor``.

        )r   Úclass_managerÚget_implr"   Ú	hasparent©r'   Ústates     r(   r3   zDependencyProcessor.hasparent=   s-   € ð Œ{Ô(×1Ò1°$´(Ñ;Ô;×EÒEÀeÑLÔLÐLr*   c                ó2   — |                      | d¦  «         dS )z•establish actions and dependencies related to a flush.

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

        TN)Úregister_preprocessor©r'   Úuows     r(   Úper_property_preprocessorsz.DependencyProcessor.per_property_preprocessorsE   s    € ð 	×!Ò! $¨Ñ-Ô-Ð-Ð-Ð-r*   c           	     ó�  — t          j        || dd¦  «        }t          j        || dd¦  «        }t          j        || j        j        ¦  «        }t          j        || j        j        ¦  «        }t          j        || j        j        ¦  «        }t          j        || j        j        ¦  «        }|                      |||||||¦  «         d S ©NFT)r   Ú
ProcessAllÚSaveUpdateAllr   Úprimary_base_mapperr   Ú	DeleteAllÚper_property_dependencies)r'   r9   Ú
after_saveÚbefore_deleteÚparent_savesÚchild_savesÚparent_deletesÚchild_deletess           r(   Úper_property_flush_actionsz.DependencyProcessor.per_property_flush_actionsN   sÝ   € ÝÔ*¨3°°e¸TÑBÔBˆ
Ý"Ô-¨c°4¸¸tÑDÔDˆå!Ô/Ø�”Ô0ñ
ô 
ˆõ !Ô.Ø�”Ô0ñ
ô 
ˆõ $Ô-Ø�”Ô0ñ
ô 
ˆõ #Ô,Ø�”Ô0ñ
ô 
ˆð 	×&Ò&ØØØØØØØñ	
ô 	
ð 	
ð 	
ð 	
r*   c                ón  — | j         j        }t          j        ||¦  «        }t          j        ||¦  «        }|rt          j        || dd¦  «        }d|_        nt          j        || dd¦  «        }d|_        ||j        vr||j        vsJ ‚|df|dfg}	d}
nd}
|s/t          j        || j        j	        ¦  «        }dx}}||j        v rd}n.t          j        || j        j	        ¦  «        }dx}}||j        v rd}|D �];}|j
        | j                 j                             ||j        |r| j        nt           j        ¦  «        }|sŒJ|r/t          j        || d|¦  «        }|rt          j        ||¦  «        }n.t          j        || d|¦  «        }|rt          j        ||¦  «        }|
rlg }	|D ]g\  }}||j        vrd}nA|j        |         \  }}|rt          j        ||¦  «        df}nt          j        ||¦  «        df}|	                     |¦  «         Œh|	D ]!\  }}|                      ||||||||¦  «         Œ"�Œ=dS )zè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.

        TFN)NN)r   r?   r   r>   r@   r=   ÚdisabledÚcyclesr   Úbase_mapperÚmanagerr"   ÚimplÚget_all_pendingÚdictr   r   r   ÚProcessStateÚDeleteStateÚSaveUpdateStateÚstatesÚappendÚper_state_dependencies)r'   r9   rT   ÚisdeleteÚchild_base_mapperrE   rG   rC   rB   Úchild_actionsÚchild_in_cyclesrD   rF   Úparent_in_cyclesr5   Úsum_Úchild_stateÚchildÚchild_actionÚdeletedÚlistonlyÚchildisdeletes                         r(   Úper_state_flush_actionsz+DependencyProcessor.per_state_flush_actionsj   s  € ð !œKÔ;ÐÝ Ô.¨sÐ4EÑFÔFˆÝ"Ô,¨SÐ2CÑDÔDˆð
 ð 	'Ý&Ô1°#°t¸TÀ4ÑHÔHˆMØ%)ˆMÔ"Ð"å#Ô.¨s°D¸%ÀÑFÔFˆJØ"&ˆJÔð ˜cœjÐ(Ð(ð
 !¨¬
Ð2Ð2Ð2Ð2ð *¨5Ð1°MÀ4Ð3HÐIˆMØ#ˆOˆOà"ˆOð ð 	(Ý%Ô3Ø�T”[Ô,ñô ˆLð .2Ð1ˆN˜]Ø˜sœzÐ)Ð)Ø#'Ð øå'Ô1°#°t´{Ô7NÑOÔOˆNØ(,Ð,ˆL˜:Ø ¤Ð+Ð+Ø#'Ð ð ð 9	ñ 9	ˆEð ”= ¤Ô*Ô/×?Ò?ØØ”
ð  ð:�DÔ-Ð-å#Ô9ñô ˆDð ð Øàð JÝ *Ô 7¸¸TÀ4ÈÑ OÔ O�Ø#ð HÝ%/Ô%;¸CÀÑ%GÔ%G�Nøå'Ô4°S¸$ÀÀuÑMÔM�
Ø#ð JÝ#-Ô#=¸cÀ5Ñ#IÔ#I�Làð 7Ø "�Ø*.ð 7ð 7Ñ&�K Ø"¨#¬*Ð4Ð4Ø'3˜˜à,/¬J°{Ô,CÑ)˜ Ø"ð 	å *Ô 6°s¸KÑ HÔ HØ $ð,˜L˜Lõ !+Ô :¸3ÀÑ LÔ LØ %ð,˜Lð "×(Ò(¨Ñ6Ô6Ð6Ð6ð 0=ð 
ð 
Ñ+�˜mØ×+Ò+ØØ Ø"Ø ØØ!ØØ!ñ	ô 	ð 	ð 	ñ
ð_9	ð 9	r*   c                ó   — dS ©NF© ©r'   Ú	uowcommitrT   s      r(   Úpresort_deletesz#DependencyProcessor.presort_deletesÜ   ó   € Øˆur*   c                ó   — dS re   rf   rg   s      r(   Úpresort_savesz!DependencyProcessor.presort_savesß   rj   r*   c                ó   — d S r,   rf   rg   s      r(   Úprocess_deletesz#DependencyProcessor.process_deletesâ   ó   € Øˆr*   c                ó   — d S r,   rf   rg   s      r(   Úprocess_savesz!DependencyProcessor.process_saveså   ro   r*   c                ó^  — |r| j         rt          j        t          j        z  }n4| j        t
          u rt          j        }nt          j        t          j        z  }|D ]7}|                     || j	        |¦  «        }|r| 
                    ¦   «         s dS Œ8|o| j        j         o| j        |j        v S )NT)r   r   r   ÚINCLUDE_PENDING_MUTATIONSr   r   ÚPASSIVE_NO_FETCH_RELATEDr   Úget_attribute_historyr"   Úemptyr   Ú_is_self_referentialr   Úmappers)r'   rh   rT   rW   ÚpassiveÚsÚhistorys          r(   Úprop_has_changesz$DependencyProcessor.prop_has_changesè   sÓ   € Øð 	˜4Ô/ð 	åÔ0ÝÔ6ñ7ð ˆGð Œ^�yÐ(Ð(õ !Ô9ˆGˆGõ Ô&­Ô)MÑMð ð ð 	ð 	ˆAð  ×5Ò5°a¸¼À7ÑKÔKˆGØð ˜wŸ}š}™œð Ø�t�tøð ð 5Øœ	Ô6Ð6ð5à”K 9Ô#4Ð4ðr*   c                ó¦  — | j         j        r|€t          j        d| j         ›�¦  «        ‚|�¢| j                             || j         ¬¦  «        s‚| j                             |d¬¦  «        r5t          j        d|j        | j         | j        j        | j        dœz  ¦  «        ‚t          j        d|j        | j         | j        j        dœz  ¦  «        ‚d S d S )Nz+Can't flush None value found in collection )Úallow_subtypesTaE  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. )ÚxÚyÚzÚzmz•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   r€   r�   )r   Úuselistr   Ú
FlushErrorr   Ú_canloadr   Úclass_r4   s     r(   Ú_verify_canloadz#DependencyProcessor._verify_canload  s  € ØŒ9Ôð &	  Ý”.�.à#'¤9 9ð/ñô ð ð Ð t¤{×';Ò';Ø dÔ&<Ð"<ð (<ñ (
ô (
Ðð Œ{×#Ò# E¸$Ð#Ñ?Ô?ð Ý”nð=ð #œ\Ø!œYØ!œ[Ô/Ø"œkð	ð ññô ð õ$ ”nð!ð #œ\Ø!œYØ!œ[Ô/ðð ñ	ñô ð ð- ÐÐÐr*   c                ó   — t          ¦   «         ‚r,   ©ÚNotImplementedError)r'   r5   r^   ÚassociationrowÚ	clearkeysrh   s         r(   Ú_synchronizez DependencyProcessor._synchronize1  ó   € Ý!Ñ#Ô#Ð#r*   c                óÊ   — | j         j        sd S t          t          | j        gd„ | j         j        D ¦   «         z   ¦  «        ¦  «        }|                     d|ft          ¦  «        S )Nc                ó   — g | ]	}|j         ‘Œ
S rf   )r"   )Ú.0Úps     r(   ú
<listcomp>zCDependencyProcessor._get_reversed_processed_set.<locals>.<listcomp>9  s   € Ð LÐ LÐ L¨1 ¤Ð LÐ LÐ Lr*   Úreverse_key)r   Ú_reverse_propertyÚtupleÚsortedr"   ÚmemoÚset)r'   r9   Úprocess_keys      r(   Ú_get_reversed_processed_setz/DependencyProcessor._get_reversed_processed_set4  sf   € ØŒyÔ*ð 	Ø�4åÝ�D”H�:Ð LÐ L°´	Ô0KÐ LÑ LÔ LÑLÑMÔMñ
ô 
ˆð �xŠx˜¨Ð4µcÑ:Ô:Ð:r*   Fc                ór   — |D ]3}|r|�-|                      |d„ | j        j        D ¦   «         ¦  «          d S Œ4d S )Nc                ó   — g | ]\  }}|‘ŒS rf   rf   )r‘   ÚlÚrs      r(   r“   z4DependencyProcessor._post_update.<locals>.<listcomp>A  s   € ÐFÐFÐF¡$ ! Q˜AÐFÐFÐFr*   )Úregister_post_updater   r$   )r'   r5   rh   ÚrelatedÚis_m2o_deleter   s         r(   Ú_post_updatez DependencyProcessor._post_update=  sf   € Øð 	ð 	ˆAØ ð  A MØ×.Ò.ØÐFÐF¨$¬)Ô*EÐFÑFÔFñô ð ð ��ð	 %2ð	ð 	r*   c                ó   — t          ¦   «         ‚r,   r‰   ©r'   rh   r5   s      r(   Ú_pks_changedz DependencyProcessor._pks_changedE  rŽ   r*   c                ó0   — | j         j        ›d| j        ›d�S )Nú(ú))Ú	__class__Ú__name__r   )r'   s    r(   Ú__repr__zDependencyProcessor.__repr__H  s   € Øœ>Ô2Ð2Ð2°D´I°I°IÐ>Ð>r*   N)F)r«   Ú
__module__Ú__qualname__r)   Úclassmethodr/   r3   r:   rH   rc   ri   rl   rn   rq   r|   r‡   r�   r›   r£   r¦   r¬   rf   r*   r(   r   r      s-  € € € € € ðð ð ð: ð=ð =ñ „[ð=ðMð Mð Mð.ð .ð .ð
ð 
ð 
ð8pð pð pðdð ð ðð ð ðð ð ðð ð ðð ð ð@'ð 'ð 'ðR$ð $ð $ð;ð ;ð ;ðð ð ð ð$ð $ð $ð?ð ?ð ?ð ?ð ?r*   r   c                  ó>   — e Zd Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Z	d„ Z
d	S )
ÚOneToManyDPc           
     óN  — | j         rnt          j        || j        j        d¦  «        }t          j        || j        j        d¦  «        }	|j                             ||f||f||f||	f|	|f|	|fg¦  «         d S |j                             ||f||f||f||f||f||f||fg¦  «         d S r<   ©r   r   ÚPostUpdateAllr   r?   ÚdependenciesÚupdate)
r'   r9   rD   rE   rF   rG   rB   rC   Úchild_post_updatesÚchild_pre_updatess
             r(   rA   z%OneToManyDP.per_property_dependenciesM  s  € ð Ôð 	Ý!+Ô!9Ø�T”[Ô4°eñ"ô "Ðõ !+Ô 8Ø�T”[Ô4°dñ!ô !Ðð Ô×#Ò#à  *Ð-Ø! :Ð.ØÐ!3Ð4Ø"Ð$5Ð6Ø&¨Ð7Ø&¨Ð6ðñ	ô 	ð 	ð 	ð 	ð Ô×#Ò#à! :Ð.Ø Ð-Ø Ð/Ø  .Ð1Ø" NÐ3Ø" KÐ0Ø" MÐ2ðñ
ô 
ð 
ð 
ð 
r*   c	                óD  — | j         rÑt          j        || j        j        d¦  «        }	t          j        || j        j        d¦  «        }
|sI|r"|j                             ||f||	fg¦  «         d S |j                             ||f||f||	fg¦  «         d S |r"|j                             ||
f|
|fg¦  «         d S |j                             ||
f|
|fg¦  «         d S |s%|j                             ||f||f||fg¦  «         d S |j                             ||f||fg¦  «         d S r<   r³   )r'   r9   Úsave_parentÚdelete_parentr_   rB   rC   rW   rb   r·   r¸   s              r(   rV   z"OneToManyDP.per_state_dependenciesv  sè  € ð Ôð 4	Ý!+Ô!9Ø�T”[Ô4°eñ"ô "Ðõ !+Ô 8Ø�T”[Ô4°dñ!ô !Ðð ð Ø ð ØÔ$×+Ò+à)¨:Ð6Ø'Ð);Ð<ðñô ð ð ð ð Ô$×+Ò+à(¨*Ð5Ø)¨:Ð6Ø'Ð);Ð<ðñô ð ð ð ð !ð ØÔ$×+Ò+à*Ð,=Ð>Ø.°Ð>ðñô ð ð ð ð Ô$×+Ò+à*Ð,=Ð>Ø.°Ð>ðñô ð ð ð ð ð 	ØÔ×#Ò#à  *Ð-Ø Ð.Ø  ,Ð/ðñô ð ð ð ð Ô×#Ò#Ø Ð.°¸}Ð0MÐNñô ð ð ð r*   c                ó–  — | j         j         o| j        dk     }|D ]¬}|                     || j        | j        ¦  «        }|r‡|j        D ]T}|�P|                      |¦  «        du r9| j         j        r| 	                    |d¬¦  «         Œ?| 	                    |¦  «         ŒU|r)|j
        D ]!}|�| 	                    |d| j        ¬¦  «         Œ"Œ­d S )NÚallFT©rW   Údelete©Ú	operationr   )r   r¿   r   ru   r"   r   r`   r3   Údelete_orphanÚregister_objectÚ	unchangedr   ©r'   rh   rT   Úshould_null_fksr5   r{   r^   s          r(   ri   zOneToManyDP.presort_deletes·  s  € ð
 ”Ô#Ð#ÐI¨DÔ,@ÀEÒ,IÐ(Ið 	ð ð 	ð 	ˆEØ×5Ò5Ø�t”x Ô!:ñô ˆGð ð Ø$œ_ð =ð =�EØÐ(¨T¯^ª^¸EÑ-BÔ-BÀeÐ-KÐ-KØœ<Ô5ð =Ø%×5Ò5°eÀdÐ5ÑKÔKÐKÐKà%×5Ò5°eÑ<Ô<Ð<øà"ð Ø!(Ô!2ð ð ˜Ø Ð,Ø%×5Ò5Ø %°ÀÄ	ð 6ñ ô ð øøð	ð 	r*   c           	     óœ  — |                      d| ft          ¦  «        }| j        j         o| j        dk     }|D �]‘}|                      ||¦  «        }|r| j        rt          j        t          j	        z  }nt          j
        t          j	        z  }|                     || j        |¦  «        }|rê|j        D ]"}	|	�|                     |	dd| j        ¬¦  «         Œ#|                     |j        ¦  «         |j        D ]ž}	| j        j        s!|r|                     |	dd| j        ¬¦  «         Œ/|                      |	¦  «        du rX|                     |	dd| j        ¬¦  «         | j                             d|	¦  «        D ]\  }
}}}|                     |d¬	¦  «         ŒŒŸ|r2|r0|j        D ](}	|	�$|                     |	d| j        d
| j        ¬¦  «         Œ)�Œ“d S )NÚchildren_addedr½   TÚadd)Úcancel_deleterÁ   r   Fr¿   ©rW   rÁ   r   r¾   z	pk changerÀ   )r˜   r™   r   rÂ   r   r¦   r   r   r   rs   r   ru   r"   ÚaddedrÃ   r   r¶   r`   r3   r   Úcascade_iteratorrÄ   )r'   rh   rT   rÈ   rÆ   r5   Úpks_changedry   r{   r^   ÚcÚmÚst_Údct_s                 r(   rl   zOneToManyDP.presort_savesÒ  sw  € Ø"ŸšÐ)9¸4Ð(@Å#ÑFÔFˆð ”Ô*Ð*ð 2ØÔ(¨EÒ1Ð1ð 	ð
 ð :	ñ :	ˆEØ×+Ò+¨I°uÑ=Ô=ˆKàð 	 $Ô"6ð 	åÔ4Ý Ô:ñ;ð �õ Ô*Ý Ô:ñ;ð ð
  ×5Ò5°e¸T¼XÀwÑOÔOˆGØð JØ$œ]ð ð �EØÐ(Ø!×1Ò1Ø!Ø*.Ø&+Ø!%¤ð	 2ñ ô ð øð ×%Ò% g¤mÑ4Ô4Ð4à$œ_ð Jð J�EØœ<Ô5ð JØ*ð Ø%×5Ò5Ø %Ø).Ø*2Ø%)¤Yð	 6ñ ô ð øð Ÿš¨Ñ.Ô.°%Ð7Ð7Ø!×1Ò1Ø!Ø%)Ø&.Ø!%¤ð	 2ñ ô ð ð 04¬{×/KÒ/KØ$ eñ0ô 0ð Jð J™O˜A˜q # tð &×5Ò5°cÀDÐ5ÑIÔIÐIÐIøàð 
Øð 	Ø!(Ô!2ð ð ˜Ø Ð,Ø%×5Ò5Ø %Ø %Ø $Ô 4Ø*5Ø%)¤Yð 6ñ ô ð øùði:	ð :	r*   c           
     ój  — | j         s| j        dk    �s|                     d| ft          ¦  «        }|D ]ÿ}|                     || j        | j        ¦  «        }|rØ|j        D ]V}|�R|                      |¦  «        du r;|  	                    ||d d|d¦  «         | j         r|r|  
                    |||g¦  «         ŒW| j         s| j        j        sgt          |j        ¦  «                             |¦  «        D ]?}|�;|  	                    ||d d|d¦  «         | j         r|r|  
                    |||g¦  «         Œ@Œþd S d S )Nr½   rÈ   FT)r   r   r˜   r™   ru   r"   r   r`   r3   r�   r£   r   r¿   rÄ   Ú
difference)r'   rh   rT   rÈ   r5   r{   r^   s          r(   rn   zOneToManyDP.process_deletes  s°  € ð Ôð 	& 4Ô#7¸5Ò#@Ñ#@Ø&Ÿ^š^Ð-=¸tÐ,DÅcÑJÔJˆNàð &ð &�Ø#×9Ò9Ø˜4œ8 TÔ%>ñô �ð ð &Ø!(¤ð 	Mð 	M˜à!Ð-Ø $§¢¨uÑ 5Ô 5¸Ð >Ð >à ×-Ò-Ø % u¨d°D¸)ÀUñô ð ð  $Ô/ð M°Eð MØ $× 1Ò 1°%¸ÀUÀGÑ LÔ LÐ LøàÔ'ð &¨t¬|Ô/Bð &Ý%(¨Ô):Ñ%;Ô%;×%FÒ%FØ*ñ&ô &ð 
&ð 
&˜Eð  %Ð0Ø $× 1Ò 1Ø$)¨5°$¸¸iÈñ!"ô !"ð !"ð $(Ô#3ð !&¸ð !&Ø$(×$5Ò$5Ø(-¨y¸5¸'ñ%&ô %&ð %&øøð9 $AÐ#@ð&ð &r*   c           
     ó  — | j         j         o| j        dk     }|D ]ð}|                     || j        t
          j        ¦  «        }|rÆ|j        D ]=}|                      ||d d|d¦  «         |�| j	        r|  
                    |||g¦  «         Œ>|j        D ]?}|r;| j         j        s/|                      |¦  «        s|                      ||d d|d¦  «         Œ@|                      ||¦  «        r$|j        D ]}|                      ||d d|d¦  «         ŒŒñd S )Nr½   FT)r   rÂ   r   ru   r"   r   r   rÌ   r�   r   r£   r`   r3   r¦   rÄ   rÅ   s          r(   rq   zOneToManyDP.process_savesB  s‰  € à”Ô*Ð*ð 2ØÔ(¨EÒ1Ð1ð 	ð
 ð 	ð 	ˆEØ×5Ò5Ø�t”x¥Ô!Añô ˆGð ð Ø$œ]ð Eð E�EØ×%Ò%Ø˜u d¨E°9¸eñô ð ð Ð(¨TÔ-=Ð(Ø×)Ò)¨%°¸U¸GÑDÔDÐDøà$œ_ð ð �Eà'ðà $¤Ô :ðð !%§¢¨uÑ 5Ô 5ðð
 ×)Ò)Ø! 5¨$°°iÀñô ð øð ×$Ò$ Y°Ñ6Ô6ð Ø!(Ô!2ð ð ˜Ø×)Ò)Ø! 5¨$°°yÀ$ñô ð ð øð1	ð 	r*   c           	     ó4  — |}|}|                       |¦  «         |�| j        s|                     |¦  «        rd S |r't          j        || j        | j        j        ¦  «         d S t          j        || j	        || j        | j        j        || j
        o|¦  «         d S r,   )r‡   r   Ú
is_deletedr   Úclearr   r   r$   Úpopulater   r   )	r'   r5   r^   r‹   rŒ   rh   rÎ   ÚsourceÚdests	            r(   r�   zOneToManyDP._synchronized  s¼   € ð ˆØˆØ×Ò˜UÑ#Ô#Ð#Øˆ<ØÔ ð Ø%.×%9Ò%9¸$Ñ%?Ô%?ð ð ˆFØð 	ÝŒJ�t˜Tœ[¨$¬)Ô*EÑFÔFÐFÐFÐFåŒMØØ”ØØ”Ø”	Ô+ØØÔ$Ð4¨ñô ð ð ð r*   c                óN   — t          j        ||| j        | j        j        ¦  «        S r,   ©r   Úsource_modifiedr   r   r$   r¥   s      r(   r¦   zOneToManyDP._pks_changed{  ó'   € ÝÔ#Ø�u˜dœk¨4¬9Ô+Fñ
ô 
ð 	
r*   N)r«   r­   r®   rA   rV   ri   rl   rn   rq   r�   r¦   rf   r*   r(   r±   r±   L  s”   € € € € € ð'ð 'ð 'ðR?ð ?ð ?ðBð ð ð6Bð Bð BðH%&ð %&ð %&ðX ð  ð  ðDð ð ð.
ð 
ð 
ð 
ð 
r*   r±   c                  óB   — e Zd Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Z		 d
d	„Z
dS )ÚManyToOneDPc                ó¨   — t                                | |¦  «         | j        j        D ])}|j                             t          |¦  «        ¦  «         Œ*d S r,   )r   r)   r   Úself_and_descendantsÚ_dependency_processorsrU   ÚDetectKeySwitch)r'   r   r   s      r(   r)   zManyToOneDP.__init__‚  s\   € Ý×$Ò$ T¨4Ñ0Ô0Ð0Ø”kÔ6ð 	Hð 	HˆFØÔ)×0Ò0µÀÑ1FÔ1FÑGÔGÐGÐGð	Hð 	Hr*   c           
     óB  — | j         rqt          j        || j        j        d¦  «        }t          j        || j        j        d¦  «        }	|j                             ||f||f||f||	f||	f|	|f|	|fg¦  «         d S |j                             ||f||f||f||fg¦  «         d S r<   ©r   r   r´   r   r?   rµ   r¶   )
r'   r9   rD   rE   rF   rG   rB   rC   Úparent_post_updatesÚparent_pre_updatess
             r(   rA   z%ManyToOneDP.per_property_dependencies‡  s  € ð Ôð 	Ý",Ô":Ø�T”[Ô4°eñ#ô #Ðõ ",Ô!9Ø�T”[Ô4°dñ"ô "Ðð Ô×#Ò#à  *Ð-Ø! :Ð.ØÐ!4Ð5ØÐ!3Ð4Ø"Ð$6Ð7Ø'¨Ð7Ø'¨Ð8ðñ
ô 
ð 
ð 
ð 
ð Ô×#Ò#à  *Ð-Ø Ð.Ø! =Ð1Ø# ]Ð3ð	ñô ð ð ð r*   c	                ó@  — | j         r°|sit          j        || j        j        d¦  «        }	|r"|j                             ||	f|	|fg¦  «         d S |j                             ||f||f||	fg¦  «         d S t          j        || j        j        d¦  «        }
|j                             ||
f|
|f|
|fg¦  «         d S |sC|s"|j                             ||f||fg¦  «         d S |j                             ||fg¦  «         d S |r|j                             ||fg¦  «         d S d S r<   rç   )r'   r9   rº   r»   r_   rB   rC   rW   rb   rè   ré   s              r(   rV   z"ManyToOneDP.per_state_dependencies®  sÕ  € ð Ôð +	IØð Ý&0Ô&>Ø˜œÔ8¸%ñ'ô 'Ð#ð !ð ØÔ$×+Ò+à'Ð)<Ð=Ø0°,Ð?ðñô ð ð ð ð Ô$×+Ò+à(¨*Ð5Ø)¨:Ð6Ø'Ð)<Ð=ðñô ð ð ð õ &0Ô%=Ø˜œÔ8¸$ñ&ô &Ð"ð Ô ×'Ò'à&Ð(:Ð;Ø+¨]Ð;Ø+¨\Ð:ðñô ð ð ð ð ð 
	IØ ð EØÔ ×'Ò'Ø" JÐ/°*¸kÐ1JÐKñô ð ð ð ð Ô ×'Ò'¨*°kÐ)BÐ(CÑDÔDÐDÐDÐDð ð IØÔ ×'Ò'¨-¸Ð)FÐ(GÑHÔHÐHÐHÐHðIð Ir*   c                ó¸  — | j         j        s| j         j        r¿|D ]¾}|                     || j        | j        ¦  «        }|r—| j         j        r|                     ¦   «         }n|                     ¦   «         }|D ]_}|€Œ|                     |dd| j	        ¬¦  «         | j
                             d|¦  «        }|D ]\  }}	}
}|                     |
d¬¦  «         ŒŒ`Œ½d S d S )NTr¿   rË   r¾   )r   r¿   rÂ   ru   r"   r   ÚsumÚnon_deletedrÃ   r   r   rÍ   )r'   rh   rT   r5   r{   Útodeleter^   ÚtrÏ   rÐ   rÑ   rÒ   s               r(   ri   zManyToOneDP.presort_deletesæ  s8  € ØŒ<Ôð 	J $¤,Ô"<ð 	JØð Jð J�Ø#×9Ò9Ø˜4œ8 TÔ%>ñô �ð ð JØ”|Ô1ð 9Ø#*§;¢;¡=¤=˜˜à#*×#6Ò#6Ñ#8Ô#8˜Ø!)ð Jð J˜Ø ˜=Ø$Ø!×1Ò1Ø!Ø%)Ø&.Ø!%¤ð	 2ñ ô ð ð !œK×8Ò8¸À5ÑIÔI˜Ø/0ð Jð J™O˜A˜q # tØ%×5Ò5°cÀDÐ5ÑIÔIÐIÐIðJøð)	Jð 	JðJð Jr*   c                óž  — |D ]É}|                      |d| j        ¬¦  «         | j        j        rž|                     || j        | j        ¦  «        }|r{|j        D ]s}|                      |¦  «        du rZ|                      |dd| j        ¬¦  «         | j	         
                    d|¦  «        }|D ]\  }}}	}
|                      |	d¬¦  «         ŒŒtŒÊd S )NrÉ   rÀ   FTr¿   rË   r¾   )rÃ   r   r   rÂ   ru   r"   r   r`   r3   r   rÍ   )r'   rh   rT   r5   r{   r^   rï   rÏ   rÐ   rÑ   rÒ   s              r(   rl   zManyToOneDP.presort_savesþ  s  € Øð 	Nð 	NˆEØ×%Ò% e°uÀ4Ä9Ð%ÑMÔMÐMØŒ|Ô)ð NØ#×9Ò9Ø˜4œ8 TÔ%>ñô �ð ð NØ!(¤ð Nð N˜ØŸ>š>¨%Ñ0Ô0°EÐ9Ð9Ø%×5Ò5Ø %Ø)-Ø*2Ø%)¤Yð	 6ñ ô ð ð !%¤× <Ò <¸XÀuÑ MÔ M˜AØ34ð Nð N¡  1 c¨4Ø )× 9Ò 9¸#ÈÐ 9Ñ MÔ MÐ MÐ Møøð%	Nð 	Nr*   c                ó8  — | j         rŒ| j        j        s‚| j        dk    sy|D ]x}|                      |d d d|¦  «         |rU| j         rN|                     || j        | j        ¦  «        }|r+|                      ||| 	                    ¦   «         d¬¦  «         Œsd S d S d S d S )Nr½   T)r¢   )
r   r   rÂ   r   r�   ru   r"   r   r£   rì   )r'   rh   rT   r5   r{   s        r(   rn   zManyToOneDP.process_deletes  sé   € àÔð	à”LÔ.ð	ð Ô(¨EÒ1Ð1ð
  ð 	ð 	�Ø×!Ò! %¨¨t°T¸9ÑEÔEÐEØð ˜TÔ-ð Ø'×=Ò=Ø˜tœx¨Ô)Bñô �Gð ð Ø×)Ò)Ø! 9¨g¯kªk©m¬mÈ4ð *ñ ô ð øð	ð 	ð 	ð 	ð 2Ð1ð
	ð 	r*   c           
     óZ  — |D ]§}|                      || j        t          j        ¦  «        }|r}|j        r%|j        D ]}|                      ||d d|d¦  «         Œn!|j        r|                      |d d d|d¦  «         | j        r)|                      ||| 	                    ¦   «         ¦  «         Œ¨d S )NFrÉ   Tr¿   )
ru   r"   r   r   rÌ   r�   r`   r   r£   rì   )r'   rh   rT   r5   r{   r^   s         r(   rq   zManyToOneDP.process_saves'  sõ   € Øð 	Gð 	GˆEØ×5Ò5Ø�t”x¥Ô!Añô ˆGð ð GØ”=ð Ø!(¤ð ð ˜Ø×)Ò)Ø! 5¨$°°yÀ%ñô ð ð ðð ”_ð Ø×%Ò%Ø˜t T¨4°¸Hñô ð ð Ô#ð GØ×%Ò% e¨Y¸¿º¹¼ÑFÔFÐFøð	Gð 	Gr*   Nc           	     óÌ  — |�| j         s|                     |¦  «        rd S |�S|�Q|j                             |¦  «        s7t	          j        dt          j        |¦  «        ›d|›d| j        ›d�¦  «         d S |s|€'t          j
        || j        | j        j        ¦  «         d S |                      |¦  «         t          j        || j        || j        | j        j        |d¦  «         d S )NúObject of type ú not in session, ú operation along 'ú' won't proceedF)r   r×   ÚsessionÚ_contains_stater	   ÚwarnÚ
mapperutilÚstate_class_strr   r   rØ   r   r$   r‡   rÙ   r   ©r'   r5   r^   r‹   rŒ   rh   rÁ   s          r(   r�   zManyToOneDP._synchronize9  s  € ð ˆ=ØÔ ð Ø%.×%9Ò%9¸%Ñ%@Ô%@ð ð ˆFð Ð!ØÐ!ØÔ%×5Ò5°eÑ<Ô<ð "õ ŒIˆIõ Ô-¨eÑ4Ô4Ð4Ð4°i°i°iÀÄÀÀðLñô ð ð
 ˆFàð 	˜˜ÝŒJ�u˜dœk¨4¬9Ô+FÑGÔGÐGÐGÐGà× Ò  Ñ'Ô'Ð'ÝŒMØØ”ØØ”Ø”	Ô+ØØñô ð ð ð r*   r,   )r«   r­   r®   r)   rA   rV   ri   rl   rn   rq   r�   rf   r*   r(   rá   rá   �  s§   € € € € € ðHð Hð Hð
%ð %ð %ðN6Ið 6Ið 6IðpJð Jð Jð0Nð Nð Nð*ð ð ð(Gð Gð Gð2 ð&ð &ð &ð &ð &ð &r*   rá   c                  óT   — 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d„ ZdS )rå   a”  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                ó�   — | j         j        r#| j        rd S dd„ | j         j        D ¦   «         v rd S |                     | d¦  «         d S )NFc              3  ó$   K  — | ]}|j         V — Œd S r,   )r   )r‘   r   s     r(   ú	<genexpr>z=DetectKeySwitch.per_property_preprocessors.<locals>.<genexpr>s  s9   è è € ð ð àð Ô(ðð ð ð ð ð r*   )r   r•   r   r7   r8   s     r(   r:   z*DetectKeySwitch.per_property_preprocessorsn  sp   € ØŒ9Ô&ð 	ØÔ#ð Ø�àð ð à $¤	Ô ;ðñ ô ð ð ð �Fà×!Ò! $¨Ñ.Ô.Ð.Ð.Ð.r*   c                ó¬   — t          j        || j        j        ¦  «        }t          j        || dd¦  «        }|j                             ||fg¦  «         d S re   )r   r>   r   rL   r=   rµ   r¶   )r'   r9   rD   rB   s       r(   rH   z*DetectKeySwitch.per_property_flush_actions{  sT   € Ý!Ô/°°T´[Ô5LÑMÔMˆÝÔ*¨3°°e¸UÑCÔCˆ
ØÔ×Ò ,°
Ð!;Ð <Ñ=Ô=Ð=Ð=Ð=r*   c                ó   — d S r,   rf   )r'   r9   rT   rW   s       r(   rc   z'DetectKeySwitch.per_state_flush_actions€  ro   r*   c                ó   — d S r,   rf   rg   s      r(   ri   zDetectKeySwitch.presort_deletesƒ  ro   r*   c                óD   — | j         s|                      ||¦  «         d S d S r,   ©r   Ú_process_key_switches)r'   r9   rT   s      r(   rl   zDetectKeySwitch.presort_saves†  s5   € ØÔ#ð 	4ð ×&Ò& v¨sÑ3Ô3Ð3Ð3Ð3ð	4ð 	4r*   c                ób   — |s,| j         r%|                      ||¦  «        }t          |¦  «        S dS re   )r   Ú_key_switchersÚbool)r'   r9   rT   rW   Úds        r(   r|   z DetectKeySwitch.prop_has_changesŒ  s9   € Øð 	˜DÔ0ð 	Ø×#Ò# C¨Ñ0Ô0ˆAÝ˜‘7”7ˆNàˆur*   c                ó   — J ‚r,   rf   rg   s      r(   rn   zDetectKeySwitch.process_deletes“  s   € Øˆur*   c                óD   — | j         sJ ‚|                      ||¦  «         d S r,   r  rg   s      r(   rq   zDetectKeySwitch.process_saves–  s/   € ð
 Ô#Ð#Ð#Ð#Ø×"Ò" 6¨9Ñ5Ô5Ð5Ð5Ð5r*   c                óü   — |                      d| fd„ ¦  «        \  }}|                     |¦  «        }|D ]G}||vrA|                      ||¦  «        r|                     |¦  «         Œ2|                     |¦  «         ŒH|S )NÚpk_switchersc                 ó:   — t          ¦   «         t          ¦   «         fS r,   )r™   rf   r*   r(   ú<lambda>z0DetectKeySwitch._key_switchers.<locals>.<lambda>   s   € ­S©U¬UµC±E´E¨N€ r*   )r˜   Úunionr¦   rÉ   )r'   r9   rT   ÚswitchedÚnotswitchedÚ	allstatesrz   s          r(   r	  zDetectKeySwitch._key_switchersž  s–   € Ø #§¢Ø˜TÐ"Ð$:Ð$:ñ!
ô !
Ñˆ�+ð —N’N ;Ñ/Ô/ˆ	Øð 	'ð 	'ˆAØ˜	Ð!Ð!Ø×$Ò$ S¨!Ñ,Ô,ð 'Ø—L’L ‘O”O�O�Oà—O’O AÑ&Ô&Ð&øØˆr*   c           
     óX  — |                       ||¦  «        }|�r|j        j                             ¦   «         D ]ñ}t	          |j        | j        j        ¦  «        sŒ"|j        }|                     | j	        ¦  «         
                    ||| j        ¬¦  «        }|t          j        urƒ|��| j        j        r|sŒ}|d         }n|}t          j        |¦  «        }||v rO|                     |d| j        ¦  «         t'          j        || j        || j        | j        j        || j        ¦  «         Œðd S d S )N)ry   r   F)r	  rø   Úidentity_mapÚ
all_statesÚ
issubclassr†   r   rP   r2   r"   Úgetr    r   ÚPASSIVE_NO_RESULTr   rƒ   Úinstance_staterÃ   r   r   rÙ   r   r$   )	r'   Údeplistrh   Ú	switchersr5   Údict_r¡   Úrelated_objÚrelated_states	            r(   r  z%DetectKeySwitch._process_key_switches¬  s^  € Ø×'Ò'¨	°7Ñ;Ô;ˆ	Øñ !	ð #Ô*Ô7×BÒBÑDÔDð ð �Ý! %¤,°´Ô0BÑCÔCð ØØœ
�ØŸ.š.¨¬Ñ2Ô2×6Ò6Ø˜5¨$Ô*Cð 7ñ ô �ð ¥:Ô#?Ð?Ð?ØÐ+à”yÔ(ð .Ø&ð %Ø$Ø&-¨a¤j˜˜à&-˜Ý$.Ô$=¸kÑ$JÔ$J�MØ$¨	Ð1Ð1Ø!×1Ò1Ø! 5¨$Ô*>ñô ð õ œØ)Ø œKØ!Ø œKØ œIÔ7Ø%Ø Ô0ñô ð øð3!	ð !	ðð r*   c                óv   — t          |j        ¦  «        o%t          j        ||| j        | j        j        ¦  «        S r,   )r
  r"   r   rÞ   r   r   r$   r¥   s      r(   r¦   zDetectKeySwitch._pks_changedÑ  s6   € Ý�E”I‰Œð 
¥4Ô#7Ø�u˜dœk¨4¬9Ô+Fñ$
ô $
ð 	
r*   N)r«   r­   r®   Ú__doc__r:   rH   rc   ri   rl   r|   rn   rq   r	  r  r¦   rf   r*   r(   rå   rå   b  sÄ   € € € € € ð	ð 	ð/ð /ð /ð>ð >ð >ð
ð ð ðð ð ð4ð 4ð 4ðð ð ðð ð ð6ð 6ð 6ðð ð ð#ð #ð #ðJ
ð 
ð 
ð 
ð 
r*   rå   c                  óD   — e Zd Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Z	d„ Z
d	„ Zd
S )ÚManyToManyDPc           
     ód   — |j                              ||f||f||f||f||f||f||fg¦  «         d S r,   ©rµ   r¶   )r'   r9   rD   rE   rF   rG   rB   rC   s           r(   rA   z&ManyToManyDP.per_property_dependenciesØ  sh   € ð 	Ô×Òà˜zÐ*Ø˜jÐ)Ø˜]Ð+ð  Ð-Ø Ð/Ø Ð.Ø Ð,ðñ	
ô 	
ð 	
ð 	
ð 	
r*   c	                óÖ   — |sF|r"|j                              ||f||fg¦  «         d S |j                              ||f||fg¦  «         d S |j                              ||f||fg¦  «         d S r,   r'  )	r'   r9   rº   r»   r_   rB   rC   rW   rb   s	            r(   rV   z#ManyToManyDP.per_state_dependenciesó  s½   € ð ð 	Øð ØÔ ×'Ò'Ø! :Ð.°¸\Ð0JÐKñô ð ð ð ð Ô ×'Ò'Ø! :Ð.°¸zÐ0JÐKñô ð ð ð ð Ô×#Ò#Ø Ð.°ÀÐ0NÐOñô ð ð ð r*   c                ód   — | j         s&|D ]%}|                     || j        | j        ¦  «         Œ$d S d S r,   )r   ru   r"   r   )r'   rh   rT   r5   s       r(   ri   zManyToManyDP.presort_deletes  s]   € ð Ô#ð 	ð  ð ð �Ø×/Ò/Ø˜4œ8 TÔ%>ñô ð ð ð	ð 	ðð r*   c                óþ  — | j         sA|D ]>}|                      ||¦  «        r&|                     || j        t          j        ¦  «         Œ?| j        j        sd S |D ]£}|                     || j        t          j        ¦  «        }|ry|j	        D ]q}|  
                    |¦  «        du rX|                     |dd| j        ¬¦  «         | j                             d|¦  «        D ]\  }}}}	|                     |d¬¦  «         ŒŒrŒ¤d S )NFTr¿   rË   r¾   )r   r¦   ru   r"   r   r   r   rÂ   r   r`   r3   rÃ   r   r   rÍ   )
r'   rh   rT   r5   r{   r^   rÏ   rÐ   rÑ   rÒ   s
             r(   rl   zManyToManyDP.presort_saves  sa  € ØÔ#ð 	ð  ð ð �Ø×$Ò$ Y°Ñ6Ô6ð Ø×3Ò3Ø˜tœx­Ô)?ñô ð øð Œ|Ô)ð 	ØˆFð ð 	Jð 	JˆEØ×5Ò5Ø�t”x¥Ô!Añô ˆGð ð JØ$œ_ð Jð J�EØ—~’~ eÑ,Ô,°Ð5Ð5Ø!×1Ò1Ø!Ø%)Ø&.Ø!%¤ð	 2ñ ô ð ð 04¬{×/KÒ/KØ$ eñ0ô 0ð Jð J™O˜A˜q # tð &×5Ò5°cÀDÐ5ÑIÔIÐIÐIøøð!	Jð 	Jr*   c           
     ó  ‡— g }g }g }|                       |¦  «        }t          ¦   «         }|D ]¬Š|                     ‰| j        | j        ¦  «        }|r‡|                     ¦   «         D ]?}	|	�|�‰|	f|v rŒi }
|                      ‰|	|
d|d¦  «        sŒ*|                     |
¦  «         Œ@|                     ˆfd„|                     ¦   «         D ¦   «         ¦  «         Œ­|�|                     |¦  «         |  	                    ||||¦  «         d S )NFr¿   c              3  ó    •K  — | ]}|‰fV — Œ	d S r,   rf   ©r‘   rÏ   r5   s     €r(   r  z/ManyToManyDP.process_deletes.<locals>.<genexpr>Y  s'   øè è € ÐCÐC¨!˜A˜u˜:ÐCÐCÐCÐCÐCÐCr*   )
r›   r™   ru   r"   r   Ú	non_addedr�   rU   r¶   Ú	_run_crud)r'   rh   rT   Úsecondary_deleteÚsecondary_insertÚsecondary_updateÚ	processedÚtmpr{   r^   r‹   r5   s              @r(   rn   zManyToManyDP.process_deletes:  sl  ø€ ØÐØÐØÐà×4Ò4°YÑ?Ô?ˆ	Ý‰eŒeˆØð 	Dð 	DˆEð  ×5Ò5Ø�t”x Ô!:ñô ˆGð ð DØ$×.Ò.Ñ0Ô0ð <ð <�EØ�}Ø!Ð-°5¸%°.ÀIÐ2MÐ2Mà Ø%'�NØ×,Ò,ØØØ&ØØ!Ø ñô ð !ð !Ø$×+Ò+¨NÑ;Ô;Ð;Ð;à—
’
ÐCÐCÐCÐC¨w×/@Ò/@Ñ/BÔ/BÐCÑCÔCÑCÔCÐCøàÐ Ø×Ò˜SÑ!Ô!Ð!à�ŠØÐ'Ð)9Ð;Kñ	
ô 	
ð 	
ð 	
ð 	
r*   c           
     óü  ‡— g }g }g }|                       |¦  «        }t          ¦   «         }|D �]žŠ| j         o|                      |‰¦  «        }|rt          j        t          j        z  }	nt          j        t          j        z  }	|                     ‰| j	        |	¦  «        }
|
�r)|
j
        D ]=}|�‰|f|v rŒi }|                      ‰||d|d¦  «        sŒ(|                     |¦  «         Œ>|
j        D ]=}|�‰|f|v rŒi }|                      ‰||d|d¦  «        sŒ(|                     |¦  «         Œ>|                     ˆfd„|
j
        |
j        z   D ¦   «         ¦  «         |ro|
j        D ]g}i }t!          j        ‰| j        |d| j        j        ¦  «         t!          j        || j        |d| j        j        ¦  «         |                     |¦  «         Œh�Œ |�|                     |¦  «         |                      ||||¦  «         d S )NFrÉ   r¿   c              3  ó    •K  — | ]}|‰fV — Œ	d S r,   rf   r-  s     €r(   r  z-ManyToManyDP.process_saves.<locals>.<genexpr>’  s'   øè è € ÐOÐO¨!˜A˜u˜:ÐOÐOÐOÐOÐOÐOr*   Úold_)r›   r™   r   r¦   r   r   rs   r   ru   r"   rÌ   r�   rU   r`   r¶   rÄ   r   r   r   r$   r   Úsecondary_synchronize_pairsr/  )r'   rh   rT   r0  r1  r2  r3  r4  Úneed_cascade_pksry   r{   r^   r‹   r5   s                @r(   rq   zManyToManyDP.process_savesb  s±  ø€ ØÐØÐØÐà×4Ò4°YÑ?Ô?ˆ	Ý‰eŒeˆàð <	@ñ <	@ˆEØ#'Ô#7Ð7ð  ¸D×<MÒ<MØ˜5ñ=ô =Ðð  ð 	åÔ*Ý Ô:ñ;ð �õ Ô4Ý Ô:ñ;ð ð  ×5Ò5°e¸T¼XÀwÑOÔOˆGØñ -@Ø$œ]ð <ð <�EØ Ð,°%¸°À9Ð1LÐ1LØ Ø%'�NØ×,Ò,Ø˜u n°e¸YÈñô ð !ð !Ø$×+Ò+¨NÑ;Ô;Ð;Ð;Ø$œ_ð <ð <�EØ Ð,°%¸°À9Ð1LÐ1LØ Ø%'�NØ×,Ò,ØØØ&ØØ!Ø ñô ð !ð !Ø$×+Ò+¨NÑ;Ô;Ð;Ð;à—
’
ÐOÐOÐOÐO¨w¬}¸w¼Ñ/NÐOÑOÔOÑOÔOÐOà#ð @Ø!(Ô!2ð @ð @˜Ø)+˜ÝœØ!Ø œKØ*Ø"Ø œIÔ7ñô ð õ œØ!Ø œKØ*Ø"Ø œIÔAñô ð ð )×/Ò/°Ñ?Ô?Ð?Ð?ùàÐ Ø×Ò˜SÑ!Ô!Ð!à�ŠØÐ'Ð)9Ð;Kñ	
ô 	
ð 	
ð 	
ð 	
r*   c                óì  ‡— |j                              | j        ¦  «        }|rÎ|d         Š| j                             ¦   «                              t          j        ˆfd„| j        j        D ¦   «         Ž ¦  «        }| 	                    ||¦  «        }| 
                    ¦   «         rN|j        t          |¦  «        k    r6t          j        d| j        j        t          |¦  «        |j        fz  ¦  «        ‚|rÎ|d         Š| j                             ¦   «                              t          j        ˆfd„| j        j        D ¦   «         Ž ¦  «        }| 	                    ||¦  «        }| 
                    ¦   «         rN|j        t          |¦  «        k    r6t          j        d| j        j        t          |¦  «        |j        fz  ¦  «        ‚|r1| j                             ¦   «         }| 	                    ||¦  «         d S d S )Nr   c                ój   •— g | ]/}|j         ‰v ¯|t          j        |j         |j        ¬ ¦  «        k    ‘Œ0S )©Útype_©r"   r   Ú	bindparamÚtype©r‘   rÏ   r‹   s     €r(   r“   z*ManyToManyDP._run_crud.<locals>.<listcomp>¸  sH   ø€ ð ð ð àØœ5 NÐ2Ð2ð �Sœ]¨1¬5¸¼Ð?Ñ?Ô?Ò?à2Ð2Ð2r*   zRDELETE statement on table '%s' expected to delete %d row(s); Only %d were matched.c                óp   •— g | ]2}|j         ‰v ¯|t          j        d |j         z   |j        ¬¦  «        k    ‘Œ3S )r7  r<  r>  rA  s     €r(   r“   z*ManyToManyDP._run_crud.<locals>.<listcomp>Ò  sL   ø€ ð ð ð àØœ5 NÐ2Ð2ð �Sœ]¨6°A´E©>ÀÄÐHÑHÔHÒHà2Ð2Ð2r*   zRUPDATE statement on table '%s' expected to update %d row(s); Only %d were matched.)ÚtransactionÚ
connectionr   r   r¿   Úwherer   Úand_rÏ   ÚexecuteÚsupports_sane_multi_rowcountÚrowcountÚlenr   ÚStaleDataErrorÚdescriptionr¶   Úinsert)	r'   rh   r1  r2  r0  rD  Ú	statementÚresultr‹   s	           @r(   r/  zManyToManyDP._run_crud¯  s=  ø€ ð Ô*×5Ò5°d´kÑBÔBˆ
àð 	Ø-¨aÔ0ˆNØœ×-Ò-Ñ/Ô/×5Ò5Ý”ðð ð ð à!%¤Ô!1ðñ ô ðñô ˆIð  ×'Ò'¨	Ð3CÑDÔDˆFð ×3Ò3Ñ5Ô5ðà”/¥SÐ)9Ñ%:Ô%:Ò:Ð:ÝÔ(ð7ð œÔ2ÝÐ,Ñ-Ô-Øœðññô ð ð ð 	Ø-¨aÔ0ˆNØœ×-Ò-Ñ/Ô/×5Ò5Ý”ðð ð ð à!%¤Ô!1ðñ ô ðñô ˆIð  ×'Ò'¨	Ð3CÑDÔDˆFð ×3Ò3Ñ5Ô5ðà”/¥SÐ)9Ñ%:Ô%:Ò:Ð:ÝÔ(ð7ð œÔ2ÝÐ,Ñ-Ô-Øœðññô ð ð ð 	<Øœ×-Ò-Ñ/Ô/ˆIØ×Ò˜yÐ*:Ñ;Ô;Ð;Ð;Ð;ð	<ð 	<r*   c           	     ó„  — |                       |¦  «         |€dS |�X|j                             |¦  «        s>|j        s5t	          j        dt          j        |¦  «        ›d|›d| j        ›d�¦  «         dS t          j
        || j        || j        j        ¦  «         t          j
        || j        || j        j        ¦  «         dS )NFrô   rõ   rö   r÷   T)r‡   rø   rù   r`   r	   rú   rû   rü   r   r   Úpopulate_dictr   r$   r   r8  rý   s          r(   r�   zManyToManyDP._synchronizeì  sç   € ð 	×Ò˜UÑ#Ô#Ð#ð ˆ=Ø�5àÐ YÔ%6×%FÒ%FÀuÑ%MÔ%MÐØ”=ð Ý”	�	õ "Ô1°%Ñ8Ô8Ð8Ð8¸)¸)¸)ÀTÄYÀYÀYðPñô ð ð
 �5åÔØ�4”; °´	Ô0Kñ	
ô 	
ð 	
õ 	ÔØØŒKØØŒIÔ1ñ		
ô 	
ð 	
ð ˆtr*   c                óN   — t          j        ||| j        | j        j        ¦  «        S r,   rÝ   r¥   s      r(   r¦   zManyToManyDP._pks_changed  rß   r*   N)r«   r­   r®   rA   rV   ri   rl   rn   rq   r/  r�   r¦   rf   r*   r(   r%  r%  ×  s¦   € € € € € ð
ð 
ð 
ð6ð ð ð2
ð 
ð 
ð Jð  Jð  JðD&
ð &
ð &
ðPK
ð K
ð K
ðZ;<ð ;<ð ;<ðzð ð ð@
ð 
ð 
ð 
ð 
r*   r%  N)r#  Ú
__future__r   Ú r   r   r   r   r	   rû   Ú
interfacesr
   r   r   r%   r   r   r±   rá   rå   r%  r-   rf   r*   r(   ú<module>rV     s  ðð !Ð  à "Ð "Ð "Ð "Ð "Ð "à Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø  Ð  Ð  Ð  Ð  Ð  Ø "Ð "Ð "Ð "Ð "Ð "Ø !Ð !Ð !Ð !Ð !Ð !Ø !Ð !Ð !Ð !Ð !Ð !Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð ðn?ð n?ð n?ð n?ð n?ñ n?ô n?ð n?ðb	r
ð r
ð r
ð r
ð r
Ð%ñ r
ô r
ð r
ðj	^ð ^ð ^ð ^ð ^Ð%ñ ^ô ^ð ^ðBr
ð r
ð r
ð r
ð r
Ð)ñ r
ô r
ð r
ðjx
ð x
ð x
ð x
ð x
Ð&ñ x
ô x
ð x
ðx	 ˆ{Øˆ{Ø�ðÐ Ð Ð r*   