mò /&ÜGc@s¿dZdklZlZlZlZlZlZdkl Z l Z dk Tdkl Z dklZdkZdkZdefd„ƒYZeieƒe_d efd „ƒYZeieƒe_d efd „ƒYZd efd„ƒYZdefd„ƒYZeieƒe_defd„ƒYZeieƒe_defd„ƒYZeieƒe_defd„ƒYZeieƒe_defd„ƒYZeieƒe_dS(sTsqlalchemy.orm.interfaces.LoaderStrategy implementations, and related MapperOptions.(ssqlsschemasutils exceptionsssql_utilslogging(smappersquery(t*(ssession(sutilNt ColumnLoadercBs/tZd„Zdd„Zd„Zd„ZRS(NcCs&tt|ƒiƒ|ii|_dS(N(tsuperRtselftinittparent_propertytcolumns(R((t=/home/holguin2/public_html/spyce/sqlalchemy/orm/strategies.pyRscKsRxK|iD]@}|dj o|ii|i|ƒƒq |ii|ƒq WdS(N( RRtct eagertabletNonetcontextt statementt append_columntcorresponding_column(RR R tkwargsR((Rt setup_querys   c szˆiidˆiˆiiifƒtii ˆiiˆidt d‡d†d‡d†dˆi di i ƒƒdS( Ns)register managed attribute %s on class %stuselistt copy_functioncsˆidii|ƒS(Ni(RRttypet copy_valuetx(R(R(Rtstcompare_functioncsˆidii||ƒS(Ni(RRRtcompare_valuesRty(RR(R(RRstmutable_scalarsi(Rtloggertinfotkeytparenttclass_t__name__t sessionlibtattribute_managertregister_attributetFalseRRt is_mutable(R((RRtinit_class_attributes&cCsf|o[|iidti||iƒ|i i |i difƒ||i d|i |itZdZd„Zd„Zd„Zd„Zed„ZRS(sdescribes an object attribute that corresponds to a table column, which also will "lazy load" its value from the table. this is per-column lazy loading.cCs5tt|ƒiƒ|ii|_|ii|_dS(N(RR3RRRRtgroup(R((RR*scs†ˆiidˆiˆiiifƒtii ˆiiˆidt d‡d†d‡d†d‡d†d ˆi d i i ƒƒdS( Ns)register managed attribute %s on class %sRt callable_cs ˆi|ƒS(N(Rt setup_loaderti(R7(R(RR1sRcsˆidii|ƒS(Ni(RRRRR(R(R(RR1sRcsˆidii||ƒS(Ni(RRRRRR(RR(R(RR1sRi(RRRRRRR R!R"R#R$RRR%(R((RRR&/s&cKsdS(N((RR R((RR3scCsr|og|i pt|iƒo2tii||i t d|i ||iƒƒqntii ||i ƒndS(NR5(R'Rt is_defaulttlenR/toptionsR!R"tinit_instance_attributeR+RR$R6treset_instance_attribute(RR/R+R,R0R'((RR16s2csntiˆƒpdSnDtiˆƒiˆi}|ˆi j o|i t ƒi ˆƒSn‡‡d†}|S(Nc s‹ˆiidtiˆˆiƒtˆiƒfƒyˆi i ˆi di }Wn&tj oˆi di i}nXtiƒ}xH|D]@}ˆi iˆ|ƒ} | pdSn|ii|| jƒqŒWtiˆƒ}|djo#tidˆiˆifƒ‚ntiˆƒ}ˆidj o*g} |i"i#ƒD]7} t%| i&t'ƒo| iˆijo | | qBqB~ }|i)|ti*g} |D]} | | i dqœ~ |dt,ƒdƒ}z{|i.ƒ}xY|D]Q}|ˆjoqánti1i2ˆ|idt3ƒ||i dˆi4|i2  #TI  (ROt has_mapperR+R RPRSRRR_Rt _get_strategyR3R6Rb(RR+R:R_Rb((RR+RR6=s%( R R2t__doc__RR&RR1R R6(((RR3's     tDeferredOptioncBstZed„Zd„ZRS(NcCs#tt|ƒi|ƒ||_dS(N(RRfRt__init__Rtdefer(RRRh((RRgnscCs|iotSntSdS(N(RRhR3R(R((Rtget_strategy_classqs (R R2R$RgRi(((RRfms tAbstractRelationLoadercBs)tZd„Zdd„Zdd„ZRS(NcCs­tt|ƒiƒ|ii|_|ii|_|ii|_|ii|_|ii |_ |ii |_ |ii |_ |ii |_ |ii |_ |ii|_dS(N(RRjRRRt primaryjoint secondaryjoint secondaryt foreignkeyROttargetRtcascadet attributeexttorder_by(R((RRxsc Cs1tii||i|id|idtd|ƒS(NRpt trackparentR5( R!R"R;R+RRRRpR\R5(RR+R5((Rt_init_instance_attribute…scCs‡|iid|iodpd|i|iiifƒti i ||id|id|i d|i dt d|iid |ƒdS( Ns,register managed %s attribute %s on class %ss list-holdingRaRt extensionRpRst typecallableR5(RRRRRRRR R!R"R#RqRpR\Rtcollection_classR5(RRR5((Rt_register_attributeˆs:(R R2RR RtRx(((RRjws tNoLoadercBstZd„Zd„ZRS(NcCs|iitƒiƒdS(N(RRRdt LazyLoaderR&(R((RR&scCs^|oS|i pt|iƒo4|iidti ||i ƒƒ|i |ƒqZndS(Ns"set instance-level no loader on %s( R'RR8R9R/R:RR(R)R*R+RRt(RR/R+R,R0R'((RR1s#(R R2R&R1(((RRyŒs RzcBs8tZd„Zd„Zdd„Zd„Zd„ZRS(NcCstt|ƒiƒ|i|ii|i|i|i ƒ\|_ |_ |_ |i oti|iƒii|i ƒ|_dS(N(RRzRRt_create_lazy_clauseRtunjoined_tableRkRlRnt lazywheret lazybindst lazyreverseRtquerytQueryROt _get_clausetcomparetuse_get(R((RR˜s9cs#ˆiˆiid‡d†ƒdS(NR5cs ˆi|ƒS(N(RR6R7(R7(R(RR s(RRxRR(R((RRR&ŸscsqtiˆƒpdSnDtiˆƒiˆi}|ˆi j o|i t ƒi ˆƒSn‡‡‡d†}|S(Nc sSˆiidˆitiˆƒfƒh}t}t i ˆƒpdSnxXˆi iƒD]G\}}ˆiiˆ|ƒ||i<||idjo t}PqZqZW|pdSntiˆƒ}|djoUyt iˆƒiƒ}Wq%tij o&tidˆiˆifƒ‚q%Xnˆioeg}x?ˆi iˆi iD]'}ˆi!|}|i"||iƒqLW|i#ˆi ƒi$|ƒSn]ˆi%tj o ˆi%}n@ˆi&dj o)ˆi&i'ƒdj oˆi&i'ƒ}nt}|i#ˆi dˆƒi)ˆi*d|d|ƒ}ˆi,o|Snt-|ƒo |dSndSdS(Ns%lazy load attribute %s on instance %ssŒParent instance %s is not bound to a Session, and no contextual session is established; lazy load operation of attribute '%s' cannot proceedt with_optionsRrtparamsi(.RRR(RR)t instance_strR+R†R\t allparamsROt has_identityR R~t iteritemstcoltbindRRGR$R!RKRLRPt get_sessionRMRNR-R„tidentR?t mapped_tableRCRRJR€tgetRrRmtdefault_order_byR:tselect_whereclauseR}R]RR9( RCRŒRŽRLR†R]RrRˆR‹(RR:R+(RRb©sJ&   (   &0   (RORcR+R RPRSRRR_RRdRzR6Rb(RR+R:R_Rb((RR+R:RR6¢s3cCs¬|o¡|i pt|iƒoI|iidti ||i ƒƒ|i |d|i ||iƒƒq¨|iidti ||i ƒƒtii||i ƒndS(Ns$set instance-level lazy loader on %sR5s!set class-level lazy loader on %s(R'RR8R9R/R:RR(R)R*R+RRtR6R!R"R<(RR/R+R,R0R'((RR1Þs #&#c s·h‰h‰d„‰d„‰d„‰‡‡‡‡‡‡‡d†} |iƒ} t i | ƒ}| i |ƒ|dj oti| |ƒ} ntiidt| ƒƒ| ˆˆfS(NcCs|i|dtdtƒdj S(Ntraiseerrtkeys_ok(R@RtcolumnR$R (R@R•((Rtcolumn_in_tableñscsit|tiƒpdSng‰dtif‡d†ƒY}|i|ƒƒt ˆƒo ˆdpdS(NtFindColumnInColumnClausecstZ‡d†ZRS(Ncsˆi|ƒdS(N(RRJR(RR(R(Rt visit_columnùs(R R2R˜((R(RR—øsi( RVtexprRDt ColumnElementR Rt ClauseVisitorR—taccept_visitorR9(R™R—R((RRtfind_column_in_exprôs cCsdttiddƒƒdS(Ntlazy_iiÿÿi(thextrandomtrandint(((Rt bind_labelþsc s]ˆ|iƒ}ˆ|iƒ}|djp |djodSn|i|ij}| oˆˆ|ƒp|o^|ˆjoQ|}ˆi |tiˆƒdd|id|iiƒƒ|_ˆ|ˆ|( RR@RkRlRnRR®R²RªR–R¢R}R¯((R@RnRR®RªR–R¢RR{îs     (R R2RR&R R6R1R{(((RRz—s    < t EagerLoadercBsQtZdZd„Zdefd„ƒYZd„Zeeed„Zd„Z RS(s1loads related objects inline with a parent query.cCstt|ƒiƒ|ii|iƒo;tid|i t |ii ƒt |ii ƒfƒ‚n|ii i |iƒh|_h|_dS(Ns‹Error creating eager relationship '%s' on parent class '%s' to child class '%s': Cant use eager loading on a self referential relationship.(RR³RRRtisaRORMt ArgumentErrorRtreprRt_eager_loaderstaddRRItclauses_by_lead_mapper(R((RR s ; tAliasedClausescBs8tZdZed„Zed„Zd„Zd„ZRS(s,defines a set of join conditions and table aliases which are aliased on a randomly-generated alias name, corresponding to the connection of an optional parent AliasedClauses object and a target mapper. EagerLoader has a distinct AliasedClauses object per parent AliasedClauses object, so that all paths from one mapper to another across a chain of eagerloaders generates a distinct chain of joins. The AliasedClauses objects are generated and cached on an as-needed basis. e.g.: mapper A --> (EagerLoader 'items') --> mapper B --> (EagerLoader 'keywords') --> mapper C will generate: EagerLoader 'items' --> { None : AliasedClauses(items, None, alias_suffix='AB34') # mappera JOIN mapperb_AB34 } EagerLoader 'keywords' --> [ None : AliasedClauses(keywords, None, alias_suffix='43EF') # mapperb JOIN mapperc_43EF AliasedClauses(items, None, alias_suffix='AB34') : AliasedClauses(keywords, items, alias_suffix='8F44') # mapperb_AB34 JOIN mapperc_8F44 ] cCs‚||_|i|_|iiƒ|_|ioŸ|iiƒ|_ti |i|idh|i|i<|i|i<ƒ|_ |i i ƒ|_ |i i|i ƒ|ii ƒ|_|ii|i ƒnPti |idh|i|i<ƒ|_ |ii ƒ|_|ii|i ƒ|dj o|ii|i ƒn|io|i|iƒ|_n d|_|iƒ|_dS(Ntaliases(t eagerloaderRRRotaliast eagertargetRmteagersecondarytsql_utilt Aliasizert aliasizerRlR°teagersecondaryjoinRœRkt eagerprimaryt parentclausesR Rrt_aliasize_orderbyteager_order_byt_create_decorator_rowt_row_decorator(RR¼RÅ((RRgFs&   ?*   cCs·|o4g}ti|ƒD]}||iƒq~}nti|ƒ}xftdt|ƒƒD]O}t ||t i ƒo|ii||ƒ||add a left outer join to the statement thats being constructedNt _outerjoinsPEagerLoader cannot locate a clause with which to outer join to, in query '%s' %storder_by_clauseR RÅt parentmapper(8RÜR R RORQRtrecursion_stackR¸RR thasattrRÚttowrapRVRRÐtTableRRtfromsRRÀt TableFindert fromclausetfinderRDtAliasRMRNR>RIRÅRBR³RºR¹Rlt outerjoinR¿RÄR¾RÃRrR$RmR‘RÇRËRÌtgetattrRÆRÛt append_fromRSRTtvaluetsetup(RR R RÅRÜRRIRãRßR RäRQRéRRR((RRŒsN    4 $ )  0&& c Csk||ijodSnyŽ|iit|ifƒo=|it|if} | djo |} q“| |ƒ} n |i |i } | i|ƒ} |i i| ƒ}Wn_tj oS|iidti||iƒƒ|iitƒi|||||ƒdSnX|ii|ƒz;|ipj|iidti||iƒƒ|o&|i i|| dƒ|i |i