L idZddlmZddlmZddlmZddlmZddlmZddlmZ dd l m Z dd l m Z dd l m Z d dlmZd d lmZd dlmZGddZGddeZGddeZGddeZGddeZe ee ee eiZy)zRelationship dependencies.) annotations) attributes)exc)sync) unitofwork)util) MANYTOMANY) MANYTOONE) ONETOMANY)sqlc~eZdZdZedZdZdZdZdZ dZ dZ d Z d Z d Zd Zd ZdZddZdZdZy)DependencyProcessorc||_|j|_|j|_|j|_|j|_|j |_|j |_|j|_|j|_|j|_ |jrtj|_ ntj|_ |jrtj|_ntj|_|jjd|j |_|j |_|jj$s"t'j(d|jzy)N_z|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_flag _sort_keykeysort_keysynchronize_pairssa_exc ArgumentError)selfrs _/mnt/ssd/data/python-lab/Trading/venv/lib/python3.12/site-packages/sqlalchemy/orm/dependency.py__init__zDependencyProcessor.__init__s || kk kk ++#33#33!%!7!7   (2(H(HD %(2(>(>D %   (2(H(HD %(2(>(>D %#';;#8#8$((C 88yy**&&$&*ii0 +c2t|j|SN)_direction_to_processorr)clsrs r(from_relationshipz%DependencyProcessor.from_relationship9s&t~~6t<tj||jj} dx} }| |jvrd} |D]Z}|j|jjj||j|r |jnt j"}|sa|r1tj$||d|} rGtj&||} n0tj$||d|} rtj(||} | rsg} |D]l\}}||j*vrd}nE|j*|\}}|rtj&||df}ntj(||df}| j-|n D]\}}|j/|| | |||]y)zestablish 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)rr?rr>r@r=disabledcyclesr base_mappermanagerr"implget_all_pendingdictrrr ProcessState DeleteStateSaveUpdateStatestatesappendper_state_dependencies)r'r9rTisdeletechild_base_mapperrErGrCrB child_actionschild_in_cyclesrDrFparent_in_cyclesr5sum_ child_statechild child_actiondeletedlistonly childisdeletes r(per_state_flush_actionsz+DependencyProcessor.per_state_flush_actionsjs!KK;; ..s4EF ",,S2CD &11#tT4HM%)M "#..sD%FJ"&J  cjj ( ! 2 22*51M43HIM#O"O%33T[[,,L.2 1N]szz)#' '11#t{{7N7NON(, ,L:+#' 9 E==*//??  --#99 D * 7 7T4 O #%/%;%;C%GN'44S$uM ##-#=#=c5#IL " *.7&K"#**4'3 .1jj.E+(" * 6 6sK H $,L !+ : :3 L %,L"((67&0= + m++ " !!  _9 r*cyNFr' uowcommitrTs r(presort_deletesz#DependencyProcessor.presort_deletesr*cyrerfrgs r( presort_savesz!DependencyProcessor.presort_savesrjr*cyr,rfrgs r(process_deletesz#DependencyProcessor.process_deletes r*cyr,rfrgs r( process_savesz!DependencyProcessor.process_savesror*c|r |jr"tjtjz}nD|jt urtj }n!tjtjz}|D]4}|j||j|}|s#|jr4y|xr1|jj xr|j|jvS)NT)rrrINCLUDE_PENDING_MUTATIONSrr PASSIVE_NO_FETCH_RELATEDrget_attribute_historyr"emptyr_is_self_referentialrmappers)r'rhrTrWpassiveshistorys r(prop_has_changesz$DependencyProcessor.prop_has_changess4//00667 ^^y ( !99G&&)M)MM  A 55a7KGw}} 5 6665KK9#4#44 r*c.|jjr$|"tjd|j||jj ||j s|jj |drOtjd|j|j|jj|jdztjd|j|j|jjdzyy)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.)rrr)ruselistr FlushErrorr_canloadrclass_r4s r(_verify_canloadz#DependencyProcessor._verify_canloads 99  ..#'99/  t{{';'; d&<&<"<(<( {{##E$#?nn=#\\!YY![[//"kk $nn! #\\!YY![[//   -( r*ctr,NotImplementedError)r'r5r^associationrow clearkeysrhs r( _synchronizez DependencyProcessor._synchronize1 !##r*c |jjsytt|jg|jjDcgc]}|jc}z}|j d|ft Scc}w)N reverse_key)r_reverse_propertytuplesortedr"memoset)r'r9p process_keys r(_get_reversed_processed_setz/DependencyProcessor._get_reversed_processed_set4sfyy** DHH: 0K0K L1 LL M xx 4c::!MsA>c |D]A}|r||j||jjDcgc]\}}| c}}yycc}}wr,)register_post_updaterr$)r'r5rhrelated is_m2o_deleterlrs r( _post_updatez DependencyProcessor._post_update=sO A AM..$))*E*EF$!QAF  Gs Actr,rr'rhr5s r( _pks_changedz DependencyProcessor._pks_changedErr*cN|jjd|jdS)N()) __class____name__r)r's r(__repr__zDependencyProcessor.__repr__Hs>>22DII>>r*N)F)r __module__ __qualname__r) classmethodr/r3r:rHrcrirlrnrqr|rrrrrrrfr*r(rrsk:==M. 8pd  @'R$;$?r*rc<eZdZdZdZdZdZdZdZdZ dZ y ) OneToManyDPc |jrtj||jjd}tj||jjd} |j j ||f||f||f|| f| |f| |fgy|j j ||f||f||f||f||f||f||fgyr<rr PostUpdateAllrr? dependenciesupdate) r'r9rDrErFrGrBrCchild_post_updateschild_pre_updatess r(rAz%OneToManyDP.per_property_dependenciesMs   !+!9!9T[[44e" !+ 8 8T[[44d!     # # *-!:.!34"$56&7& 6      # #!:.-/ .1"N3"K0"M2 r*c z|jrtj||jjd} tj||jjd} |sI|r"|j j ||f|| fgy|j j ||f||f|| fgy|r"|j j || f| |fgy|j j || f| |fgy|s%|j j ||f||f||fgy|j j ||f||fgyr<r) r'r9 save_parent delete_parentr_rBrCrWrbrrs r(rVz"OneToManyDP.per_state_dependenciesvsr   !+!9!9T[[44e" !+ 8 8T[[44d!   $$++):6');<$$++(*5):6');<!$$++*,=>. >$$++*,=>. >     # # *-. ,/     # #.}0MN r*c|jj xr|jdk( }|D]}|j||j|j }|s-|j D]T}||j|dus|jjr|j|dD|j|V|s|jD]#}||j|d|j%y)NallFTrWdelete operationr) rrrrur"rr`r3 delete_orphanregister_object unchangedrr'rhrTshould_null_fksr5r{r^s r(rizOneToManyDP.presort_deletess  ## # ID,@,@E,I(I  E55txx!:!:G$__=E(T^^E-Be-K<<55%55ed5K%55e< =#!(!2!2 ,%55 % 6 r*c 2|jd|ft}|jj xr|jdk( }|D]}|j ||}|r |j r"tjtjz}n!tjtjz}|j||j|}|r|jD]$} | |j| dd|j&|j!|j|j"D]} |jjs#|s|j| dd|j<|j%| dusP|j| dd|j|j&j)d| D]\} } } } |j| d |s|s|j*D]/} | |j| d|j d |j 1y) Nchildren_addedrTadd) cancel_deleterrFrrWrrrz pk changer)rrrrrrrrrrsrrur"addedrrrr`r3rcascade_iteratorr)r'rhrTrrr5 pks_changedryr{r^cmst_dct_s r(rlzOneToManyDP.presort_savess,")94(@#F ** * 2((E11  : E++Iu=K$"6"644 ::; ** ::;  55eTXXwOG$]]E(!11!*.&+!% 2%%gmm4$__JE<<55*%55 %).*2%)YY 6 .%7!11!%)&.!% 2 04{{/K/K$e0JOAq#t&55cD5IJ!J*!(!2!2 ,%55 % % $ 4 4*5%)YY 6e: r*c |js|jdk(s7|jd|ft}|D]}|j ||j |j }|s.|jD]S}||j|dus|j||dd|d|js=|s@|j|||gU|js|jjrt|jj|D]?}||j||dd|d|js)|s,|j|||gAyy)NrrFT)rrrrrur"rr`r3rrrrr difference)r'rhrTrr5r{r^s r(rnzOneToManyDP.process_deletessY   4#7#75#@&^^-=t,DcJN &#99488T%>%>!( M!- $u 5 > -- %udD)U $//E $ 1 1%UG L M''t||/B/B%():):%;%F%F*& &E %0 $ 1 1$)5$i!"$(#3#3$($5$5(-y5'%& &# &$Ar*c t|jj xr|jdk( }|D] }|j||jt j }|s2|jD]<}|j||dd|d||js)|j|||g>|jD]D}|s|jjr|j|r/|j||dd|dF|j||s|jD]}|j||dd|d y)NrFT)rrrrur"rrrrrrr`r3rrrs r(rqzOneToManyDP.process_savesBsF ** * 2((E11   E55txx!A!AG$]]EE%%udE9e(T-=-=))%UGD E%__E' $ : : $u 5))!5$i $$Y6!(!2!2))!5$y$/ r*c |}|}|j|||js|j|ry|r6tj||j |j jytj||j||j |j j||jxr|yr,) rr is_deletedrclearrrr$populaterr) r'r5r^rrrhrsourcedests r(rzOneToManyDP._synchronizeds U# <  Y%9%9$%?   JJtT[[$))*E*E F MM   ++$$4 r*cntj|||j|jjSr,rsource_modifiedrrr$rs r(rzOneToManyDP._pks_changed{,## udkk499+F+F  r*N) rrrrArVrirlrnrqrrrfr*r(rrLs0'R?B6BH%&X D. r*rc@eZdZdZdZdZdZdZdZdZ d d Z y) ManyToOneDPctj|||jjD]&}|jj t |(yr,)rr)rself_and_descendants_dependency_processorsrUDetectKeySwitch)r'rrs r(r)zManyToOneDP.__init__sF$$T40kk66 HF  ) ) 0 01F G Hr*c x|jrtj||jjd}tj||jjd} |j j ||f||f||f|| f|| f| |f| |fgy|j j ||f||f||f||fgyr<rrrrr?rr) r'r9rDrErFrGrBrCparent_post_updatesparent_pre_updatess r(rAz%ManyToOneDP.per_property_dependenciess   ",":":T[[44e# ",!9!9T[[44d"     # # *-!:.!45!34"$67'7'8     # # *-.!=1#]3  r*c t|jr|sttj||jjd} |r"|j j || f| |fgy|j j ||f||f|| fgytj||jjd} |j j || f| |f| |fgy|sC|s"|j j ||f||fgy|j j ||fgy|r|j j ||fgyyr<r) r'r9rrr_rBrCrWrbrrs r(rVz"ManyToOneDP.per_state_dependenciess_   &0&>&>88%'#!$$++')<=0,?$$++(*5):6')<=&0%=%=88$&"  ''&(:;+];+\:   ''"J/*k1JK  ''*k)B(CD  ''-)F(GHr*c|jjs|jjr|D]}|j||j|j }|s-|jjr|j }n|j}|D]_}||j|dd|j|jjd|}|D]\}} } } |j| dayy)NTrrr) rrrrur"rsum non_deletedrrrr) r'rhrTr5r{todeleter^trrrrs r(rizManyToOneDP.presort_deletess <<  $,,"<"< J#99488T%>%>||11#*;;=#*#6#6#8!) J =$!11!%)&.!% 2 !KK885I/0JOAq#t%55cD5IJ J J#=r*c|D]}|j|d|j|jjs8|j ||j |j }|sb|jD]p}|j|dus|j|dd|j|jjd|}|D]\}}} } |j| dry)NrrFTrrr) rrrrrur"rr`r3rr) r'rhrTr5r{r^rrrrrs r(rlzManyToOneDP.presort_savess NE  % %eu499 % M||))#99488T%>%>!( N>>%0E9%55 %)-*2%)YY 6!% < z=DetectKeySwitch.per_property_preprocessors..ss((s)rrrr7r8s r(r:z*DetectKeySwitch.per_property_preprocessorsnsO 99 & &## $ ; ; !!$.r*ctj||jj}tj||dd}|j j ||fgyre)rr>rrLr=rr)r'r9rDrBs r(rHz*DetectKeySwitch.per_property_flush_actions{sP!//T[[5L5LM **3eUC  , !; <=r*cyr,rf)r'r9rTrWs r(rcz'DetectKeySwitch.per_state_flush_actionsror*cyr,rfrgs r(rizDetectKeySwitch.presort_deletesror*cB|js|j||yyr,r_process_key_switches)r'r9rTs r(rlzDetectKeySwitch.presort_savess"##  & &vs 3$r*cZ|s)|jr|j||}t|Syre)r_key_switchersbool)r'r9rTrWds r(r|z DetectKeySwitch.prop_has_changess+D00##C0A7Nr*cJr,rfrgs r(rnzDetectKeySwitch.process_deletessur*cD|jsJ|j||yr,rrgs r(rqzDetectKeySwitch.process_savess# #### ""695r*c|jd|fd\}}|j|}|D]<}||vs|j||r|j|,|j|>|S)N pk_switchersc*ttfSr,)rrfr*r(z0DetectKeySwitch._key_switchers..sSUCENr*)runionrr)r'r9rTswitched notswitched allstatesrzs r(rzDetectKeySwitch._key_switcherssu # T "$:! +NN;/  'A !$$S!,LLOOOA&  ' r*c |j||}|rU|jjjD],}t |j |j j s/|j}|j|jj|||j}|tjus||jjr |s|d}n|}tj |}||vs|j#|d|j$t'j(||j*||j |jj,||j$/yy)N)ryrF)rr identity_map all_states issubclassrrrPr2r"getr rPASSIVE_NO_RESULTrrinstance_staterrrrrr$) r'deplistrh switchersr5dict_r related_obj related_states r(rz%DetectKeySwitch._process_key_switchess:'' 7; #**77BBD !%,, 0B0BC ..2665$*C*C7:#?#??+yy((&$&-aj &- $.$=$=k$JM$ 1!11!5$*>*> ) KK! KK II77% 00-  r*ct|jxr6tj|||j|j j Sr,)rr"rrrrr$rs r(rzDetectKeySwitch._pks_changeds;EII 4#7#7 udkk499+F+F$  r*N)rrr__doc__r:rHrcrirlr|rnrqrrrrfr*r(rrbs?  />   4 6 #J r*rcBeZdZdZdZdZdZdZdZdZ dZ d Z y ) ManyToManyDPc d|jj||f||f||f||f||f||f||fgyr,rr)r'r9rDrErFrGrBrCs r(rAz&ManyToManyDP.per_property_dependenciessW z*j)]+  -/ . ,  r*c |sF|r"|jj||f||fgy|jj||f||fgy|jj||f||fgyr,r$) r'r9rrr_rBrCrWrbs r(rVz#ManyToManyDP.per_state_dependenciess  ''!:.\0JK  ''!:.z0JK    # #. 0NO r*cz|js/|D])}|j||j|j+yyr,)rrur"r)r'rhrTr5s r(rizManyToManyDP.presort_deletes sB##  //488T%>%>  $r*c8|jsE|D]@}|j||s|j||jtj B|j jsy|D]}|j||jtj}|s1|jD]n}|j|dus|j|dd|j|jjd|D]\}}}} |j|dpy)NFTrrr)rrrur"rrrrrr`r3rrrr) r'rhrTr5r{r^rrrrs r(rlzManyToManyDP.presort_savess###  $$Y633txx)?)?  ||))  JE55txx!A!AG$__ JE~~e,5!11!%)&.!% 2 04{{/K/K$e0JOAq#t&55cD5IJ J  Jr*c  g}g}g}|j|}t}|D] |j |j|j}|s-|j D]7} | | | f|vri} |j | | d|ds'|j| 9|j fd|j D||j||j||||y)NFrc3&K|]}|f ywr,rfrrr5s r(rz/ManyToManyDP.process_deletes..YsC!Au:C) rrrur"r non_addedrrUr _run_crud) r'rhrTsecondary_deletesecondary_insertsecondary_update processedtmpr{r^rr5s @r(rnzManyToManyDP.process_deletes:s44Y? e DE 55txx!:!:G$..0.sO!Au:Or+old_)rrrrrrrsrrur"rrrUr`rrrrrr$rsecondary_synchronize_pairsr-)r'rhrTr.r/r0r1r2need_cascade_pksryr{r^rr5s @r(rqzManyToManyDP.process_savesbsN44Y? e< @E#'#7#77 D}|j|vr.|t j|j|jk(@c}}|j||} | jrZ| jt|k7rBt!j"d|jj$t|| jfz|r|d}|jj'j t j|jjDcgc]A}|j|vr1|t jd|jz|jk(Cc}}|j||} | jrZ| jt|k7rBt!j"d|jj$t|| jfz|r-|jj)}|j||yycc}wcc}w)Nr)type_zRDELETE statement on table '%s' expected to delete %d row(s); Only %d were matched.r5zRUPDATE statement on table '%s' expected to update %d row(s); Only %d were matched.) transaction connectionrrrwhererand_rr" bindparamtypeexecutesupports_sane_multi_rowcountrowcountlenrStaleDataError descriptionrinsert) r'rhr/r0r.r;rr statementresults r(r-zManyToManyDP._run_cruds@**55dkkB -a0N--/55"&!1!155N2S]]155??I '' 3CDF335//S)9%::((722,- -a0N--/55"&!1!155N2S]]6AEE>HHI '' 3CDF335//S)9%::((722,- --/I   y*: ; a4s8AJ AJ c |j||y|d|jj|sI|jsrOs!" "!!n?n?b r %r j ^%^Br )r jx &x x { { r*