§ <ˆjܵãó*—dZddlmZddlmZddlmZddlmZddlmZddlm Z ddlm Z dd lm Z d dlmZ d d lm Z d dlmZGd „d e¦«ZGd„de¦«ZGd„de¦«ZGd„de¦«ZGd„de¦«Ze ee ee eiZdS)zRelationship dependencies. é)Ú attributes)Úexc)Úsync)Ú unitofwork)Úutil)Ú MANYTOMANY)Ú MANYTOONE)Ú ONETOMANYé)Úsqlcó†—eZdZd„Zed„¦«Zd„Zd„Zd„Zd„Z d„Z d„Z d „Z d „Z d „Zd „Zd „Zd„Zdd„Zd„Zd„ZdS)ÚDependencyProcessorcóü—||_|j|_|j|_|j|_|j|_|j|_|j|_|j|_|j|_|j |_ |jrtj |_ ntj |_ |jrtj |_ntj |_|j|_|jjst#jd|jz¦«‚dS)Nz|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ÚkeyÚsynchronize_pairsÚsa_excÚ ArgumentError)Úselfrs úP/opt/cloudlinux/venv/lib64/python3.11/site-packages/sqlalchemy/orm/dependency.pyÚ__init__zDependencyProcessor.__init__sî€ØˆŒ Ø”|ˆŒ Ø”kˆŒ Ø”kˆŒ ØœˆŒØœˆŒØÔ+ˆÔØ#Ô3ˆÔØ#Ô3ˆÔØ!%Ô!7ˆÔØ Ô ð ?Ý(2Ô(HˆDÔ %Ð %å(2Ô(>ˆDÔ %Ø Ô ð ?Ý(2Ô(HˆDÔ %Ð %å(2Ô(>ˆDÔ %à”8ˆŒØŒyÔ*ð ÝÔ&ð$à&*¤iñ0ñôð ð ð ócó6—t|j|¦«S©N)Ú_direction_to_processorr)Úclsrs r#Úfrom_relationshipz%DependencyProcessor.from_relationship6s€å& t¤~Ô6°tÑ<Ô<Ðr=Ú child_actionsÚchild_in_cyclesr?rAÚparent_in_cyclesr0Úsum_Ú child_stateÚchildÚ child_actionÚdeletedÚlistonlyÚ childisdeletes r#Úper_state_flush_actionsz+DependencyProcessor.per_state_flush_actionsgs€ð!œ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˜:Ø ¤Ð+Ð+Ø#'Ð ðð7 ñ7 ˆEð”= ¤Ô*Ô/×?Ò?ØØ” àð6�Ô)Ð)åÔ5ñ ôˆ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˜ ˜ à.1¬j¸Ô.EÑ+˜ (Ø"ð å *Ô 6°s¸KÑ HÔ HØ $ð,˜L˜Lõ !+Ô :¸3À Ñ LÔ LØ %ð,˜Lð"×(Ò(¨Ñ6Ô6Ð6Ð6ð0=ð ð Ñ+� ˜mØ×+Ò+ØØ Ø"Ø ØØ!ØØ!ñ ô ð ð ñ ð[7 ð7 r%có—dS©NF©©r"Ú uowcommitrOs r#Úpresort_deletesz#DependencyProcessor.presort_deletes×ó€Øˆur%có—dSr`rarbs r#Ú presort_savesz!DependencyProcessor.presort_savesÚrer%có—dSr'rarbs r#Úprocess_deletesz#DependencyProcessor.process_deletesÝó€Ø ˆr%có—dSr'rarbs r#Ú process_savesz!DependencyProcessor.process_savesàrjr%có*—|r|jr tj}n'|jtur tj}n tj}|D]7}| ||j|¦«}|r|  ¦«sdSŒ8|o|j j o |j |j vS)NT)rrrrr ÚPASSIVE_NO_FETCH_RELATEDrÚget_attribute_historyrÚemptyrÚ_is_self_referentialrÚmappers)r"rcrOrRÚpassiveÚsÚhistorys r#Úprop_has_changesz$DependencyProcessor.prop_has_changesãs²€Øð -˜4Ô/ð -Ý Ô6ˆGˆGØ Œ^�yÐ (Ð (Ý Ô9ˆGˆGå Ô,ˆGàð ð ˆAð ×5Ò5°a¸¼À7ÑKÔKˆGØð ˜wŸ}š}™œð Ø�t�tøðð5Øœ Ô6Ð6ð5à”K 9Ô#4Ð4ð r%có¦—|jjr|€tjd|j›�¦«‚|�¢|j ||j ¬¦«s‚|j |d¬¦«r5tjd|j|j|jj|jdœz¦«‚tjd|j|j|jjdœz¦«‚dSdS)Nz+Can't flush None value found in collection )Úallow_subtypesTaEAttempting 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.)ryrzr{)rÚuselistrÚ FlushErrorrÚ_canloadrÚclass_r/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"r0rYÚassociationrowÚ clearkeysrcs r#Ú _synchronizez DependencyProcessor._synchronize"ó€Ý!Ñ#Ô#Ð#r%cóÊ—|jjsdStt|jgd„|jjD¦«z¦«¦«}| d|ft ¦«S)Ncó—g|] }|j‘Œ Sra)r)Ú.0Úps r#ú zCDependencyProcessor._get_reversed_processed_set..*s€Ð LÐ LÐ L¨1 ¤Ð LÐ LÐ Lr%Ú reverse_key)rÚ_reverse_propertyÚtupleÚsortedrÚmemoÚset)r"r4Ú process_keys r#Ú_get_reversed_processed_setz/DependencyProcessor._get_reversed_processed_set%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„|jjD¦«¦«dSŒ4dS)Ncó—g|]\}}|‘ŒSrara)r‹ÚlÚrs r#r�z4DependencyProcessor._post_update..2s€ÐFÐFÐF¡$ ! Q˜AÐFÐFÐFr%)Úregister_post_updaterr)r"r0rcÚrelatedÚ is_m2o_deleterys r#Ú _post_updatez DependencyProcessor._post_update.sf€Øð ð ˆAØ ð  A MØ×.Ò.ØÐFÐF¨$¬)Ô*EÐFÑFÔFñôðð��ð %2ð ð r%có—t¦«‚r'rƒ©r"rcr0s r#Ú _pks_changedz DependencyProcessor._pks_changed6rˆr%có0—|jj›d|j›d�S)Nú(ú))Ú __class__Ú__name__r)r"s r#Ú__repr__zDependencyProcessor.__repr__9s€Øœ>Ô2Ð2Ð2°D´I°I°IÐ>Ð>r%N)F)r¥Ú __module__Ú __qualname__r$Ú classmethodr*r.r5rCr^rdrgrirlrvr�r‡r•r�r r¦rar%r#rrs,€€€€€ðððð8ð=ð=ñ„[ð=ðMðMðMð.ð.ð.ð ð ð ð8nðnðnð`ðððððð ð ð ð ð ð ðððð,'ð'ð'ðR$ð$ð$ð;ð;ð;ððððð$ð$ð$ð?ð?ð?ð?ð?r%rcó>—eZdZd„Zd„Zd„Zd„Zd„Zd„Zd„Z d„Z d S) Ú OneToManyDPc óN—|jrntj||jjd¦«}tj||jjd¦«} |j ||f||f||f|| f| |f| |fg¦«dS|j ||f||f||f||f||f||f||fg¦«dSr7©rrÚ PostUpdateAllrr:Ú dependenciesÚupdate) r"r4r?r@rArBr=r>Úchild_post_updatesÚchild_pre_updatess r#r<z%OneToManyDP.per_property_dependencies>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—|jrÑtj||jjd¦«} tj||jjd¦«} |sI|r"|j ||f|| fg¦«dS|j ||f||f|| fg¦«dS|r"|j || f| |fg¦«dS|j || f| |fg¦«dS|s%|j ||f||f||fg¦«dS|j ||f||fg¦«dSr7r­) r"r4Ú save_parentÚ delete_parentrZr=r>rRr]r±r²s r#rQz"OneToManyDP.per_state_dependenciesgsè€ð Ô ð5 å!+Ô!9Ø�T”[Ô4°eñ"ô"Ð õ!+Ô 8Ø�T”[Ô4°dñ!ô!Ð ð ð Ø ðØÔ$×+Ò+à)¨:Ð6Ø'Ð);Ð<ðñôððððÔ$×+Ò+à(¨*Ð5Ø)¨:Ð6Ø'Ð);Ð<ðñôðððð!ð ØÔ$×+Ò+à*Ð,=Ð>Ø.° Ð>ðñôððððÔ$×+Ò+à*Ð,=Ð>Ø.° Ð>ðñôðððð ð Ø Ô × #Ò #à  *Ð-Ø Ð.Ø  ,Ð/ðñ ô ð ð ð ð Ô × #Ò #Ø Ð.°¸}Ð0MÐNñ ô ð ð ð r%có–—|jj o |jdk }|D]¬}| ||j|j¦«}|r‡|jD]T}|�P| |¦«dur9|jjr|  |d¬¦«Œ?|  |¦«ŒU|r)|j D]!}|�|  |d|j ¬¦«Œ"Œ­dS)NÚallFT©rRÚdelete©Ú operationr) rr¹rrorrr[r.Ú delete_orphanÚregister_objectÚ unchangedr©r"rcrOÚshould_null_fksr0rurYs r#rdzOneToManyDP.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 óh—| d|ft¦«}|jj o |jdk }|D�]w}| ||¦«}|r|jr tj}n tj }|  ||j |¦«}|rê|j D]"} | �|  | dd|j¬¦«Œ#| |j ¦«|jD]ž} |jjs!|r|  | dd|j¬¦«Œ/| | ¦«durX|  | dd|j¬¦«|j d| ¦«D]\} } } } |  | d¬ ¦«ŒŒŸ|r2|r0|jD](} | �$|  | d|jd |j¬ ¦«Œ)�ŒydS) NÚchildren_addedr·TÚadd)Ú cancel_deleter»rFr¹©rRr»rr¸z pk changerº)r’r“rr¼rr rrrrrorÚaddedr½rr°r[r.rÚcascade_iteratorr¾)r"rcrOrÂrÀr0Ú pks_changedrsrurYÚcÚmÚst_Údct_s r#rgzOneToManyDP.presort_savesÅsW€Ø"ŸšÐ)9¸4Ð(@Å#ÑFÔFˆð” Ô*Ð *ð 2ØÔ(¨EÒ1Ð1ð ð ð4 ñ4 ˆEØ×+Ò+¨I°uÑ=Ô=ˆKàð 1 $Ô"6ð 1Ý$Ô:��å$Ô0�à×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ñôðøùð]4 ð4 r%c ój—|js |jdk�s| d|ft¦«}|D]ÿ}| ||j|j¦«}|rØ|jD]V}|�R| |¦«dur;|  ||dd|d¦«|jr|r|  |||g¦«ŒW|js |j j sgt|j ¦« |¦«D]?}|�;|  ||dd|d¦«|jr|r|  |||g¦«Œ@ŒþdSdS)Nr·rÂFT)rrr’r“rorrr[r.r‡r�rr¹r¾Ú difference)r"rcrOrÂr0rurYs r#rizOneToManyDP.process_deletess°€ð Ô ð & 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 ó—|jj o |jdk }|D]ð}| ||jt j¦«}|rÆ|jD]=}| ||dd|d¦«|�|j r|  |||g¦«Œ>|j D]?}|r;|jjs/|  |¦«s| ||dd|d¦«Œ@|  ||¦«r$|jD]}| ||dd|d¦«ŒŒñdS)Nr·FT)rr¼rrorrrrÆr‡rr�r[r.r r¾r¿s r#rlzOneToManyDP.process_saves/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—|}|}| |¦«|�|js| |¦«rdS|r'tj||j|jj¦«dStj||j ||j|jj||j o|¦«dSr') r�rÚ is_deletedrÚclearrrrÚpopulaterr) r"r0rYr…r†rcrÈÚsourceÚdests r#r‡zOneToManyDP._synchronizeQs¼€ðˆØˆØ ×Ò˜UÑ#Ô#Ð#Ø ˆ<ØÔ ð Ø%.×%9Ò%9¸$Ñ%?Ô%?ð ð ˆFØ ð Ý ŒJ�t˜Tœ[¨$¬)Ô*EÑ FÔ FÐ FÐ FÐ Få ŒMØØ” ØØ” Ø” Ô+ØØÔ$Ð4¨ñ ô ð ð ð r%cóN—tj|||j|jj¦«Sr'©rÚsource_modifiedrrrrŸs r#r zOneToManyDP._pks_changedhó'€ÝÔ#Ø �u˜dœk¨4¬9Ô+Fñ ô ð r%N) r¥r§r¨r<rQrdrgrirlr‡r rar%r#r«r«=s”€€€€€ð'ð'ð'ðRAðAðAðFððð6<ð<ð<ð|%&ð%&ð%&ðX ð ð ðDððð. ð ð ð ð r%r«cóB—eZdZd„Zd„Zd„Zd„Zd„Zd„Zd„Z d d „Z dS) Ú ManyToOneDPcó¨—t ||¦«|jjD])}|j t |¦«¦«Œ*dSr')rr$rÚself_and_descendantsÚ_dependency_processorsrPÚDetectKeySwitch)r"rrs r#r$zManyToOneDP.__init__os\€Ý×$Ò$ T¨4Ñ0Ô0Ð0Ø”kÔ6ð Hð HˆFØ Ô )× 0Ò 0µÀÑ1FÔ1FÑ GÔ GÐ GÐ Gð Hð Hr%c óB—|jrqtj||jjd¦«}tj||jjd¦«} |j ||f||f||f|| f|| f| |f| |fg¦«dS|j ||f||f||f||fg¦«dSr7©rrr®rr:r¯r°) r"r4r?r@rArBr=r>Úparent_post_updatesÚparent_pre_updatess r#r<z%ManyToOneDP.per_property_dependenciests€ð Ô ð Ý",Ô":Ø�T”[Ô4°eñ#ô#Ð õ",Ô!9Ø�T”[Ô4°dñ"ô"Ð ð Ô × #Ò #à  *Ð-Ø! :Ð.ØÐ!4Ð5ØÐ!3Ð4Ø"Ð$6Ð7Ø'¨Ð7Ø'¨Ð8ðñ ô ð ð ð ð Ô × #Ò #à  *Ð-Ø Ð.Ø! =Ð1Ø# ]Ð3ð ñ ô ð ð ð r%c ó@—|jr°|sitj||jjd¦«} |r"|j || f| |fg¦«dS|j ||f||f|| fg¦«dStj||jjd¦«} |j || f| |f| |fg¦«dS|sC|s"|j ||f||fg¦«dS|j ||fg¦«dS|r|j ||fg¦«dSdSr7rá) r"r4r´rµrZr=r>rRr]rârãs r#rQz"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ð Ir%có¸—|jjs |jjr¿|D]¾}| ||j|j¦«}|r—|jjr| ¦«}n| ¦«}|D]_}|€Œ| |dd|j ¬¦«|j   d|¦«}|D]\}} } } | | d¬¦«ŒŒ`Œ½dSdS)NTr¹rÅr¸) rr¹r¼rorrÚsumÚ non_deletedr½rrrÇ) r"rcrOr0ruÚtodeleterYÚtrÉrÊrËrÌs r#rdzManyToOneDP.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ð Jr%cóž—|D]É}| |d|j¬¦«|jjrž| ||j|j¦«}|r{|jD]s}| |¦«durZ| |dd|j¬¦«|j   d|¦«}|D]\}}} } | | d¬¦«ŒŒtŒÊdS)NrÃrºFTr¹rÅr¸) r½rrr¼rorrr[r.rrÇ) r"rcrOr0rurYrérÉrÊrËrÌs r#rgzManyToOneDP.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ð Nr%có8—|jrŒ|jjs‚|jdksy|D]x}| |ddd|¦«|rU|jrN| ||j|j¦«}|r+| |||  ¦«d¬¦«ŒsdSdSdSdS)Nr·T)rœ) rrr¼rr‡rorrr�ræ)r"rcrOr0rus r#rizManyToOneDP.process_deletessé€à Ô ð à”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]§}| ||jtj¦«}|r}|jr%|jD]}| ||dd|d¦«Œn!|jr| |ddd|d¦«|jr)| |||  ¦«¦«Œ¨dS)NFrÃTr¹) rorrrrÆr‡r[rr�ræ)r"rcrOr0rurYs r#rlzManyToOneDP.process_savessõ€Øð Gð GˆEØ×5Ò5Ø�t”x¥Ô!AñôˆGðð GØ”=ðØ!(¤ðð˜Ø×)Ò)Ø! 5¨$°°yÀ%ñôðððð”_ðØ×%Ò%ؘt T¨4°¸HñôððÔ#ðGØ×%Ò% e¨Y¸¿ º ¹ ¼ ÑFÔFÐFøð Gð Gr%Nc óÌ—|�|js| |¦«rdS|�S|�Q|j |¦«s7t jdt j|¦«›d|›d|j›d�¦«dS|s|€'tj ||j |jj ¦«dS|  |¦«tj||j||j |jj |d¦«dS)NúObject of type ú not in session, ú operation along 'ú' won't proceedF)rrÑÚsessionÚ_contains_staterÚwarnÚ mapperutilÚstate_class_strrrrÒrrr�rÓr©r"r0rYr…r†rcr»s r#r‡zManyToOneDP._synchronize*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$r<rQrdrgrirlr‡rar%r#rÛrÛns§€€€€€ðHðHðHð &ð&ð&ðP8Ið8Ið8IðtJðJðJð0NðNðNð*ððð*GðGðGð2ð&ð&ð&ð&ð&ð&r%rÛcóT—eZdZdZd„Zd„Zd„Zd„Zd„Zd„Z d„Z d „Z d „Z d „Z d „Zd 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ó�—|jjr#|jrdSdd„|jjD¦«vrdS| |d¦«dS)NFc3ó$K—|] }|jV—Œ dSr')r)r‹rs r#ú z=DetectKeySwitch.per_property_preprocessors..ds9èè€ððàðÔ(ððððððr%)rr�rr2r3s r#r5z*DetectKeySwitch.per_property_preprocessors_sp€Ø Œ9Ô &ð ØÔ#ð Ø�àððà $¤ Ô ;ðñôððð�Fà ×!Ò! $¨Ñ.Ô.Ð.Ð.Ð.r%có¬—tj||jj¦«}tj||dd¦«}|j ||fg¦«dSr`)rr9rrGr8r¯r°)r"r4r?r=s r#rCz*DetectKeySwitch.per_property_flush_actionslsT€Ý!Ô/°°T´[Ô5LÑMÔMˆ ÝÔ*¨3°°e¸UÑCÔCˆ Ø Ô×Ò ,° Ð!;Ð <Ñ=Ô=Ð=Ð=Ð=r%có—dSr'ra)r"r4rOrRs r#r^z'DetectKeySwitch.per_state_flush_actionsqrjr%có—dSr'rarbs r#rdzDetectKeySwitch.presort_deletestrjr%cóD—|js| ||¦«dSdSr'©rÚ_process_key_switches)r"r4rOs r#rgzDetectKeySwitch.presort_savesws5€ØÔ#ð 4ð × &Ò & v¨sÑ 3Ô 3Ð 3Ð 3Ð 3ð 4ð 4r%cób—|s,|jr%| ||¦«}t|¦«SdSr`)rÚ_key_switchersÚbool)r"r4rOrRÚds r#rvz DetectKeySwitch.prop_has_changes}s9€Øð ˜DÔ0ð Ø×#Ò# C¨Ñ0Ô0ˆAݘ‘7”7ˆNàˆur%có—J‚r'rarbs r#rizDetectKeySwitch.process_deletes„s€Øˆur%cóD—|jsJ‚| ||¦«dSr'rrbs r#rlzDetectKeySwitch.process_saves‡s/€ð Ô#Ð#Ð#Ð#Ø ×"Ò" 6¨9Ñ5Ô5Ð5Ð5Ð5r%cóü—| d|fd„¦«\}}| |¦«}|D]G}||vrA| ||¦«r| |¦«Œ2| |¦«ŒH|S)NÚ pk_switcherscó:—t¦«t¦«fSr')r“rar%r#úz0DetectKeySwitch._key_switchers..‘s€­S©U¬UµC±E´E¨N€r%)r’Úunionr rÃ)r"r4rOÚswitchedÚ notswitchedÚ allstatesrts r#rzDetectKeySwitch._key_switchers�s–€Ø #§¢Ø ˜TÐ "Ð$:Ð$:ñ! ô! ш�+ð—N’N ;Ñ/Ô/ˆ Øð 'ð 'ˆAؘ Ð!Ð!Ø×$Ò$ S¨!Ñ,Ô,ð'Ø—L’L ‘O”O�O�Oà—O’O AÑ&Ô&Ð&øØˆr%c óX—| ||¦«}|�r|jj ¦«D]ñ}t |j|jj¦«sŒ"|j}| |j ¦«  |||j ¬¦«}|tj urƒ|��|jjr |sŒ}|d}n|}tj|¦«}||vrO| |d|j¦«t'j||j||j|jj||j¦«ŒðdSdS)N)rséF)rròÚ identity_mapÚ all_statesÚ issubclassr€rrKr-rÚgetrrÚPASSIVE_NO_RESULTrr}Úinstance_stater½rrrÓrr) r"ÚdeplistrcÚ switchersr0Údict_r›Ú related_objÚ related_states r#rz%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%tj|||j|jj¦«Sr')rrrrØrrrrŸs r#r zDetectKeySwitch._pks_changedÂs6€Ý�E”I‰Œð ¥4Ô#7Ø �u˜dœk¨4¬9Ô+Fñ$ ô$ ð r%N)r¥r§r¨Ú__doc__r5rCr^rdrgrvrirlrrr rar%r#rßrßSsÄ€€€€€ð ð ð /ð /ð /ð>ð>ð>ð  ð ð ð ð ð ð4ð4ð4ð ðððððð6ð6ð6ð ð ð ð#ð#ð#ðJ ð ð ð ð r%rßcóD—eZdZd„Zd„Zd„Zd„Zd„Zd„Zd„Z d„Z d „Z d S) Ú ManyToManyDPc ód—|j ||f||f||f||f||f||f||fg¦«dSr'©r¯r°)r"r4r?r@rArBr=r>s r#r<z&ManyToManyDP.per_property_dependenciesÉsh€ð Ô×Òà˜zÐ*ؘjÐ)ؘ]Ð+ð   Ð-Ø Ð/Ø  Ð.Ø  Ð,ð ñ ô ð ð ð r%c óÖ—|sF|r"|j ||f||fg¦«dS|j ||f||fg¦«dS|j ||f||fg¦«dSr'r") r"r4r´rµrZr=r>rRr]s r#rQz#ManyToManyDP.per_state_dependenciesås½€ðð Øð ØÔ ×'Ò'Ø! :Ð.°¸\Ð0JÐKñôððððÔ ×'Ò'Ø! :Ð.°¸zÐ0JÐKñôðððð Ô × #Ò #Ø Ð.°À Ð0NÐOñ ô ð ð ð r%cód—|js&|D]%}| ||j|j¦«Œ$dSdSr')rrorr)r"rcrOr0s r#rdzManyToManyDP.presort_deletesþs]€ðÔ#ð ð ð ð �Ø×/Ò/ؘ4œ8 TÔ%>ñôððð  ð ð ð r%cóþ—|jsA|D]>}| ||¦«r&| ||jtj¦«}Œ?|jjsdS|D]£}| ||jtj¦«}|ry|j D]q}|  |¦«durX|  |dd|j ¬¦«|j  d|¦«D]\}}}} |  |d¬¦«ŒŒrŒ¤dS)NFTr¹rÅr¸)rr rorrrrr¼rr[r.r½rrrÇ) r"rcrOr0rurYrÉrÊrËrÌs r#rgzManyToManyDP.presort_saves s^€ØÔ#ð ð ð ð �Ø×$Ò$ Y°Ñ6Ô6ðØ'×=Ò=ؘtœx­Ô)?ñô�GøðŒ|Ô)ð Ø ˆ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ð Jr%c ó‡ —g}g}g}| |¦«}t¦«}|D]¬Š | ‰ |j|j¦«}|r‡| ¦«D]?} | �|�‰ | f|vrŒ i} | ‰ | | d|d¦«sŒ*| | ¦«Œ@| ˆ fd„| ¦«D¦«¦«Œ­|�| |¦«|  ||||¦«dS)NFr¹c3ó •K—|]}|‰fV—Œ dSr'ra©r‹rÉr0s €r#rûz/ManyToManyDP.process_deletes..Ks'øèè€ÐCÐC¨!˜A˜u˜:ÐCÐCÐCÐCÐCÐCr%) r•r“rorrÚ non_addedr‡rPr°Ú _run_crud) r"rcrOÚsecondary_deleteÚsecondary_insertÚsecondary_updateÚ processedÚtmprurYr…r0s @r#rizManyToManyDP.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 tj} n tj} | ‰ |j| ¦«} | �r)| j D]=} |�‰ | f|vrŒ i} |  ‰ | | d|d¦«sŒ(|  | ¦«Œ>| j D]=} |�‰ | f|vrŒ i} |  ‰ | | d|d¦«sŒ(|  | ¦«Œ>|  ˆ fd„| j | j zD¦«¦«|ro| jD]g} i} tj ‰ |j| d|jj¦«tj | |j| d|jj¦«|  | ¦«Œh�Œ†|�|  |¦«| ||||¦«dS)NFrÃr¹c3ó •K—|]}|‰fV—Œ dSr'rar(s €r#rûz-ManyToManyDP.process_saves..~s'øèè€ÐOÐO¨!˜A˜u˜:ÐOÐOÐOÐOÐOÐOr%Úold_)r•r“rr rrrrorrÆr‡rPr[r°r¾rrrrrÚsecondary_synchronize_pairsr*)r"rcrOr+r,r-r.r/Úneed_cascade_pksrsrurYr…r0s @r#rlzManyToManyDP.process_savesTs‘ø€ØÐØÐØÐà×4Ò4°YÑ?Ô?ˆ ݉eŒeˆàð7 @ñ7 @ˆEØ#'Ô#7Ð7ð ¸D×.¥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¯ |tjd|jz|j¬¦«k‘Œ3S)r2r7r9r<s €r#r�z*ManyToManyDP._run_crud..¿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Ú connectionrrr¹r Úand_rÉÚexecuteÚsupports_sane_multi_rowcountÚrowcountÚlenrÚStaleDataErrorÚ descriptionr°Úinsert) r"rcr,r-r+r?Ú statementÚresultr…s @r#r*zManyToManyDP._run_crudœs%ø€ðÔ*×5Ò5°d´kÑBÔBˆ à ð Ø-¨aÔ0ˆNØœ×-Ò-Ý”ððððà!%¤Ô!1ðñôðñôˆIð ×'Ò'¨ Ð3CÑDÔDˆFð×3Ò3Ñ5Ô5ð à”/¥SÐ)9Ñ%:Ô%:Ò:Ð:ÝÔ(ð7ðœÔ2ÝÐ,Ñ-Ô-Øœðññôðð ð Ø-¨aÔ0ˆNØœ×-Ò-Ý”ððððà!%¤Ô!1ðñôðñôˆIð ×'Ò'¨ Ð3CÑDÔDˆFð×3Ò3Ñ5Ô5ð à”/¥SÐ)9Ñ%:Ô%:Ò:Ð:ÝÔ(ð7ðœÔ2ÝÐ,Ñ-Ô-Øœðññôðð ð <Øœ×-Ò-Ñ/Ô/ˆIØ × Ò ˜yÐ*:Ñ ;Ô ;Ð ;Ð ;Ð ;ð <ð |js5t jdt j|¦«›d|›d|j›d�¦«dStj ||j ||jj ¦«tj ||j ||jj¦«dS)NFrîrïrðrñT)r�ròrór[rrôrõrörrÚ populate_dictrrrr3r÷s r#r‡zManyToManyDP._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—tj|||j|jj¦«Sr'r×rŸs r#r zManyToManyDP._pks_changedúrÙr%N) r¥r§r¨r<rQrdrgrirlr*r‡r rar%r#r r Ès¦€€€€€ð ð ð ð8ððð2 ð ð ð Jð Jð JðD& ð& ð& ðPF ðF ðF ðP;<ð;<ð;<ðzðððB ð ð ð ð r%r N)rÚrrrrrrõÚ interfacesrr r r r Úobjectrr«rÛrßr r(rar%r#úrPsùððððÐÐÐÐÐØÐÐÐÐÐØÐÐÐÐÐØÐÐÐÐÐØ Ð Ð Ð Ð Ð Ø"Ð"Ð"Ð"Ð"Ð"Ø!Ð!Ð!Ð!Ð!Ð!Ø!Ð!Ð!Ð!Ð!Ð!ØÐÐÐÐÐØÐÐÐÐÐØÐÐÐÐÐða?ða?ða?ða?ða?˜&ña?ôa?ða?ðH n ðn ðn ðn ðn Ð%ñn ôn ðn ðb bðbðbðbðbÐ%ñbôbðbðJr ðr ðr ðr ðr Ð)ñr ôr ðr ðju ðu ðu ðu ðu Ð&ñu ôu ðu ðr ˆ{Ø ˆ{Ø� ðÐÐÐr%