L i  dZddlmZddlZddlZddlmZddlmZddlmZddlm Z ddlm Z dd lm Z d d l m Z d d l mZd d l mZd dl mZd dl mZd dl mZd dl mZd dl mZd dl mZd dl mZd dlmZd dlmZd dlmZd dlmZd dlmZd dlmZd dlm Z d dl!m"Z"d dl!m#Z#d dl!m$Z$d dl!m%Z%d d lm&Z&d d!lm'Z'd d"l(m)Z)d d#l*m+Z+d d$l,m-Z-d d%lm.Z.d d&lm/Z/d'd(l m0Z0d'd l mZ1d'd)l m2Z2d'd*l m3Z3d'd+l m4Z4d'dl mZd'dl4mZ5d'd,l4m6Z6d'd-l7m8Z8d'd.l7m9Z9d'd/l:m;Z;e rd d0lZ>d'd2l?m@Z@ ddd4ZAejjd3d35Gd6d7e&ZDe3jejjd8d35Gd9d:e&ZFe3jejjd8;Gd<d=eFZGe3jejjd8d8>ejjd8d8d8?ejjd8@GdAdBe&ZHGdCdDZIGdEdFe&ZJe3jej|jd8@GdGdHe&ZKe3jej|jdIJej|jdJGdKdLeJZLe3jej|jd8Jej|jdMJej|jdNJej|jdOJej|jdPJGdQdReJeje3jZOGdSdTZPGdUdVeJZQej|jdWJGdXdYeQZRe3jej|jdZJGd[d\eQZSe3jej|jd]Jej|jd3JGd^d_eJZTe3jej|jd`JGdadbeQejZUdcZVy)ezTsqlalchemy.orm.interfaces.LoaderStrategy implementations, and related MapperOptions.) annotationsN)Any)Dict)Optional)Tuple) TYPE_CHECKING)Union) attributes)exc) interfaces)loading) path_registry) properties)query) relationships) unitofwork)util)_DEFER_FOR_STATE)_RAISE_FOR_STATE)_SET_DEFERRED_EXPIRED) ATTR_WAS_SET)LoaderCallableStatus) PASSIVE_OFF) PassiveFlag)_column_descriptions)ORMCompileState)ORMSelectCompileState) QueryContext)LoaderStrategy)StrategizedProperty)_state_session) InstanceState)Load)_none_only_set) AliasedClass)event)inspect)log)sql)visitors)LABEL_STYLE_TABLENAME_PLUS_COL)Select)Literal)Mapper)RelationshipProperty) ColumnElementFc  g} |xr |j|r!|jr| jt|j|j j vr;|j j |j\| jfd|r| jtj|r/|jr!|jr| jfd|jD]} || jj|jus+| jj|jrQt!j"| j$|jf||||xr*|jxs|j&t(j*u||||| xs |j, |j.d | } | D] } | | | y)NcHtj||jfiSN)orm_util_validator_eventskey)descpropfnoptss _/mnt/ssd/data/python-lab/Trading/venv/lib/python3.12/site-packages/sqlalchemy/orm/strategies.pyz%_register_attribute..\s%x99dhh &* c2tj|Sr5)r backref_listeners)r9r:backrefuselists r=r>z%_register_attribute..js:#?#?'7$r?) parent_tokenrCcompare_function useobject trackparent typecallable callable_active_history impl_classsend_modified_eventsdoc)rC single_parentappendsingle_parent_validatorr8parent validatorsrtrack_cascade_eventsback_populates_effective_sync_backrefself_and_descendants_propsget class_manager_attr_has_implr register_attribute_implclass_ directionr ONETOMANYviewonlyrM)r:mapperrFrErHrIproxy_propertyrJrKkw listen_hooksmr9hookrBr;r<rCs @@@@r=_register_attributerfFsL(DLLGT''34 xx4;;)));;))$((3D  J;;<%% t33    " ( (! 188<< HH  //00:55"!1#%&&>~~)=)==)#-%)2]%G$--6GHH#$%D*% !T4  !3!r?) instrumentdeferredc6eZdZdZdZfdZ ddZdZxZS)UninstrumentedColumnLoaderzRepresent a non-instrumented MapperProperty. The polymorphic_on argument of mapper() often results in this, if the argument is against the with_polymorphic selectable. )columnsc\t||||jj|_yr5)super__init__parent_propertyrkselfrQ strategy_key __class__s r=rnz#UninstrumentedColumnLoader.__init__s% .++33 r?c l|jD]%}|r|j|}|j||'yr5)rk_append_dedupe_col_collection) rq compile_state query_entitypathloadoptadaptercolumn_collectionkwargscs r= setup_queryz&UninstrumentedColumnLoader.setup_querys; NAOOA&  7 7;L M Nr?c yr5 rqcontextrwrxryr`resultrz populatorss r=create_row_processorz/UninstrumentedColumnLoader.create_row_processors r?r5) __name__ __module__ __qualname____doc__ __slots__rnr~r __classcell__rss@r=rjrjs$I4 N  r?rjTc<eZdZdZdZfdZ ddZdZdZxZ S) ColumnLoaderz8Provide loading behavior for a :class:`.ColumnProperty`.)rk is_compositect||||jj|_t |jd|_y)Ncomposite_class)rmrnrorkhasattrrrps r=rnzColumnLoader.__init__s; .++33 #D$8$8:KLr?c  |jD]<} |r&|r|j| } | y|j| } |j| |>|jd} |r|j| } | y| ||j<yNr)rkadapt_check_presentruro) rqrvrwrxryrzr{memoized_populatorscheck_for_adaptr|r}fetchs r=r~zColumnLoader.setup_querys NA"33A6Ay*A  7 7;L M N Q OOE*E}49D001r?cvd|_|jdj}|jjxs]|jdj xsB|j duxr2|jj|j d|ju}t|j|d|j|y)NTrF)rFrErJ) is_class_levelrktyperorJ primary_keyversion_id_col_columntopropertyrXrfcompare_values)rqr`coltyperJs r=init_class_attributez!ColumnLoader.init_class_attributes",,q/&&  / / ||A** %%T1(,,001F1FM''(    $33)  r?c |jD]I} |r|j| } |j| d} | s)|dj|j| fy|dj|jdfyNFquickexpireT)rk_getterrOr8) rqrrwrxryr`rrzrcolgetters r=rz!ColumnLoader.create_row_processorsx<< :Cooc*^^C/F7#**DHHf+=>  : x ' '4(8 9r?F) rrrrrrnr~rrrrs@r=rrs)C)IM:B ,:r?r)query_expressionc0eZdZfdZdZdZdZxZS)ExpressionColumnLoaderct|||tjj dt fd|j jD|_y)Nc3BK|]}|j ywr5)compare).0r}nulls r= z2ExpressionColumnLoader.__init__..)s!, $% $ , s) rmrnr+rlabelanyrork_have_default_expression)rqrQrrrrss @r=rnzExpressionColumnLoader.__init__"sP . xxz%(+, )-)=)=)E)E, ) %r?c ,d} |r|jr |j} n"|jr|jj} | y| D]%} |r|j| } |j | |'| d} |r|j| } | y| ||j<yr)_extra_criteriarrorkru) rqrvrwrxryrzr{rr|rkr}rs r=r~z"ExpressionColumnLoader.setup_query-s w..--G  * ***22G ?  NAOOA&  7 7;L M N   OOE*E}49D001r?c |r|jr{|j} | D]I} |r|j| } |j| d} | s)|dj|j| fy|dj|jdfyyyr)rrkrrOr8) rqrrwrxryr`rrzrrkrrs r=rz+ExpressionColumnLoader.create_row_processorRs w..--G >!//#.CU3w'..&/AB  >8$++TXXt,<=/7r?cd|_t|j|d|jdjj dy)NTFr)rFrEaccepts_scalar_loader)rrfrorkrrrqr`s r=rz+ExpressionColumnLoader.init_class_attributels;"  !\\!_11@@"'  r?)rrrrnr~rrrrs@r=rrs  #:J>4  r?r)rhrg)rhrg raiseload) do_nothingcHeZdZdZdZfdZdZdZ d dZdZ dZ xZ S) DeferredColumnLoaderzAProvide loading behavior for a deferred :class:`.ColumnProperty`.)rkgrouprct|||t|jdr t d|j j dd|_|jj|_|jj|_ y)Nrz8Deferred loading for composite types not implemented yetrF) rmrnrroNotImplementedError strategy_optsrXrrkrrps r=rnzDeferredColumnLoader.__init__su . 4''): ;%J ++// UC++33 ))// r?c $|jr~|jjjr^|j|jjjvr2|j j dj||||||||y|jsZ|jr|j j} n|j j} |dj|j| fy|dj|jdfy)N)rhFrgTnewrF) refresh_stater_compile_options_only_load_propsr8ro _get_strategyrrr_raise_column_loader_deferred_column_loaderrO) rqrrwrxryr`rrzrset_deferred_for_local_states r=rz)DeferredColumnLoader.create_row_processors*  ! ! ..??GMM::KKK  . .; "" $$~~((==- ((@@- u  $ $dhh0L%M N x ' '5(9 :r?cd|_t|j|d|jdjj |j dy)NTFr)rFrErIload_on_unexpire)rrfrorkrr_load_for_staters r=rz)DeferredColumnLoader.init_class_attributesD"  !\\!_11@@**"  r?c j|jjr|jjs|r8t |j j |jjsG|r5|jr)|jjd|jzds|rA|j|vr3|jjdj|||||||fi| y|jrt ||j<y|j"st$||j<yt&||j<y)Nzundefer_group_%sFr)compile_options_render_for_subqueryro_renders_in_subqueriessetrk intersectionrQ_should_undefer_in_wildcardr local_optsrXr8rr~rrrrr) rqrvrwrxryrzr{ronly_load_propsrbs r=r~z DeferredColumnLoader.setup_querys--BB((?? %22KK;; JJ&&**&3U DHH$? D . .; k!#   8M  4 4 58H  4 4 58H  4 4 5r?cD|jstjS|tjzstj S|j j}|jrg|jDcgc]Q}t|tr?t|jtr%|j|jk(r |jS}}n |jg}|Dcgc]}||jvs|}}t|}|9t!j"dt%j&|d|jd|j(r|j+||dt-j.|j|t1|t2tj4Scc}wcc}w)NParent instance zB is not bound to a Session; deferred load operation of attribute '' cannot proceedraise)r8r ATTR_EMPTYrSQL_OKPASSIVE_NO_RESULTmanagerr`riterate_properties isinstancer!strategyr unmodifiedr"orm_excDetachedInstanceErrorr6 state_strr_invoke_raise_loadrload_scalar_attributesrrr) rqstatepassive localparentptoloadkrsessions r=rz$DeferredColumnLoader._load_for_statesVyy'22 2+++'99 9mm** ::%77a!45qzz+?@GGtzz) FhhZF#>  # #E7G <&& LL%U[ $0009=s0AFF.Fc4tjd|d)N'z(' is not available due to raiseload=Truesa_excInvalidRequestErrorrqrrlazys r=rz'DeferredColumnLoader._invoke_raise_load's((=A C  r?r5) rrrrrrnrrr~rrrrs@r=rrxs5L/I01;f  *1If&1P r?rc8eZdZdZdddZej fdZy)LoadDeferredColumnsz7serializable loader object used by DeferredColumnLoaderc ||_||_yr5)r8r)rqr8rs r=rnzLoadDeferredColumns.__init__0s"r?c|j}|jj}|j|}|jrd}nd}|j |}|j ||S)N)rhTr)rT)rr)r8rr`rWrrr)rqrrr8rr:rrrs r=__call__zLoadDeferredColumns.__call__4schhmm** !!#& >>L FL%%l3''w77r?Nr)r8strrbool)rrrrrnr rrrr?r=rr-sA#'1&<&<8r?rc,eZdZdZdZfdZdZxZS)AbstractRelationshipLoaderz0LoaderStratgies which deal with related objects.)r`targetrCentityct||||jj|_|jj|_|jj |_|jj |_yr5)rmrnror`rrrCrps r=rnz#AbstractRelationshipLoader.__init__Js^ .**11 **11 **11 ++33 r?c d|jjdj||||||||S)N))r immediate)rorrrs r=#_immediateload_create_row_processorz>AbstractRelationshipLoader._immediateload_create_row_processorQsC##11 $            r?)rrrrrrnr rrs@r=rrEs:7I4 r?rceZdZdZy)DoNothingLoaderzRelationship loader that makes no change to the object's state. Compared to NoLoader, this loader does not initialize the collection/attribute to empty/none; the usual default LazyLoader will take effect. N)rrrrrr?r=r r jsr?r noload)rc eZdZdZdZdZdZy)NoLoaderzQProvide loading behavior for a :class:`.Relationship` with "lazy=None". rcld|_t|j|d|jjy)NT)rFrH)rrfrocollection_classrs r=rzNoLoader.init_class_attributes0"  -->>  r?c Pfd} |djj| fy)Ncjr"tj||jyd|j<yr5)rCr init_state_collectionr8)rdict_rowrqs r=invoke_no_loadz5NoLoader.create_row_processor..invoke_no_loads-||00txxH"&dhhr?r)rOr8) rqrrwrxryr`rrzrrs ` r=rzNoLoader.create_row_processors& ' 5  $((N!;I ' 4 E E--==  - - /  O    !  - - - E     !  %    ( (!LL)=)=)F)FG''|T.BCDN "DN 4dDOOL%% % LL   ''*22 " KK;; 3  <<D112 N$++999![[<>)/ r?ctj|jddi}||jc}gd}t j |id|ifd}t j |id|i}|fS)Nr,Tcd|_y)NF)unique) bindparams r=visit_bindparamzFLazyLoader._memoized_attr__simple_lazy_clause..visit_bindparam+s $I r?rEc|jvr,j|j|jdfy|j)j|jd|jfyyr5)_identifying_keyrOr8callablevalue)rE bind_to_colparamss r=rFzFLazyLoader._memoized_attr__simple_lazy_clause..visit_bindparam0sh))[8 ! #I$>$>?##+ y}}dIOODE,r?)r5r6rr"r,traversecloned_traverse)rq lazywhere criterionrFrKrLs @@r="_memoized_attr__simple_lazy_clausez-LazyLoader._memoized_attr__simple_lazy_clause"s++ OOlD1 #,T->-> ; % )R+)GH F,, rK9 &  r?c |j\}}|,tj||Dcgc]\}}}| c}}}S|jj}|j } t j| } |tjzr|tjz}i} |D]K\}}}|>|r(|tjzr|j|| ||}n|j|| ||}|| |<M|| fScc}}}wr5) r&r5adapt_criterion_to_nullrorQobjr instance_dictrINIT_OKLOAD_AGAINST_COMMITTED#_get_committed_state_attr_by_column_get_state_attr_by_column) rqrrrP param_keysr8identrJr`orrLs r=_generate_lazy_clausez LazyLoader._generate_lazy_clauseBs $ 8 8 : =33DD$5CCD %%,, IIK((+ [(( ( {** *G!+ C w)K)KK"FFueWE#<<ueWE F3K &  3Es C5c:tjd|d|d)Nrz ' is not available due to lazy='rrs r=rzLazyLoader._invoke_raise_loadbs((8|jjs |jr |jst j S|j }d} |jxr| xs |j } |tjzs| r|tjzs|rt jS|jr;|tjzs(| r|tj zr|j#||dt%|} | s\|tjzrt jSt'j(dt+j,|d|jd| r@|j/| ||} t j| vrt jSt j0| vrt j0S|j2j4st7j8| ryt7j:| ry|j|j<vr#|tj>zst j@S| jC|jD| ||} | | t jFury| S|tjzr|tj zst jS|jI| || |||||| S)Nrrz> is not bound to a Session; lazy load operation of attribute 'r)rlazy_loaded_from)%r8roload_on_pending _load_pending session_idrrr rrrr NON_PERSISTENT_OKrr'NO_RAISERELATED_OBJECT_OKrr"rrr6r_get_ident_for_use_get NEVER_SETr`allow_partial_pksr%r issupersetdictDEFERRED_HISTORY_LOADr_identity_lookuprPASSIVE_CLASS_MISMATCH_emit_lazyload) rqrrryextra_criteria extra_optionsalternate_effective_pathexecution_optionspendingprimary_key_identityr rinstances r=rzLazyLoader._load_for_stategsxyy((88++##'22 2ii-#,,OK$Nw7N7N3N+,,,W*6667'99 9   k222[:::  # #E7G < '---+===//%%e,dhh8  #'#>#>$ $559MM+===%//3GG+555 ;;00!../CD!,,-ABEJJ&+"C"CC+888// $!& 0H#3JJJ#Ok000!>!>>+===""       $   r?c |jj}|tjzr |j}n |j }|j }|jjDcgc]}||||j||c}Scc}w)Nr) rr`rrWrXrYrkrr#)rqrrrinstance_mapperget_attrrpks r=rgz!LazyLoader._get_ident_for_use_gets--.. [77 7&JJH&@@H kk--  UE4#8#8#r&|t@jBzsjE||dtGjH|| || | SjJrjJ| _&fd}| xjN|jffz c_'jQ||\}}| r#tjRjU| d | i} nd | i} j"|jVvr#|t@jXzstZj\S| r3tj^t4j`|jcr4ytj^t4jd|jcryj>r&|t@jBzsjE||d|f| _3|ji| || }|jkjmjo}jpr|Sts|}|r,|d kDr"tjtd jz|d Sy)N) _raw_columns_propagate_attrs _label_stylerF)_invoke_all_eagers_lazy_loaded_from autoflush _current_pathr) load_optionsrsczjjD]}|jtjus |j s-t |jtrHjj|jj|jj|j|yr5)ro_reverse_propertyr]r rA_use_getrrrr$_construct_for_existing_pathrrrQlazyloadprocess_compile_state)compile_contextrevrqstrategy_optionss r=_lazyload_reversez4LazyLoader._emit_lazyload.._lazyload_reverseBs++== KMMZ%9%99 &s||Z@$))FF'77EEJJhsm$9$9/$J Kr?_sa_orm_load_options)rsr zKMultiple rows returned with uselist=False for lazily-loaded attribute '%s' r);r preloadedorm_strategy_optionsr__clause_element__r._create_raw_selectr~r-rdefault_compile_optionsrdefault_load_optionsro secondary select_fromr`r8r NO_AUTOFLUSH immutabledict_execution_optionsr rr load_pathr6LoaderCriteriaOption _with_options_path_registryrr(rrerrload_on_pk_identityr_order_by_clauses_with_context_optionsr] EMPTY_DICT merge_withrkrlrrhas_intersection _none_setvalues _never_set_where_criteriaexecuterDscalarsallrClenwarn)rqrrrurryrprqrrrs clauseelementstmtrrtr effective_pathr<r lazy_clauserLrlrs` @r=rozLazyLoader._emit_lazyloads >>>> 668 (('*;;7,DD   $88 "'!&     ) ) 5## T11;;Dii- g 7 77&*&8&8+u9M&ND #,,   'g.E.E'/!&1E1E!F!9$:N:N!O%%D72211$++~N"&D  % -#\\889M9MNN6d6J6JKN    - /  />!BB !!'K4H4H*H''wG..$)"3   >>%)^^D " K ""  4 4 5'  "#88H V  $ : :!*L! ' !  HH "k???'44 4 $$X%7%7I  " "8#6#6  H   g 0D0D&D  # #E7N C +~ &,=! ((*..0 <<MF Aq5IIJ../ ay r?c  |j |jjrd|jjj rD|j|jjj vr|j ||||||||S|jr|rw|jrktj|jt |||jr|j|nd } |dj|j| fy|js |j r& fd} |dj|j| fyy)Nrc*|j|yr5)_reset)rrrr8s r=reset_for_lazy_callablez@LazyLoader.create_row_processor..reset_for_lazy_callables UC(r?)r8r_is_user_refreshrrrr rrr#"_instance_level_callable_processorrYLoadLazyAttribute_generate_extra_criteriarOpopulate_existingalways_refresh) rqrrwrxryr`rrzrset_lazy_callablerr8s @r=rzLazyLoader.create_row_processors8hh  1 1 ..??GMM::KKK;;  ""w73J3J@@$$!#22 88A! ! " u  $ $dhh0A%B C  & &&*?*? ) u  $ $dhh0G%H I+@r?)rQr)rrzTuple[Any, ...])rrrrr__annotations__rnrrQr]rrrrrgpreload_modulerorrrs@r=rrs I $#//''33..:/:?N:x  D!@!@ !%//u n  T:;[<[zEJr?rc:eZdZdZdZdZejfdZy)rasemi-serializable loader object used by LazyLoader Historically, this object would be carried along with instances that needed to run lazyloaders, so it had to be serializable to support cached instances. this is no longer a general requirement, and the case where this object is used is exactly the case where we can't really serialize easily, which is when extra criteria in the loader option is present. We can't reliably serialize that as it refers to mapped entities and AliasedClass objects that are local to the current process, which would need to be matched up on deserialize e.g. the sqlalchemy.ext.serializer approach. cP||_|j|_||_||_yr5r8rrryrp)rqr8initiating_strategyryrps r=rnzLoadLazyAttribute.__init__s&/<< ,r?c|jtjd|j|j|j ddS)NzvCan't reliably serialize a lazyload() option that contains additional criteria; please use eager loading for this caserr)rprrr8rrry)rqs r= __getstate__zLoadLazyAttribute.__getstate__sE    * II   88 --||   r?c|j}|jj}|j|}|j|j }|j |||j|jS)N)ryrp) r8rr`rW _strategiesrrrryrp)rqrrr8ryr:rs r=rzLoadLazyAttribute.__call__snhh--..%%c*##D$5$56''  LL.. (  r?N) rrrrrnrr rrrr?r=rrs!"-  '1&<&<  r?rceZdZdZdZddZy) PostLoaderz;A relationship loader that emits a second SELECT statement.rNc|jjxstjj|z}|j }t jd|i}|r"|jjdd}|dk(} nd}d} ||jjs#tjd|jd|jjdt||}| s |dkr|d||fS| s"|j!dt||d z i}t"j$j'|||jr|d||fS||j} ||j} | j)|j*d s;|r| j,d z |kDr'|d||fS| j/|j0r|d||fS|d ||fS) Nsa_top_level_orm_contextrecursion_depthFz'recursion_depth option on relationship z0 not valid for non-self-referential relationship_recursion_depth_rr loaderr'T)rv current_pathr6 PathRegistryroot_get_top_level_contextrrrrXro_is_self_referentialrrrsidunionrPostLoad path_existscontainsr lengthcontains_mapperr`) rqrrxry join_depthrtop_level_contextrsrunlimited_recursion path_w_propeffective_path_w_props r=_setup_for_recursionzPostLoader._setup_for_recursion s  ! ! . . L(2G2G2L2L $::< .. '): ;  %00445FMO"1R"7 "O"'   &''<<00=++,-88 &77;;#BtH:.O'?Q+>"%# '$5$;$;+BtH:6!8K%!    ' ' ^T%9%9 "5*;_L L4//0 .t/C/C D##G$6$6A(//!3j@&)'  '66t{{C"%# t%6GGr?r5)rrrrrrrr?r=rrsEIDHr?rrc4eZdZdZfdZdZdZdZxZS)ImmediateLoaderrc\t||||jj|_yr5rmrnrorrps r=rnzImmediateLoader.__init__W% ...99r?cX|jjdj|yN)rrrorrrs r=rz$ImmediateLoader.init_class_attribute[$ ** !  v &r?c |jjjsy|j||||j\} } } } | s"t j tjz} n!t jtjz} tjj|| |j|j|j|| | | yr5)rvr_enable_eagerloadsrrr PASSIVE_NO_FETCH_RELATEDrrerrrcallable_for_pathrQro_load_for_path)rqrrwrxryr`rrzrr run_loaderrsrflagss r=rz$ImmediateLoader.create_row_processor`s$$44GG   % %gtWdoo N      77+:N:NNE**[-A-AAE**   KK         r?c |rJt|jj} ||jf| _|j } | f} n|} d} |j } |jjd} |D]i\}}|j}|s| |vs| j||| | |}|ttjfvsH|j| j|||ky)Nrr)rqrrrs)r$rxr_recurser_truncate_recursiver8rorrkrrrrget_implset_committed_value)rqrrxstates load_onlyryrrrsnew_optrrrqr8 lazyloaderr overwriterrJs r=rzImmediateLoader._load_for_paths 7<<../G  "GO(,'?'?'A $$JM'+ $Mhh))778MN &  E9JJECu,"22"/-E&7 3 (::!NN3';;ue r?) rrrrrnrrrrrs@r=rrSsI:' ( T*r?rsubquerycxeZdZdZfdZdZdZdZdZdZ dZ d Z Gd d Z d Z d ZdZdZxZS)SubqueryLoaderrc\t||||jj|_yr5rrps r=rnzSubqueryLoader.__init__rr?cX|jjdj|yrrrs r=rz#SubqueryLoader.init_class_attributerr?cv|}|j}tj|d}|jj |r*|j |dur|j|j }}n||d}}|rf|j |jj|} t|t| z } | r)| tjj|| dz } n|} |j} | D cgc]<} t| jdj|j | j">} } || || fScc} w)Nrr )rxr6_class_to_mapperrQisaro _entities entity_zerorrrrcoerce local_columnsgetattrrrr8)rqorig_query_entity_index subq_pathcurrent_compile_stateis_rootgiven_subq_path subq_mapperleftmost_mapper leftmost_prop new_subq_path additional leftmost_colsr} leftmost_attrs r= _get_leftmostzSubqueryLoader._get_leftmostsI$NN // ! =  KKOOK ($$ ! 4-1[[$:N:N]O-8)A,]O  2;;'k..8MY#m*<>Q00F f 45 ##$BCLLN** Wd A. 4s.H6 ?H;Icng}t|j}t|D]W\}\}}|dkDr+||dz dj}|j |r|n|} n|} |j | |j fYt|dkr|} nKt|dd} | jr | j} n!tj| jd} |jj} | D cgc]/} t| |j j"| j 1}} ||| fScc} w)Nrr r'rTr)r;pairs enumerater`rrOr8rr)r!rr6r&ror r rQr)rqr<r to_joinr?ir`r: prev_mapper to_append parent_aliasr8 local_colsr} local_attrs r=_prep_for_joinszSubqueryLoader._prep_for_joinsZs7Y__&'!*5!1 2 A~1u$AEl1o44 +6??6+BK " NNItxx0 1 2& w*D$$#{{  (44KK  ))77    L$++"?"?"B"F"F G   L00  s74D2cdt|}|dk(r$t||ddj|g}n^|dk(rDt||ddj|t||ddj|g}n|dkDr|ddDcgc]F}t|djst j |dn|dj|dfH}}g} |rb|jd}t|d|d} |r| j|dd} n| j|} | j| |rbt||ddj| djg| zt||ddj|gz}|D]} |j| }|Scc}w)Nr rr'r) rr of_typer)r!r6r&rpoprOrQjoin) rqr5rAr<rEeffective_entityltjitemmiddleinnerattrs r= _apply_joinszSubqueryLoader._apply_joinss'l !8 GAJqM2::;KLGAX GAJqM2::<H gbk!n5==$G 1W$AbM  'tAw/@@!--d1g6!!W^^G  F Ezz!}tAwQ0<<q ! 5D<< 5D T"WQZ]3;;E!HOOLML'"+a.9AA(  Dt A I s A F-c|j}|r?|jr3|tj|j|j |fz }|j |}|j|}|Sr5)rrr6rrr_with_current_pathoptions) rqrr5r rewritten_pathr2rMry new_optionss r=_setup_optionszSubqueryLoader._setup_optionsss"!.. w.. --KK44W= K   0 AII{ #r?cvjjr!fd}|j|j}|S)Nc|xjttjjj z c_yr5eager_order_bytuplerr4ror3rrqs r=_setup_outermost_orderbyzISubqueryLoader._setup_outermost_orderby.._setup_outermost_orderbys3..%LL!5!5!>!>?3.r?)ror3_add_context_option)rqr5r`s` r=r`z'SubqueryLoader._setup_outermost_orderbys;    ( (  %%($*>*>Ar?c,eZdZdZdZdZdZdZdZy)SubqueryLoader._SubqCollectionszGiven a :class:`_query.Query` used to emit the "subquery load", provide a load interface that executes the query at the first moment a value is needed. rrsrrLsubq_datac|j|_|j|_|j|_|jxsi|_||_d|_yr5rd)rqrres r=rnz(SubqueryLoader._SubqCollections.__init__sI#??DL%,%>%>D " ' 4 4D !...BDKDIDJr?cr|j|j|jj||Sr5)rf_loadrX)rqr8defaults r=rXz#SubqueryLoader._SubqCollections.get s*zz! ::>>#w/ /r?ctjt|_|j}|j J|j |j }|jjr|j}t|j|j}tj|dD]*\}}|j|jd|D,y)Nc |ddS)Nr rxs r=r>z7SubqueryLoader._SubqCollections._load..s !AB%r?c3&K|] }|d yw)rNrrvvs r=rz8SubqueryLoader._SubqCollections._load..s$7rRU$7) collections defaultdictr;rfrer with_sessionr_populate_existingrrL itertoolsgroupbyextend)rqr5rowsrvs r=riz%SubqueryLoader._SubqCollections._loads$006DJ A99$ $$t||,A  33'')-.D!))$@ 81 1 $$$7Q$77 8r?c>|j|jyyr5)rfri)rqrrrs r=rz&SubqueryLoader._SubqCollections.loaderszz! "r?N) rrrrrrnrXrirrr?r=_SubqCollectionsrcs"    0  8" r?r}c z|j}|jjr|jjry|jj |}d|_||j}|j|jdd} | | } n |j} |jjjdtjjtjjf\} } | tjju} | |z} | |z} |jjjdt f|j}t#j$|d}|j&r>|j(j*t-j.d|d|d|j0}|j3|d }|j5|| || \}}}} |j7||||||}tj8| }|jjj;|j<dt f|d| | fi|_ |j?d }|jA|| \}}}|jB|}|jE||||| }|jG||| | || |}|jI|}|S) NTpath_with_polymorphic)subquery_pathsNr2ormzsubqueryloader for "z!" must invoke lambda callable at z in order to produce a new query, decreasing the efficiency of caching for this statement. Consider using selectinload() for more effective full-lambda cachingF)legacy)%rvrr_for_refresh_staterindexloaders_require_bufferingrorXr rrrr6rrrr_get_plugin_class_for_plugin_is_lambda_elementrrrr _resolved_create_entities_collectionrr=rrrs_set_enable_single_critrH add_columnsrSrYr`)rqrrwrxrryrzrvr with_poly_entityrMr rWrr2compile_state_clsr1rrr3r<r5rArGrEs r=_setup_query_from_rowprocz(SubqueryLoader._setup_query_from_rowproc#s -- --@@,,?? "/"9"9"?"? "M,0)D(() 88  $ $&=t   '/ #{{ $+MM$D$D$H$H $  " " ' ')>)>)C)C D% ! >x44999$ '$.]]5599 > *GMM ,HH    ( (##55= Z )$--J /JJ uK     #        ! 77     !    KK( )&}}??JJ  % %~. (9n*E    % %e ,,0,@,@  - )\ AMM: &    w L2B             ) )! ,r?c |rL|jj6|jjjrtjdd|j r|j ||||||||S|j||||j\} } } } | syt|jtsy|jj|jjjst!j"d|zt%|dk(r+t'j(|j*|js%yt'j(|d|jsy|j-||||d||} | y| j.J||j0}|j0j2} |j5|j6d} | /|j9|| } |j;|j6d| |r| Dcgc]}|j<|} }|j>r|jA||| | |y|jC||| | |ycc}w)NzThe subqueryload loader option is not compatible with DML statements such as INSERT, UPDATE. Only SELECT may be used.This warning will become an exception in a future release.2.0J'%s' does not support object population - eager loading cannot be applied.r rrs)"rv statementis_dmlrwarn_deprecatedrr rrrrrQrYr8implsupports_populationrrrr6 _entity_isarrrror rXr r}rrkrC_create_collection_loader_create_scalar_loader)rqrrwrxryr`rrzr_rrerFrsr}s r=rz#SubqueryLoader.create_row_processorsS %%//;%%//66  M    ;;  #77 T7DOO :q! '//1FG {{((277KK,,@BFG  t9>'' (@(@$++N%%d2h < --    H     < ||###D(()))77 hhw11=A  //>K HHW'' D 6@A'//!,AJA <<  * *j*   & &j* BsIc6|j|fdfd}|djjf|djj|f|jr+|djjjfyy)Ncj|d}|jjj|||y)Nr)rXrr8r)rrr collectionrsrq tuple_getters r=load_collection_from_subqzKSubqueryLoader._create_collection_loader..load_collection_from_subqs<(c):B?J NN488 $ 8 8uj r?c8j|vr |||yyr5r8)rrrrrqs r=&load_collection_from_subq_existing_rowzXSubqueryLoader._create_collection_loader..load_collection_from_subq_existing_rows xxu$)%<%r?rexistingeager _tuple_getterrOr8invoke_all_eagersr) rqrrrsrFrrrrs ` ` @@r=rz(SubqueryLoader._create_collection_loaders++J7    = 5  $((,E!FG:%% XX= >   $ $ w  & &+2D2D'E F %r?c6|j|fdfd}|djjf|djj|f|jr+|djjjfyy)Ncj|d}t|dkDrtjdz|d}|j j j |||y)Nr5r LMultiple rows returned with uselist=False for eagerly-loaded attribute '%s' r)rXrrrrr8r)rrrrscalarrsrqrs r=load_scalar_from_subqzCSubqueryLoader._create_scalar_loader..load_scalar_from_subq,sk(c):GDJ:" GIMN  ]F NN488 $ 8 8v Nr?c8j|vr |||yyr5r)rrrrrqs r="load_scalar_from_subq_existing_rowzPSubqueryLoader._create_scalar_loader..load_scalar_from_subq_existing_row7s xxu$%eUC8%r?rrrr) rqrrrsrFrrrrs ` ` @@r=rz$SubqueryLoader._create_scalar_loader's++J7  O 9 5  $((,A!BC:%% XX9 :   $ $ w  & &+2D2D'E F %r?)rrrrrnrrr=rHrSrYr`r}rrrrrrs@r=rrs^ I:' /LbbH-1^4l D 22hFPcJG.Gr?rjoinedc~eZdZdZdZfdZdZ ddZdZdZ dZ d Z d dd Z d Z d Zd ZdZxZS) JoinedLoaderz[Provide loading behavior for a :class:`.Relationship` using joined eager loading. rc\t||||jj|_yr5rrps r=rnzJoinedLoader.__init__Nrr?cX|jjdj|yrrrs r=rz!JoinedLoader.init_class_attributeRrr?c 8|jjsy|r9|j-|jjrt j ddn|j rd|_||j}|r|j|||jnd} | dur|j||||| \} }} n|j|jdsE|jr|jdz |jkDry|j|j ry|j#||||||||\} }} }d|_|j'|jdd} | t)| j*}nd}||j,}t/j0||j ||| | ||j | tj2j5|j6}|r:| t9j:d |j6Dcgc]}|| c}|_yycc}w) z@Add a left outer join to the statement that's being constructed.NzThe joinedload loader option is not compatible with DML statements such as INSERT, UPDATE. Only SELECT may be used.This warning will become an exception in a future release.rTFrr'r)with_polymorphic parentmapperchained_from_outerjoinzDetected unaliased columns when generating joined load. Make sure to use aliased=True or flat=True when using joined loading with with_polymorphic().)rrrrrrrCmulti_row_eager_loadersro_init_user_defined_eager_procr $_setup_query_on_user_defined_adapterrrrrr`_generate_row_adaptereager_adding_joinsrXr)with_polymorphic_mappersrr_setup_entity_queryNONE_SETrsecondary_columnsrr)rqrvrwrxryrzr{rrr|user_defined_adapterclausesadd_to_collectionrr has_nonesr}s r=r~zJoinedLoader.setup_queryWsK,,??  ''3''..  M   \\48M 1D(()   . . (@(@   u ,99$   ! ==!9!98D??{{Q8))$++6**!&   !&04M ,88  $ $&=t   '&  &&  $ DKK ##  KK    -#9 MM..}/N/NO +00I ->>3!-A3 / 3s H Hc,d|jvry|jj}|j|jdd}|dur|S|jd}|dd\}}||t |t r|jj|}tjtjj|j||jjd}n|j|jdra|j|jd} tjtjj | |jj}n&|j"j|jd}|j%|d||S)Neager_from_aliasF user_defined_eager_row_processor) selectabler0limit_on_entityr)r0)rrxrQrXr rrraliasr6 ORMAdapter_TraceAdaptRoleJOINEDLOAD_USER_DEFINED_ALIASr`r:r JOINEDLOAD_PATH_WITH_POLYMORPHIC_polymorphic_adaptersr) rqryrvtarget_attributesrxrzr root_mapperr:rs r=rz*JoinedLoader._init_user_defined_eager_procsx W%7%7 7||""((  $ $&H%  % N""#56 I T  %% ))%0))((FF   KK;; % G}}((*A$(88!,,.E$ #--,,MM$ $ ? ? (==AAKK   .  r?c|j|}|r1|r/|j|}|j|jd|n!|r|}|j|jd||j}|||fS)Nr)_get_entity_clauseswraprr primary_columns)rqrrrxrzrrs r=rz1JoinedLoader._setup_query_on_user_defined_adapter s ,,W5 +#7#<#j |j| }njA||d ||||}||j| <|j|_!|st jDj&jFD]U}| jHjJjM|s)|r|jN|}|jQ||jRWj&jTr_|xjVt7|jXj[t]j^j&jTz c_+yy)Nr zCan't identify which query entity in which to joined eager load from. Please use an exact match when specifying the join path.rr!FTrunnestedadditional_entity_criteriarc3lK|]+}|jr|jj-ywr5)propagate_to_loaders_resolve_where_criteriar`)raerqs r=rz2JoinedLoader._create_eager_join.. s1)****4;;7)s14isouter _left_memo _right_memorr)0r`r_should_nest_selectable eager_joins from_clausesr5#find_left_clause_that_matches_givenrrrr setdefaultr  aliased_insp_entity_for_mapperrrQrr8ror6r&r!rrepresents_outer_joinglobal_attributesrXr^_ORMJoinrr+Join_splice_nested_inner_joinstop_on _find_columns primaryjoinpersist_selectabler}contains_columnrkrurr3r]_target_adaptercopy_and_processrr4)rqrvrwrxrzrrrrrprshould_nest_selectablequery_entity_keyindexesclausedefault_towraptowrapefmonclauseattach_on_outsideextra_join_criteriar eagerjoinrs` r=rzJoinedLoader._create_eager_joinx s  &--K&K  1 1 655     9 9 9***BB**L,C,CG7|a000 &33GAJ? 4;1:v.  #''-  **55 n  w 2E: **=="t{{3 #3::txx9M9MN")) W%7%7HH(( ++H''''' & >} >J& >''== -%2%D%D%H%H )4;; 7& " & 5)4)$    ))$$% M++AAM*Kz&#((/K;; - 3 I66d2h;NI7@ !!"23)33  --$$00 1133CCCH%ooc2!??]::      ( (  ( (E**;;LL!5!5!>!>?-  ( )r?c ||dusJ|durt|tjsJt|tjj r!|j |||j||||St|tjrQ|j} |j |||j|||| | djnd} | |js| js|j| } nBtj|j| |j|j|j} | j | _| S|j |||j||||j| } | Utj| |j|j|j|j} | j | _| S|dur Jdy|j#|sy|r-t%|d kDr|d |usJ|d d|j&d dk7rytj||j(|d|||dj| S) NrFr)entity_inside_join_structure)rr)rdetected_existing_path)rrz9assertion failed attempting to produce joined eager loadsr'rr)rr6rr+r FromGroupingrelementrrightr`r_splice_into_centerleftr rrrrrxr) rqrxentity_we_want_to_splice_ontojoin_objrr rprrjoin_right_path target_joinrs r=rz&JoinedLoader._splice_nested_inner_join s*-R888 '5 0h(9(9: :: h ; ; <11-  , ("3"3 4'22O88-'2$B'..9 K& '' 0C0C ( < <[ II ( 1 1 # )) ( 0 0#+#6#6 !I-8,G,G )  #<<1MM"191D1D+:=  * ( 1 1#  )) ( 0 0$,$8$8 !I1<0K0KI-$$,u4ONO -001MN "c*@&AA&E *"-1MM MMH&a+tyy2>    3T"X__-*  r?cj|j}|r|j|||jnd}|durE|}|jr|r|j |j}n8|jr,|j}n|j |jd}|y|j j||r|Sy)NFr)rvrr compound_eager_adapterrrXr`_result_has_identity_key) rqrrrzrxryrvr decorators r=_create_eager_adapterz"JoinedLoader._create_eager_adapter s--   . .(:(:   u ,,I33 %NN!88 55)@@ ((*?I  ;; / / B r?c |jjjsy|jj|j j jstjd|z|jrd|_ ||j} |j|||| |} | durs|j } tj||j ||| |j"| } |js|j%|| | |y|j'|| | |y|jj)dj+||||||||y)NrTFr)rvrrrQrYr8rrrrrCloaders_require_uniquingror"r_instance_processorr`rrrrr) rqrrwrxryr`rrzrour_path eager_adapterr8 _instances r=rz!JoinedLoader.create_row_processor sN$$44GG {{((277KK,,@BFG  <.load_collection_from_joined_new_row' sg$99%LJ--2K0;G  s| ,S>D""4( r?c|fjvrj|f}n>tj||}tj|d}|j|f<|}||j |yyr+r-) rrrr/rr0r(rr8s r=(load_collection_from_joined_existing_rowzXJoinedLoader._create_collection_loader..load_collection_from_joined_existing_row4 ss|w111%00%> (==5# #11 6 4?""E3<0S>D""4( r?c|yr5rrrrr(s r= load_collection_from_joined_execzPJoinedLoader._create_collection_loader..load_collection_from_joined_execG cNr?rrrrOr8r)rqrr8r(rr1r3r6s ``` r=rz&JoinedLoader._create_collection_loader& s ) )&  5  XX: ;  :%% XX? @   $ $ w  & &;<  %r?cfd}fd}fd}|djj|f|djj|f|jr!|djj|fyy)Nc||<yr5r)rrrr(r8s r=load_scalar_from_joined_new_rowzKJoinedLoader._create_scalar_loader..load_scalar_from_joined_new_rowV s#3E#Jr?cj|}|vr!||urtjdzyy||<y)Nr)rr)rrrrr(r8rqs r=$load_scalar_from_joined_existing_rowzPJoinedLoader._create_scalar_loader..load_scalar_from_joined_existing_row[ sM!~He|5:-IIK.&c r?c|yr5rr5s r=load_scalar_from_joined_execzHJoinedLoader._create_scalar_loader..load_scalar_from_joined_execn r7r?rrrr8)rqrr8r(rr;r=r?s` `` r=rz"JoinedLoader._create_scalar_loaderU s (  &&  5  $((,K!LM:%% XX; <   $ $ w  & &78  %r?)NNF)FN)rz#Union[Mapper, None, Literal[False]]rz$Optional[path_registry.PathRegistry])rrrrrrnrr~rrrrrr"rrrrrs@r=rrCs I:'$~@7r@2MK^]R GKk ' k !Ek Z"H<|-^#r?rselectinceZdZdZej dgdZdZfdZdZ dZ dZ d Z d Z d Zd Zd ZxZS)SelectInLoader)r omit_join _parent_alias _query_info_fallback_query_info queryinfo)load_only_childload_with_joinin_exprpk_colszero_idxchild_lookup_colsict||||jj|_|jjt j u}|jj|jj|_n~|jjd}|r|j|_nO|jjdj|jdd|jj|_|jrC|r+|j|_|j#|_y|j'|_y|j#|_y)NrrTFr-)rmrnrorr]r rArCrr rQr9rrr:_init_for_omit_join_m2orE_init_for_joinrF_init_for_omit_join)rqrQrris_m2orrss r=rnzSelectInLoader.__init__ s$ ...99%%//:3G3GG    ) ) 5!11;;DN--;;%J!+!3!3!%!8!8!;!C!C-- $!& $ ? ? "D" >>#'#?#?#A ,0,?,?,A)#'#;#;#= #224D r?ctjjjj fdt Dj jDcgc] }|vs|c}x}}t|dkDrtj|}d}n|d}d}jdd|||dScc}w)Nc3K|]6}jjj|dD] }||f 8yw)rN)rQr:rX)rrequivpk_to_fkrqs r=rz5SelectInLoader._init_for_omit_join.. sN 88<2B>c&|jj}t|dkDrtj|}d}n|d}d}|j j d}|Dcgc]}|j|}}|jdd||||Scc}w)Nr FrTr) r`rrr+rXrorr#rY)rqrKrJrLrr{ lookup_colss r=rOz&SelectInLoader._init_for_omit_join_m2o s++)) w'' (@(@$++N%%d2h < & 4//0 '??    7   '&'78 #{{ **   KK         r?c   !|rj|vryj} | jrtjt } g} j |D]\} j!t !fd| jD} tj| vrj} n2d| vr| | j!| fn| j!| f| js/|D cgc]"\}} |jd||j| f$} }} | j}| j}| j s;|j"r/|Dcgc]}|j%|}}|j%|}t'j(dg|}|j+}|j+}t-j.||gt0t2j4d|d}| j s|j7|}na|j7j8j;t=j8j>jjA|}|jC|jEtGjHd}|jJjL}|j>}||jNur |jP}nP|jP}|jNjP}tS||Dcgc]\}}|jU||}}}|r5|jVr)|t'jX||j[|fz }||j]}|j^|}|jad|i}|jbr|jed }j>jfr}| j sPj>jf}|j"r|Dcgc]}|j%|}}|jf|}n!fd }|ji|j>}| jrjk  | |||yjm | |||ycc} }wcc}wcc}}wcc}w) Nc3dK|]'}j|tj)yw)rxN)rYr PASSIVE_NO_FETCH)rlkr`r state_dicts r=rz0SelectInLoader._load_for_path..S s=& 44" * ; ; 5&s-0r r{r)compile_state_pluginplugin_subject)r}rrr~ primary_keysrT)rc|xjttjjj z c_yr5r\r_s r=r`z?SelectInLoader._load_for_path.._setup_outermost_orderby s3#22e T%9%9%B%BC72r?)7r8rErHrsrtr;rQrkr^rMrrrFrOrKrJrIr!r^r6Bundlerr.rr-rrrrDrLr rorJfilterin_r+rErvselect_statementuser_passed_queryrzip'_adapt_cached_option_to_uncached_optionrrrrrV_update_compile_optionsrrsr3ra_load_via_child_load_via_parent)"rqrrxrrrMryrrsrY our_states none_statesr related_identrrKrJr bundle_ent bundle_sql entity_sqlr5r2rrXcached_optionsuncached_optionsorig_opt uncached_optr]r=r`r`rgs"` ` @@r=rzSelectInLoader._load_for_path; s 2 %%  % %$006JK[[F$* G y"ZZ %&)::&! (99]J!%!:!:J},}-44 I6  &&z9'EF7 G<)))/$E91uejj)<J $$$$(( 00DK=@$33C8+99'B__T4G4 224 %88:  % %$j17,DD(-"2  ((  ./A  d00166**D,@,@,D,DEMM$A HHW[[~!>? @**;; 2d223 22 2$22K'55N&88FF /2"$4/ +Hl@@\K w.. --$44W= K  &+??AN AII{ # % %&G H  $ $##d#;A    ( (,,!%!5!5!>!>#44%3& )77=&N&AJJ/ )),d.B.B  % %  !    ! !J74E u d<&s,'Q2 Q8>Q=.Rc |j}t|}|r|d|j} ||jd}|jj |d| D cgc]} |j r| dn| c} i|j D cic]\} } | |  } } } | D]d} | j| d}|| D]H\}}}|s|j|vr|j|jj|||s|n|gJf|r|D]C\}}}|s|j|vr|j|jj||dEycc} wcc} } w)NrrjrLrs) rCsorted _chunksizerrrLrDrXr8rr)rqrvrwrYr5rrsrCour_keyschunkr8rr{data related_objrrrs r=rtzSelectInLoader._load_via_child s,,*%Q1E 12H$OO33&',) #'1&9&9CFsB) '84 &( Aq1 D   #hhsD1 /9#+E5)$U): NN488,@@+2    #D(3 M #E5)U!2 NN488 $ 8 8t L  M5) s E  Ec B|j}|rdnd}|r|d|j}||jd}|D cgc]\} } } } |jr| dn| } } } } } tjt }t j|jj|d| i|jdD] \}}||jd|D"|D]\} } } } | s|j| vr|j| |}|sX|rVt|dkDrtj d|z| j#|jj%| | |d| j#|jj%| | ||ryycc} } } } w) Nrrrjrc |dSrrrms r=r>z1SelectInLoader._load_via_parent..[ s !A$r?c3&K|] }|d yw)r Nrrps r=rz2SelectInLoader._load_via_parent..] s1r!u1rrr r)rCrrLrsrtr;rwrxrrrDryr8rXrrrrr)rqrvrYr5rrsrC _empty_resultrr8rrgrrjrrr{rs r=ruzSelectInLoader._load_via_parentE s,,%4 q4??3E#DOO$56J:?5C I%--A36L **40D!))''*L9&7(&(  21Q1q11 26; 1UJ  TXX%;!XXc=9 ::* .045 NN488,@@z:a= NN488,@@z:' )sF )rrrrrs namedtuplerYrrnrQrOrPrrrrtrurrs@r=rBrB{ sbI(''  JJ5<O, N' N `Qf5Mn/r?rBcfdfd}fd}tj|d|dddtj|d|dddy)Nc ||jjk(rh|jtj|}|rB||ur>t j dt j|d|jddd|S)Nz Instance z+ is already associated with an instance of z via its z0 attribute, and is only allowed a single parent.bbf1)code) r8 hasparentr instance_staterrr6 instance_strr\)rrJoldvalue initiatorrr:s r= _do_checkz*single_parent_validator.._do_checkx sz  $((!:!++J,E,Ee,LMIXU200 ,,U3U\\4I  r?c||d|Sr5r)rrJrrs r=rOz'single_parent_validator..append stY77r?c||||Sr5r)rrJrrrs r=set_z%single_parent_validator..set_ sx;;r?rOT)rawretvalrJr)r(listen)r9r:rOrrs ` @r=rPrPw sE 8< LL hDd LLudT$Or?)NNNNFN)Wr __future__rrsrwtypingrrrrrr r r rr rrrrrrrr6baserrrrrrrrrrrrr r!rr"rr#rr$r%r&r(rr)r*r+r5r,sql.selectabler-r. util.typingr/r`r0r1 sql.elementsr2rfColumnProperty strategy_forrj class_loggerrrrrrr r MemoizedSlots IdentifiedrrrrrrrBrPrr?r=rs/# ""'&)$*!&+# " ";#!3,N!b ''55'I( ( J( V ''4%'HW:>W:IW:t '''>T \T ?T n ''$'G '' dd( ''4'8l >l 9H l ^880" " J##00D0AnB##00h0?##00d0;#=)#=<@#=L##00d0;##00h0?##00g0>##00n0E##00n0EkJ 2 2CNNkJFF?@< kJ\1 1 hIH+IHX##00k0B`j`C`F##00j0AG GZG GBG GT##00h0?##00e0<r -r =@r j##00j0AwZ!3!3wBwtPr?