idܵ*dZddlmZddlmZddlmZddlmZddlmZddlm Z ddlm Z dd lm Z d dlmZ d d lm Z d dlmZGd d eZGddeZGddeZGddeZGddeZe ee ee eiZdS)zRelationship dependencies. ) attributes)exc)sync) unitofwork)util) MANYTOMANY) MANYTOONE) ONETOMANY)sqlceZdZdZedZdZdZdZdZ dZ dZ d Z d Z d Zd Zd ZdZddZdZdZdS)DependencyProcessorc||_|j|_|j|_|j|_|j|_|j|_|j|_|j|_|j|_|j |_ |jrtj |_ ntj |_ |jrtj |_ntj |_|j|_|jjst#jd|jzdS)Nz|Can't build a DependencyProcessor for relationship %s. No target attributes to populate between parent and child are present)propcascademapperparent secondary direction post_updatepassive_deletespassive_updatesenable_typechecksrPASSIVE_NO_INITIALIZE_passive_delete_flag PASSIVE_OFF_passive_update_flagkeysynchronize_pairssa_exc ArgumentError)selfrs N/opt/cloudlinux/venv/lib/python3.11/site-packages/sqlalchemy/orm/dependency.py__init__zDependencyProcessor.__init__s | k k +#3#3!%!7   ?(2(HD % %(2(>D %   ?(2(HD % %(2(>D %8y* &$&*i0   c6t|j|SN)_direction_to_processorr)clsrs r#from_relationshipz%DependencyProcessor.from_relationship6s&t~6t<<r= child_actionschild_in_cyclesr?rAparent_in_cyclesr0sum_ child_statechild child_actiondeletedlistonly childisdeletes r#per_state_flush_actionsz+DependencyProcessor.per_state_flush_actionsgs!K; .s4EFF ",S2CDD  '&1#tT4HHM%)M " "#.sD%FFJ"&J  cj ( ( ! 2222*51M43HIM#OO"O (%3T[,L.2 1N]sz))#' '1#t{7NOON(, ,L:++#' 7 7 E=*/?? 6))5 D  J * 7T4 O O #H%/%;C%G%GN'4S$uMM #J#-#=c5#I#IL 7 " *.77&K"#*44'3 .1j.E+("  * 6sK H H $,LL !+ :3 L L %,L"((66660=  + m++ " !!     [7 7 r%cdSNFr" uowcommitrOs r#presort_deletesz#DependencyProcessor.presort_deletesur%cdSr`rarbs r# presort_savesz!DependencyProcessor.presort_savesrer%cdSr'rarbs r#process_deletesz#DependencyProcessor.process_deletes r%cdSr'rarbs r# process_savesz!DependencyProcessor.process_savesrjr%c*|r|jr tj}n'|jtur tj}n tj}|D]7}|||j|}|r| sdS8|o|j j o |j |j vS)NT)rrrrr PASSIVE_NO_FETCH_RELATEDrget_attribute_historyremptyr_is_self_referentialrmappers)r"rcrOrRpassiveshistorys r#prop_has_changesz$DependencyProcessor.prop_has_changess -4/ - 6GG ^y ( ( 9GG ,G  A 55a7KKG w}} tt5 665K9#44 r%c|jjr|tjd|j||j||j s|j|dr5tjd|j|j|jj|jdztjd|j|j|jjdzdSdS)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. )xyzzmzAttempting 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{)ruselistr FlushErrorr_canloadrclass_r/s r#_verify_canloadz#DependencyProcessor._verify_canloads 9 & ..#'99/  t{';'; d&<"<(<( ( {##E$#?? n=#\!Y![/"k $n! #\!Y![/    -   r%ctr'NotImplementedError)r"r0rYassociationrow clearkeysrcs r# _synchronizez DependencyProcessor._synchronize"!###r%c|jjsdStt|jgd|jjDz}|d|ft S)Ncg|] }|j Sra)r).0ps r# zCDependencyProcessor._get_reversed_processed_set..*s L L L1 L L Lr% reverse_key)r_reverse_propertytuplesortedrmemoset)r"r4 process_keys r#_get_reversed_processed_setz/DependencyProcessor._get_reversed_processed_set%sfy* 4 DH: L L 0K L L LL M M  xx 4c:::r%Fcr|D]3}|r|-||d|jjDdS4dS)Ncg|]\}}|Srara)rlrs r#rz4DependencyProcessor._post_update..2sFFF$!QAFFFr%)register_post_updaterr)r"r0rcrelated is_m2o_deleterys r# _post_updatez DependencyProcessor._post_update.sf  A  AM..FF$)*EFFF %2  r%ctr'rr"rcr0s r# _pks_changedz DependencyProcessor._pks_changed6rr%c0|jjd|jdS)N()) __class____name__r)r"s r#__repr__zDependencyProcessor.__repr__9s>222DIII>>r%N)F)r __module__ __qualname__r$ classmethodr*r.r5rCr^rdrgrirlrvrrrrrrrar%r#rrs,8==[=MMM...   8nnn`      ,'''R$$$;;;$$$?????r%rc>eZdZdZdZdZdZdZdZdZ dZ d S) OneToManyDPc N|jrntj||jjd}tj||jjd} |j||f||f||f|| f| |f| |fgdS|j||f||f||f||f||f||f||fgdSr7rr PostUpdateAllrr: dependenciesupdate) r"r4r?r@rArBr=r>child_post_updateschild_pre_updatess r#r<z%OneToManyDP.per_property_dependencies>s   !+!9T[4e"" !+ 8T[4d!!    # # *-!:.!34"$56&7& 6         # #!:.-/ .1"N3"K0"M2     r%c D|jrtj||jjd} tj||jjd} |sI|r"|j||f|| fgdS|j||f||f|| fgdS|r"|j|| f| |fgdS|j|| f| |fgdS|s%|j||f||f||fgdS|j||f||fgdSr7r) r"r4 save_parent delete_parentrZr=r>rRr]rrs r#rQz"OneToManyDP.per_state_dependenciesgs  5 !+!9T[4e"" !+ 8T[4d!!    $++):6');<$++(*5):6');<! $++*,=>. >$++*,=>. >     # # *-. ,/        # #.}0MN     r%c|jj o |jdk }|D]}|||j|j}|r|jD]T}|P||dur9|jjr| |d?| |U|r)|j D]!}|| |d|j "dS)NallFTrRdelete operationr) rrrrorrr[r. delete_orphanregister_object unchangedrr"rcrOshould_null_fksr0rurYs r#rdzOneToManyDP.presort_deletess  # # ID,@E,I(I   E55tx!:G $_==E(T^^E-B-Be-K-K<5=%55ed5KKKK%55e<<<"!(!2 ,%55 % 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|jd| D]\} } } } | | d |r2|r0|jD](} | $| | d|jd |j )ydS) Nchildren_addedrTadd) cancel_deleterrFrrRrrrz pk changer)rrrrrrrrrrroraddedrrrr[r.rcascade_iteratorr)r"rcrOrrr0 pks_changedrsrurYcmst_dct_s r#rgzOneToManyDP.presort_savessW")94(@#FF * * 2(E11  4 4 E++Iu==K 1$"6 1$:$055eTXwOOG J$]E(!11!*.&+!% 2%%gm444$_JJE<5J*%55 %).*2%)Y 6 ..%77!11!%)&.!% 2 04{/K/K$e00JJOAq#t&55cD5IIII  !(!2 ,%55 % % $ 4*5%)Y 6]4 4 r%c j|js |jdks|d|ft}|D]}|||j|j}|r|jD]V}|R||dur;| ||dd|d|jr|r| |||gW|js |j j sgt|j |D]?}|;| ||dd|d|jr|r| |||g@dSdS)NrrFT)rrrrrorrr[r.rrrrr difference)r"rcrOrr0rurYs r#rizOneToManyDP.process_deletess   &4#75#@#@&^^-=t,DcJJN & &#9948T%>&!( M M!- $u 5 5 > > -- %udD)U $/MEM $ 1 1%UG L L L' &t|/B &%():%;%;%F%F*&& & &E %0 $ 1 1$)5$i!"!"!"$(#3!&!&$($5$5(-y5'%&%&%&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|ddS)NrFT)rrrrorrrrrrrr[r.rrrs r#rlzOneToManyDP.process_saves/s * * 2(E11    E55tx!AG $]EEE%%udE9e(T-=())%UGDDD$_E' $ :!%u 5 5 ))!5$i$$Y66!(!2))!5$y$1  r%c 4|}|}||||js||rdS|r'tj||j|jjdStj||j ||j|jj||j o|dSr') rr is_deletedrclearrrrpopulaterr) r"r0rYrrrcrsourcedests r#rzOneToManyDP._synchronizeQs U### <  %.%9%9$%?%?  F   JtT[$)*E F F F F F M   +$4     r%cNtj|||j|jjSr'rsource_modifiedrrrrs r#rzOneToManyDP._pks_changedh'# udk49+F   r%N) rrrr<rQrdrgrirlrrrar%r#rr=s'''RAAAF6<<<|%&%&%&X   D.     r%rcBeZdZdZdZdZdZdZdZdZ d d Z dS) ManyToOneDPct|||jjD])}|jt |*dSr')rr$rself_and_descendants_dependency_processorsrPDetectKeySwitch)r"rrs r#r$zManyToOneDP.__init__os\$$T4000k6 H HF  ) 0 01F1F G G G G H Hr%c B|jrqtj||jjd}tj||jjd} |j||f||f||f|| f|| f| |f| |fgdS|j||f||f||f||fgdSr7rrrrr:rr) r"r4r?r@rArBr=r>parent_post_updatesparent_pre_updatess r#r<z%ManyToOneDP.per_property_dependenciests   ",":T[4e## ",!9T[4d""    # # *-!:.!45!34"$67'7'8        # # *-.!=1#]3      r%c @|jr|sitj||jjd} |r"|j|| f| |fgdS|j||f||f|| fgdStj||jjd} |j|| f| |f| |fgdS|sC|s"|j||f||fgdS|j||fgdS|r|j||fgdSdSr7r) r"r4rrrZr=r>rRr]rrs r#rQz"ManyToOneDP.per_state_dependenciess  , I &0&>8%''#!$++')<=0,?$++(*5):6')<=&0%=8$&&" ''&(:;+];+\: I  E ''"J/*k1JK ''*k)B(CDDDDD I ''-)F(GHHHHH I Ir%c|jjs |jjr|D]}|||j|j}|r|jjr|}n|}|D]_}|||dd|j |j d|}|D]\}} } } || d`dSdS)NTrrr) rrrrorrsum non_deletedrrrr) r"rcrOr0rutodeleterYtrrrrs r#rdzManyToOneDP.presort_deletess8 <  J$,"< J J J#9948T%>J|19#*;;==#*#6#6#8#8!) J J =$!11!%)&.!% 2 !K885II/0JJOAq#t%55cD5IIIIJ) J J J Jr%c|D]}||d|j|jjr|||j|j}|r{|jD]s}||durZ||dd|j|j d|}|D]\}}} } || dtdS)NrrFTrrr) rrrrrorrr[r.rr) r"rcrOr0rurYrrrrrs r#rgzManyToOneDP.presort_savess N NE  % %eu49 % M M M|) N#9948T%> N!( N N>>%00E99%55 %)-*2%)Y 6!% < z=DetectKeySwitch.per_property_preprocessors..ds9(r%)rrrr2r3s r#r5z*DetectKeySwitch.per_property_preprocessors_sp 9 & #  $ ;F !!$.....r%ctj||jj}tj||dd}|j||fgdSr`)rr9rrGr8rr)r"r4r?r=s r#rCz*DetectKeySwitch.per_property_flush_actionslsT!/T[5LMM *3eUCC  , !; <=====r%cdSr'ra)r"r4rOrRs r#r^z'DetectKeySwitch.per_state_flush_actionsqrjr%cdSr'rarbs r#rdzDetectKeySwitch.presort_deletestrjr%cD|js|||dSdSr'r_process_key_switches)r"r4rOs r#rgzDetectKeySwitch.presort_savesws5# 4  & &vs 3 3 3 3 3 4 4r%cb|s,|jr%|||}t|SdSr`)r_key_switchersbool)r"r4rOrRds r#rvz DetectKeySwitch.prop_has_changes}s9 D0 ##C00A77Nur%cJr'rarbs r#rizDetectKeySwitch.process_deletess r%cD|jsJ|||dSr'rrbs r#rlzDetectKeySwitch.process_savess/ #### ""6955555r%c|d|fd\}}||}|D]G}||vrA|||r||2||H|S)N pk_switchersc:ttfSr')rrar%r#z0DetectKeySwitch._key_switchers..sSUUCEENr%)runionrr)r"r4rOswitched notswitched allstatesrts r#rzDetectKeySwitch._key_switcherss # T "$:$:! ! +NN;//  ' 'A !!$$S!,,'LLOOOOOOA&&&r%c X|||}|r|jjD]}t |j|jjs"|j}||j  |||j }|tj ur||jjr |s}|d}n|}tj|}||vrO||d|jt'j||j||j|jj||jdSdS)N)rsF)rr identity_map all_states issubclassrrrKr-rgetrrPASSIVE_NO_RESULTrr}instance_staterrrrrr) r"deplistrc switchersr0dict_r related_obj related_states r#rz%DetectKeySwitch._process_key_switchess^'' 7;; ! #*7BBDD  !%, 0BCC ..22665$*C7:#???+y(.&%$&-aj &- $.$=k$J$JM$ 11!11!5$*> ) K! K I7% 03! !   r%cvt|jo%tj|||j|jjSr')rrrrrrrrs r#rzDetectKeySwitch._pks_changeds6EI 4#7 udk49+F$ $  r%N)rrr__doc__r5rCr^rdrgrvrirlrrrrar%r#rrSs   / / />>>       444 666   ###J     r%rcDeZdZdZdZdZdZdZdZdZ dZ d Z d S) ManyToManyDPc d|j||f||f||f||f||f||f||fgdSr'rr)r"r4r?r@rArBr=r>s r#r<z&ManyToManyDP.per_property_dependenciessh z*j)]+  -/ . ,      r%c |sF|r"|j||f||fgdS|j||f||fgdS|j||f||fgdSr'r") r"r4rrrZr=r>rRr]s r#rQz#ManyToManyDP.per_state_dependenciess   ''!:.\0JK ''!:.z0JK   # #. 0NO     r%cd|js&|D]%}|||j|j$dSdSr')rrorr)r"rcrOr0s r#rdzManyToManyDP.presort_deletess]#    //48T%>     r%c|jsA|D]>}|||r&|||jtj}?|jjsdS|D]}|||jtj}|ry|j D]q}| |durX| |dd|j |j d|D]\}}}} | |drdS)NFTrrr)rrrorrrrrrr[r.rrrr) r"rcrOr0rurYrrrrs r#rgzManyToManyDP.presort_saves s^#    $$Y66'==tx)?G|)  F J JE55tx!AG J$_ J JE~~e,,55!11!%)&.!% 2 04{/K/K$e00JJOAq#t&55cD5IIII! J Jr%c  g}g}g}||}t}|D] | |j|j}|r|D]?} | | | f|vr i} | | | d|ds*|| @| fd|D|||| ||||dS)NFrc3 K|]}|fV dSr'rarrr0s r#rz/ManyToManyDP.process_deletes..Ks'CC!Au:CCCCCCr%) rrrorr non_addedrrPr _run_crud) r"rcrOsecondary_deletesecondary_insertsecondary_update processedtmprurYrr0s @r#rizManyToManyDP.process_deletes,sl44Y?? ee D DE 55tx!:G D$..00<| j D]=} | | f|vr i} | | | d|ds(| | >| fd| j | j zD|ro| jD]g} i} tj |j| d|jjtj | |j| d|jj| | h|| ||||||dS)NFrrc3 K|]}|fV dSr'rar(s r#rz-ManyToManyDP.process_saves..~s'OO!Au:OOOOOOr%old_)rrrrrrrrorrrrPr[rrrrrrrsecondary_synchronize_pairsr*)r"rcrOr+r,r-r.r/need_cascade_pksrsrurYrr0s @r#rlzManyToManyDP.process_savesTs44Y?? ee7 @7 @E#'#77 D.sH5N22S]15????222r%zRDELETE statement on table '%s' expected to delete %d row(s); Only %d were matched.cpg|]2}|jv |tjd|jz|jk3S)r2r7r9r<s r#rz*ManyToManyDP._run_crud..sL5N22S]6AE>HHHH222r%zRUPDATE statement on table '%s' expected to update %d row(s); Only %d were matched.) transaction connectionrrrr and_rexecutesupports_sane_multi_rowcountrowcountlenrStaleDataError descriptionrinsert) r"rcr,r-r+r? statementresultrs @r#r*zManyToManyDP._run_cruds%*55dkBB  -a0N--!%!1I '' 3CDDF3355 /S)9%:%:::(72,--  -a0N--!%!1I '' 3CDDF3355 /S)9%:%:::(72,--  <--//I   y*: ; ; ; ; ; < |js5t jdt j|d|d|jddStj ||j ||jj tj ||j ||jjdS)NFrrrrT)rrrr[rrrrrr populate_dictrrrr3rs r#rzManyToManyDP._synchronizes U### =5  Y%6%F%Fu%M%M =  "1%8888)))TYYYP 5  4; 0K      K  I 1    tr%cNtj|||j|jjSr'rrs r#rzManyToManyDP._pks_changedrr%N) rrrr<rQrdrgrirlr*rrrar%r#r r s   82    J J JD& & & PF F F P;<;<;rPs """"""!!!!!!!!!!!!a?a?a?a?a?&a?a?a?H n n n n n %n n n b bbbbb%bbbJr r r r r )r r r ju u u u u &u u u r { { r%