ÿØÿàJFIFÿþ ÿÛC       ÿÛC ÿÀÿÄÿÄ"#QrÿÄÿÄ&1!A"2qQaáÿÚ ?Øy,æ/3JæÝ¹È߲؋5êXw²±ÉyˆR”¾I0ó2—PI¾IÌÚiMö¯–þrìN&"KgX:Šíµ•nTJnLK„…@!‰-ý ùúmë;ºgµŒ&ó±hw’¯Õ@”Ü— 9ñ-ë.²1<yà‚¹ïQÐU„ہ?.’¦èûbß±©Ö«Âw*VŒ) `$‰bØÔŸ’ëXÖ-ËTÜíGÚ3ð«g Ÿ§¯—Jx„–’U/ÂÅv_s(Hÿ@TñJÑãõçn­‚!ÈgfbÓc­:él[ðQe 9ÀPLbÃãCµm[5¿ç'ªjglå‡Ûí_§Úõl-;"PkÞÞÁQâ¼_Ñ^¢SŸx?"¸¦ùY騐ÒOÈ q’`~~ÚtËU¹CڒêV  I1Áß_ÿÙ 4]c @@sdZddlmZddlZddlZddlmZddlmZddlm Z ddlm Z dd lm Z dd lm Z dd lm Z dd lmZdd lmZddlmZddl mZddl mZddlmZddlmZddlmZddlmZddlmZddlmZddlmZddlmZddlmZdd lmZdd lmZ ddlm!Z!e"e"e"e"e#e"dZ$e j%j&de#de#defdYZ'ej(e j%j&de)de#d efd!YZ*ej(e j%j&d"e)d#e*fd$YZ+ej(e j%j&de)de)e j%j&d%e)d&efd'YZ,d(e-fd)YZ.d*efd+YZ/ej(e j0j&d%e)d,efd-YZ1ej(e j0j&d.d/e j0j&d.e"d0e/fd1YZ2ej(e j0j&d.e)e j0j&d.d2e j0j&d.d3e j0j&d.d4e j0j&d.d5d6e/ej3fd7YZ4d8e-fd9YZ5e j0j&d.d:d;e/fd<YZ6ej(e j0j&d.d=d>e/fd?YZ7ej(e j0j&d.d@e j0j&d.e#dAe/fdBYZ8ej(e j0j&d.dCdDe/ej3fdEYZ9dFZ:dS(GsWsqlalchemy.orm.interfaces.LoaderStrategy implementations, and related MapperOptions.i(tabsolute_importNi(t attributes(texc(t interfaces(tloading(t properties(tquery(t unitofwork(tutil(t_DEFER_FOR_STATE(t_SET_DEFERRED_EXPIRED(tLoaderStrategy(tStrategizedProperty(t_state_session(t InstanceState(t _none_set(taliasedi(tevent(tinspect(tlog(tsql(tvisitorsc  @sttj|jdg} g} |o0|j|rR|jrR| jtn|j|j j kr|j j |j\| jfdn|r| jt j n|r|j r| jfdqnx|jD]} || jj|jkr| jj|j rtj| j|jd|dd|d|d| d |o{|jp{|jtjkd |d |d |d |d| p|j d|j|  } x| D]}|| |qWqqWdS(Ntdefaultc@stj||jS(N(torm_utilt_validator_eventstkey(tdesctprop(tfntopts(sL/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/orm/strategies.pytBsc@stj|S(N(Rtbackref_listeners(RR(tbackreftuselist(sL/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/orm/strategies.pyRPst parent_tokenR!tcompare_functiont useobjectt extensiont trackparentt typecallablet callable_tactive_historyt impl_classtsend_modified_eventstdoc(tlistRtto_listR%R!t single_parenttappendtsingle_parent_validatorRtparentt validatorsRttrack_cascade_eventstback_populatestself_and_descendantst_propstgett class_managert_attr_has_implRtregister_attribute_impltclass_t directionRt ONETOMANYtviewonlyR,(RtmapperR$R#R'R(tproxy_propertyR)R*tkwt attribute_extt listen_hookstmRthook((R RRR!sL/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/orm/strategies.pyt_register_attribute)sP       t instrumenttdeferredtUninstrumentedColumnLoadercB@s2eZdZdZdZddZdZRS(sRepresent a non-instrumented MapperProperty. The polymorphic_on argument of mapper() often results in this, if the argument is against the with_polymorphic selectable. tcolumnscC@s,tt|j|||jj|_dS(N(tsuperRJt__init__tparent_propertyRK(tselfR2t strategy_key((sL/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/orm/strategies.pyRMsc K@s;x4|jD])}|r&|j|}n|j|q WdS(N(RKR0( ROtcontextt query_entitytpathtloadopttadaptertcolumn_collectiontkwargstc((sL/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/orm/strategies.pyt setup_querys cC@sdS(N((RORQRSRTR@tresultRUt populators((sL/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/orm/strategies.pytcreate_row_processors(RKN(t__name__t __module__t__doc__t __slots__RMtNoneRYR\(((sL/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/orm/strategies.pyRJs  t ColumnLoadercB@s8eZdZdZdZdZdZdZRS(s8Provide loading behavior for a :class:`.ColumnProperty`.RKt is_compositecC@sAtt|j|||jj|_t|jd|_dS(Ntcomposite_class(RLRbRMRNRKthasattrRc(ROR2RP((sL/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/orm/strategies.pyRMsc K@skx4|jD])} |r&|j| } n|j| q W|jd} |rZ|j| } n| ||j|jsb|jrfd} |dj|j| fndS(NRc@s|j|dS(N(t_reset(RRR(R(sL/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/orm/strategies.pytreset_for_lazy_callables ( RRiRt"_instance_level_callable_processorR9tLoadLazyAttributeR0tpopulate_existingtalways_refresh( RORQRSRTR@RZRUR[tset_lazy_callableR+((RsL/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/orm/strategies.pyR\vs   ( RRRRRRRRRRRR(R]R^R_R`RMRqRRRRRRt dependenciesRRR\(((sL/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/orm/strategies.pyRs.  *    F R-cB@s&eZdZdZejdZRS(s-serializable loader object used by LazyLoadercC@s||_|j|_dS(N(RRP(RORtinitiating_strategy((sL/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/orm/strategies.pyRMs cC@sB|j}|jj}|j|}|j|j}|j||S(N(RRR@R7RRPR(RORRRRRR((sL/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/orm/strategies.pyRs    (R]R^R_RMRRR(((sL/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/orm/strategies.pyR-s t immediatetImmediateLoadercB@s/eZdZdZdddZdZRS(cC@s|jjdj|dS(NRR(RR((RR(RNRRq(ROR@((sL/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/orm/strategies.pyRqs  c K@sdS(N(( RORQRRSRTRURVt parentmapperRW((sL/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/orm/strategies.pyRYs c @s-fd}|djj|fdS(Nc@s |jjj||dS(N(RRR8(RRR(RO(sL/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/orm/strategies.pytload_immediatestdelayed(R0R( RORQRSRTR@RZRUR[R6((ROsL/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/orm/strategies.pyR\s(N(R]R^R`RqRaRYR\(((sL/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/orm/strategies.pyR4s   tsubquerytSubqueryLoadercB@seZdZdZdZdddZdZdZdZ dZ dZ d Z d e fd YZd Zd ZdZRS(t join_depthcC@s,tt|j|||jj|_dS(N(RLR9RMRNR:(ROR2RP((sL/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/orm/strategies.pyRMscC@s|jjdj|dS(NRR(RR((RR(RNRRq(ROR@((sL/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/orm/strategies.pyRqs  cK@s4|jjsdS|jjr/|jjdn||j}|j|jdd} | dk rl| j} n |j} |jjdt j j } | |} |j |jds |j r|jjr|jjjnd|jd|j kr dSq | j|jr dSn|j| \} } }|jjdtf|j}|j|| | ||j}|jj| }i|dtf6| d 6|_|jt}|j|| \}}}|j|}|j|}|j||||| }|j|| || }|j|}|j |jd|dS( NR8tpath_with_polymorphict subquery_pathtloaderiit orig_query(R<N(R<N(!Rt_enable_eagerloadst _yield_pert _no_yield_perRNR8RRaRRt PathRegistrytroottcontainsR:Rtlengthtcontains_mapperR@t _get_leftmostR9t_generate_from_original_queryt entity_zeroRt _attributest_set_enable_single_critRnt_prep_for_joinsR t add_columnst _apply_joinst_setup_optionst_setup_outermost_orderbyRm(RORQRRSRTRURVR5RWtwith_poly_infoteffective_entityt subq_pathtleftmost_mappert leftmost_attrtleftmost_relationshipR>t left_aliasRtto_joint local_attrt parent_alias((sL/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/orm/strategies.pyRYsZ             cC@s|j}tj|d}|jj|rW|j|dkrW|j|j}}n||d}}|j}g|D]&}t|dj|j |j ^qx}|||fS(Nii( RSRt_class_to_mapperR2tisaRNt local_columnstgetattrRt_columntopropertyR(RORSt subq_mapperRTt leftmost_propt leftmost_colsRXRU((sL/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/orm/strategies.pyRG9s  0c C@so|jjd}|jsg|jttg|jD] }|ddk r4|d^q4tn|j |}|j ||j } | t krt |_ nU| dkrxFtd|DD]+} t|j| jst |_ PqqWn|jtkr|j|_n|jdkrA|jdkrAd|_n|jj} tj|| dt } | S(NRcs@s|]}|jVqdS(N(ttable(t.0RX((sL/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/orm/strategies.pys }stuse_mapper_path(t_clonet correlateRat _from_objt_set_select_fromR-Rmtcolumn_descriptionsRnt_adapt_col_listt _set_entitiestdistinct_target_keyRht _distinctRRkt _order_byR t_limitt_offsett with_labelsR8Rt AliasedClass( ROR>RTRURVt orig_entityRtentt target_colsRmtttembed_qRW((sL/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/orm/strategies.pyRHQs6   #         cC@s:g}t|j}x{t|D]m\}\}}|dkrv||ddj}|j|rm|n|} n|} |j| |jfq%Wt|dkr|} nAt|dd} | j r| j } nt j | j dt } |jj} g| D]"} t| |jj| j^q}||| fS(NiiiiRe(R-tpairst enumerateR@R\R0RR&RRRRRsRhRNR]R^R2R_(RORWRSRXRytiR@Rt prev_mappert to_appendRZRt local_colsRXRY((sL/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/orm/strategies.pyRLs&     ,c C@st|}|dkr>t||ddj|g}ny|dkrt||ddj|t||ddj|g}n*|dkrg|dd!D]C}t|djstj|dn |dj|df^q}g} xl|rd|jd}t|d|d} |rE| j|dd} n| j|} | j | qWt||ddj| dj g| t||ddj|g}nx#|D]} |j | dt }qW|S(Niiiitfrom_joinpoint( R&R^tof_typeRRRRsRtpopR0R2tjoinRh( RORRXRWRZRRtltjtitemtmiddletinnertattr((sL/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/orm/strategies.pyRNs0  &  T + cC@s=|j|}|j|j}|jr9|j|_n|S(N(t_with_current_patht_conditional_optionst _with_optionst_populate_existing(RORRSR>RR((sL/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/orm/strategies.pyROs  cC@sP|jjrL|jd}|jjtj|jj}|j|}n|S(Ni(RNR Rht_target_adaptertcopy_and_processRR.(RORt eagerjointeager_order_by((sL/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/orm/strategies.pyRPs    t_SubqCollectionscB@s8eZdZdZdZdZdZdZRS(sGiven a :class:`.Query` used to emit the "subquery load", provide a load interface that executes the query at the first moment a value is needed. cC@s ||_dS(N(tsubq(ROR((sL/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/orm/strategies.pyRMscC@s/|jdkr|jn|jj||S(N(t_dataRat_loadR8(RORR((sL/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/orm/strategies.pyR8s cC@s/tdtj|jdD|_dS(Ncs@s8|].\}}|g|D]}|d^qfVqdS(iN((RdRtvtvv((sL/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/orm/strategies.pys scS@s|dS(Ni((tx((sL/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/orm/strategies.pyR!R(Rt itertoolstgroupbyRR(RO((sL/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/orm/strategies.pyRscC@s |jdkr|jndS(N(RRaR(RORRR((sL/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/orm/strategies.pyR=$sN( R]R^R_RaRRMR8RR=(((sL/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/orm/strategies.pyR s    c C@s9|jj|jjjs/tjd|n||j}|j|j d}|dkradS|j |j kst d|jj } |j|j d} | dkr|j|} |j|j d| n|rg| D]} |j| ^q} n|jr|j|| | |n|j|| | |dS(NsJ'%s' does not support object population - eager loading cannot be applied.R8slSubquery session doesn't refer to that of our context. Are there broken context caching schemes being used?t collections(R2R9Rtimpltsupports_populationRRRNR8RRaRtAssertionErrorR]RRmRKR!t_create_collection_loadert_create_scalar_loader( RORQRSRTR@RZRUR[RR~RRX((sL/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/orm/strategies.pyR\(s,      # c@sfdfd}|djjf|djj|f|jr|djjjfndS(Nc@sRjtgD]}||^qd}|jjj|||dS(N((R8ttupleRRtset_committed_value(RRRRut collection(RR~RO(sL/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/orm/strategies.pytload_collection_from_subqWs)c@s&j|kr"|||ndS(N(R(RRR(RRO(sL/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/orm/strategies.pyt&load_collection_from_subq_existing_row_sRtexistingteager(R0Rtinvoke_all_eagersR=(RORQRR~R[R((RRR~ROsL/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/orm/strategies.pyRTs  c@sfdfd}|djjf|djj|f|jr|djjjfndS(Nc@sjtgD]}||^qd}t|dkrUtjdn|d}|jjj|||dS(NisLMultiple rows returned with uselist=False for eagerly-loaded attribute '%s' i(N( R8RRaR&RR'RRR(RRRRuRtscalar(RR~RO(sL/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/orm/strategies.pytload_scalar_from_subqns)  c@s&j|kr"|||ndS(N(R(RRR(RRO(sL/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/orm/strategies.pyt"load_scalar_from_subq_existing_row{sRRR(R0RRR=(RORQRR~R[R((RRR~ROsL/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/orm/strategies.pyRks   (R:N(R]R^R`RMRqRaRYRGRHRLRNRORPtobjectRR\RR(((sL/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/orm/strategies.pyR9s   [  A / 4  , tjoinedt JoinedLoadercB@seZdZdZdZdZddedZdZ dZ dZ d Z d Z ed Zd Zd ZdZdZRS(scProvide loading behavior for a :class:`.RelationshipProperty` using joined eager loading. R:t_aliased_class_poolcC@s5tt|j|||jj|_g|_dS(N(RLRRMRNR:R(ROR2RP((sL/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/orm/strategies.pyRMscC@s|jjdj|dS(NRR(RR((RR(RNRRq(ROR@((sL/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/orm/strategies.pyRqs  c  K@s|jjsdS|jjr8|jr8|jjdn||j}d} |rc|j||nt} | tk r|j ||||| \} }} n|j |j ds|j r|j d|j krdSq|j|jrdSn|j||||||||\} }} }|j|j dd}|dk rP|j} nd} ||j}tj||j||| | d| d|jd||dk rdt|jkrtjd ndS( s@Add a left outer join to the statement that's being constructed.Nsjoined collectionR=iR;twith_polymorphicR5tchained_from_outerjoinsDetected unaliased columns when generating joined load. Make sure to use aliased=True or flat=True when using joined loading with with_polymorphic().(RR?R@R!RARNRat_init_user_defined_eager_procRnt$_setup_query_on_user_defined_adapterRDRR:RERFR@t_generate_row_adapterR8twith_polymorphic_mappersRRt_setup_entity_queryRmtsecondary_columnsRR(RORQRRRSRTRURVR5RRWRtuser_defined_adaptertclausestadd_to_collectionRQ((sL/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/orm/strategies.pyRYs\   !     c C@s2d|jkrtS|jj}|j|jdt}|tk rG|S|jd}|d\}}|dk rt|tr|j j |}nt j |d|j j}nf|j|jdr|j|jd}tj|jd|j j}n|jjj|j d}|j|jd||S(Nteager_from_aliast user_defined_eager_row_processoriRR;(RzRnRSR2R8RRaRtstrRtaliasRt ColumnAdapterR@RRDRt ORMAdapterRRt_polymorphic_adaptersRm( RORTRQRSRURt root_mapperRRQ((sL/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/orm/strategies.pyRs2      cC@s|j|j|}|rI|rI|j|}|j|jd|n%|rn|}|j|jd|n|j}|||fS(NR(t_get_entity_clausesRtwrapRmRtprimary_columns(RORQRRSRURR((sL/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/orm/strategies.pyR*s    cC@st|jjr't|jj}nd}d|f}||jkr\d|j|<}n|j|d|j|<}|t|jkrtj |j d|dk r|j dt nddt dt }t|jj |jj|n|j|S(Ntjoinedloader_aciiRtflatRe(RRRt selectableRaRR&RRRsR@RRhRXR0(RORQtalt_selectableRtidxtto_adapt((sL/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/orm/strategies.pyt_gen_pooled_aliased_classDs"   c  C@sG|j|jdd} | r*| j} n|j|} t| jd|ftj| d|j j dt dt dt } | j dk st|jjrt |_n|dk r|jjd|jjn |jj} | st }n|jj|j|||||| | |f |j} |j|jd| | || |fS( NR;tjoinedloader_ormadapterRtadapt_requiredtallow_label_resolvetanonymize_labelst innerjointeager_row_processor(R8RRaRRRt_memoRRR@RRhRnt aliased_classRRNR!tmulti_row_eager_loadersRzRtcreate_eager_joinsR0t_create_eager_joinRRm(RORQRRSRTRURVR5RRQRRRR((sL/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/orm/strategies.pyRgsB        '     c  C@s |dkr|j} n|} |jo0|jj} d} ||jkr| r|jrtj|j|j } t | dkrt j dn| r|j| d} | d| } }qn| dkr||j } }n|jj | |}|rt|ddr_t|jj| j|jr5| n|j}t|j|j|j}qttj|j|j dt|j|j}n |j}|jdk st| p| p|dkp|jj}|r4tj||j|d| p|jjp|ot|tj d|jd |j}n|j!||||}||j| <|j |_"|sx^tj#|jj$D]D}| j%j&j'|r|r|j(|}n|j)j*|qqWn|jj+r|j,|j-j.t/j0|jj+7_,ndS( NisCan't identify which query entity in which to joined eager load from. Please use an exact match when specifying the join path.iRRetunnestedtisoutert _left_memot _right_memo(1RaR@RRt_should_nest_selectablet eager_joinst from_clauseRt#find_left_clause_that_matches_givenRR&RRt setdefaultR^RRt_entity_for_mapperR\R2RRRNRRsRhRRItrepresents_outer_joint_ORMJoinRRtJoint_splice_nested_inner_jointstop_ont _find_columnst primaryjointpersist_selectableRXtcontains_columnRKRR0R RRRRR.(RORQRRRSRUR5RRRRtshould_nest_selectabletquery_entity_keytindexestclausetdefault_towrapttowraptefmtonclausetattach_on_outsideRRu((sL/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/orm/strategies.pyRs                    c C@s|tkr't|tjstnt|tjjrX|j||j |||St|tjs|d|krtj||j |dtd|d|dj SdSn|j||j |||j}|dkr/t}|j||j|||j}|dkr5|tk s(tddSnt}|r|j ra|j ra|j|}qtj|j||jd|jd|j}n-tj||j |jd|jd|j}|j|_|S(NiRRRis9assertion failed attempting to produce joined eager loads(RnRRRRRRt FromGroupingRtelementRR@RatrightRtleftRRhRt_splice_into_centerRR( RORStjoin_objRRtsplicingt target_joint right_spliceR((sL/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/orm/strategies.pyR6sV          cC@s|r|j||nt}|tk rl|}|jrT|rT|j|j}q|jr|j}qn%|j|jd}|dkrtS|jj||r|StSdS(NR( RRnRURR8RRaR@t_result_has_identity_key(RORQRZRURSRTRt decorator((sL/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/orm/strategies.pyt_create_eager_adapter|s   c C@s|jj|jjjs/tjd|n||j}|j|||||} | t k r|j} t j |j ||||j | } |js|j|| | |q|j|| | |n+|jjdj|||||||dS(NsJ'%s' does not support object population - eager loading cannot be applied.RR(RR((RR(R2R9RRRRRRNRRnRt_instance_processorR@RR!RRRR\( RORQRSRTR@RZRUR[tour_patht eager_adapterRt _instance((sL/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/orm/strategies.pyR\s,         c@sfd}fd}fd}|dj|j|f|dj|j|fjr|dj|j|fndS(Nc@sftj||}tj|d}|j|f<|}|dk rb|j|ndS(Ntappend_without_event(Rtinit_state_collectionRtUniqueAppenderRaR0(RRRRt result_listtinst(RRQR(sL/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/orm/strategies.pyt#load_collection_from_joined_new_rows   c@s|fjkr+j|f}n:tj||}tj|d}|j|f<|}|dk r|j|ndS(NR(RRRRRaR0(RRRRRR(RRQR(sL/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/orm/strategies.pyt(load_collection_from_joined_existing_rows   c@s|dS(N((RRR(R(sL/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/orm/strategies.pyt load_collection_from_joined_execsRRR(R0RR(RORQRRR[RRR ((RRQRsL/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/orm/strategies.pyRs     c@sfd}fd}fd}|djj|f|djj|f|jr|djj|fndS(Nc@s|||]4}jjj|dD]}||fVqqdS(N((R2RR8(RdRtequiv(tpk_to_fkRO(sL/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/orm/strategies.pys Lsii(RRNRtlocal_remote_pairsRR-R2RkR&Rttuple_RnRht query_infoRa(RORuRtfk_colsRR((R ROsL/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/orm/strategies.pyRGs3  cC@s|jj}t|dkr6tj|}t}n|d}t}|jjd}g|D]}|j |^q_}|j tt||||S(NiiRR(RR((RR( R@RkR&RR"RnRhRNRRR#(RORRRRRt lookup_cols((sL/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/orm/strategies.pyR]s    cC@st|jj|_t|j}g|jjD]}|j|^q1}t|dkrvtj |}t }n|d}t }|j t t |||dS(Nii(RR2R<RRRkt_adapt_elementR&RR"RnRhR#Ra(ROtpa_inspRuRRR((sL/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/orm/strategies.pyRms(  cC@s|jjdj|dS(NRR(RR((RR(RNRRq(ROR@((sL/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/orm/strategies.pyRq{s  ssqlalchemy.ext.bakedcC@s|jddS(NRi2(R(ROR((sL/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/orm/strategies.pyRsc C@sZ|jj|jjjs/tjd|n|jjpDt j j |}t j |d|jshdSt jj|||jrdS||j} ||j} | j|jdd} | dk r| j} n |j} | j|jds.|jr| jd|jkr+dSq.| j|jr.dSnt jj|||j|j|j| dS(NsJ'%s' does not support object population - eager loading cannot be applied.iR;R=i(R2R9RRRRRRRRRBRCt _entity_isaRtPostLoadt path_existsRNR8RRaRRDR:RERFR@tcallable_for_patht_load_for_path( RORQRSRTR@RZRUR[t selectin_patht path_w_proptselectin_path_w_propRQRR((sL/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/orm/strategies.pyR\s<        c@s<|rj|krdSj}|jrtjt}jx|D]\} jtfd|j D} t j | krj }Pnd| krJ|| j| fqJqJWn|jsg|D](\} jdj| f^q}n|j|j|jst} | jrgD]} | j| ^qH| jgD]} | j| ^qyqnjfd} |js| jfdn%j| jfd|jr!| jfdn| jfd|j}| j|j|j|jry| jdnjjr|jsjj| jrgD]}| j|^qn| jfd qfd }| j|n|jr"j||| |nj||| |dS( Nc3@s-|]#}j|dtjVqdS(RN(RRtPASSIVE_NO_FETCH(Rdtlk(R@Rt state_dict(sL/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/orm/strategies.pys sic@s|jtjdS(NR(RtBundle(R(RRR(sL/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/orm/strategies.pyRsc@s |jS(N(R(R(RR(sL/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/orm/strategies.pyRRc@s.|jjtjjjS(N(RRR^RNRR(R(RRtpaRO(sL/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/orm/strategies.pyR sc@s%|jjtjddtS(Nt primary_keyst expanding(Rtin_RRRh(R(R(sL/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/orm/strategies.pyR sc@s.|jjtjddtjS(NR5R6(RR7RRRhR (R(RR(sL/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/orm/strategies.pyR s!cS@s |jS(N(R.(R((sL/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/orm/strategies.pyR Rc@s |jS(N(R (R(R(sL/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/orm/strategies.pyR( Rc@s5|jd}|j|jjtjjjS(Ni(RhR RRRR.RN(RR(RO(sL/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/orm/strategies.pyRP+ s  ( RRRRt defaultdictR-R2RRRRRRRaR0RRRRRR&RRRRRRRNRR t_load_via_childt_load_via_parent(RORRQRStstatest load_onlyRRR#t our_statest overwritet related_identtinspRuRR>telemRP(( RRRRR@R4RRORR2sL/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/orm/strategies.pyR,sr        5     "(          %  cC@s|j}t|}x|r |d|j!}||j}d||jjdg|D]}|jrs|dn|^qZD} x|D]x}| |} xe||D]Y\} } } | r|j| krqn| j|jj| | |s| n| gqWqWqWdS(NicS@si|]\}}||qS(((RdRR((sL/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/orm/strategies.pys G s R5( R!tsortedt _chunksizeRRRRRR(ROR=R#RRQR!tour_keystchunkRtdatat related_objRRR>((sL/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/orm/strategies.pyR9= s"    3  cC@sx|j}|rdnd}xV|rs|d|j!}||j}g|D]+\}} } } |jrm|dn|^qH} dtj||jjd| dD} x|D]\}} } } | r|j| krqn| j ||}| rM|rMt |dkr't j d|n| j |jj| | |dq| j |jj| | |qWqWdS(NicS@s6i|],\}}g|D]}|d^q|qS(i((RdRRR((sL/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/orm/strategies.pys i s R5cS@s|dS(Ni((R((sL/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/orm/strategies.pyRl RisLMultiple rows returned with uselist=False for eagerly-loaded attribute '%s' ((R!RaRCRRRRRRR8R&RR'RR(ROR=R#RRQR!t _empty_resultRERRR2R>R5RFR((sL/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/orm/strategies.pyR:[ s0   5  (R:RRRRR(R]R^R`Rt namedtupleR#RCRMRRRRqRR1RR\R,R9R:(((sL/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/orm/strategies.pyRs2       1 c @s{fdfd}fd}tj|d|dtdtdttj|d|dtdtdtdS( Nc@sz|dk rv|jjkrv|jtj|}|rv||k rvtjdtj||j fqvn|S(NssInstance %s is already associated with an instance of %s via its %s attribute, and is only allowed a single parent.( RaRt hasparentRtinstance_stateRRRt instance_strR<(RRtoldvaluet initiatorRJ(R(sL/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/orm/strategies.pyt _do_check s%c@s||d|S(N(Ra(RRRN(RO(sL/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/orm/strategies.pyR0 sc@s||||S(N((RRRMRN(RO(sL/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/orm/strategies.pytset_ sR0trawtretvalR)Rm(RtlistenRh(RRR0RP((RORsL/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/orm/strategies.pyR1 s  (;R_t __future__RRRRRRRRRRRRRRtbaseR R R R RR RRRRRRRRRRRRaRnRGtColumnPropertyt strategy_forRJt class_loggerRhRbRxR}RRRtRelationshipPropertyRRt MemoizedSlotsRR-R4R9RRR1(((sL/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/orm/strategies.pyt s   M#B;  +u