ÿØÿà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@@sdZddlmZddlZddlmZddlmZddlmZddlm Z dd l m Z dd l m Z dd l mZdd l mZd dlmZd dlm Z d dlm Ze jZdZe jdedZdZeeedZeeeedZeeedZeeeedZdZdZ dZ!dZ"dZ#de$fdYZ%dZ&dS(sprivate module containing functions used to convert database rows into object instances and associated state. the functions here are called primarily by Query, Mapper, as well as some of the attribute loading strategies. i(tabsolute_importNi(t attributes(texc(t path_registry(tstrategy_options(t_DEFER_FOR_STATE(t_SET_DEFERRED_EXPIRED(t _none_set(t state_stri(tutilc#@s#t|_i|_j}j oJtjdkoJjdj}|rt|rbt}qtfd}ny~t t gjD]}|j ||^q\}}|st j d|} nxtri|_jr |jj} | sPqn |j} |rG|d} g| D]} | | ^q,} n8g| D]+} | g|D]} | | ^q^^qN} x-|jjD]\}}|j||qW|rt j| |} nx| D] } | VqWjsPqqWWn*tk r}|jt j|nXdS(s$Return an ORM result as an iterator.iic@s tdtj|DS(Ncs@s0|]&\}}|jr$t|n|VqdS(N(tuse_id_for_hashtid(t.0tenttitem((sI/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/orm/loading.pys 8s(ttupletzipt _entities(trow(tquery(sI/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/orm/loading.pyt filter_fn6stresultN(t _new_runidtrunidtpost_load_pathst_has_mapper_entitiest_only_return_tuplestlenRtsupports_single_entityR tlistRt row_processorR tlightweight_named_tupletTruetpartialst _yield_pert fetchmanytfetchalltitemstinvoket unique_listt Exceptiontclosetraise_from_cause(Rtcursortcontexttfilteredt single_entityRt query_entitytprocesstlabelst keyed_tupletfetchtprocRtrowstpatht post_loadterr((RsI/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/orm/loading.pyt instances#sP     4     "5     ssqlalchemy.orm.queryc C@s|j}|r|jn|j}zt|_t|jdk}|rt|jd|jrg|D]<}|jt j |t j |d|didi^ql}qt |}ngt |jD]$\} } t| |jr| ^q} g}g|jD]} | j^q } tjd| }x|D]}t |}xc| D][} || dk rQ|jt j || t j || d|didi||     I   cC@s|jj|}|dk rtj|}|jr|tj@sJtjS|tj@s[|Sy|j ||Wqt j k r|j |gdSXn|SdSdS(sqLook up the given key in the given session's identity map, check the object for expired state if found. N( t identity_maptgetRHRRDtexpiredtSQL_OKtPASSIVE_NO_RESULTtRELATED_OBJECT_OKt _load_expiredtorm_exctObjectDeletedErrort_remove_newly_deleted(R=tkeytpassiveRMtstate((sI/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/orm/loading.pytget_from_identitys    c C@sR|dk r#|d}|d}n d}}t||d|d|d|d|S(s.Load the given identity key from the database.iit refresh_statetwith_for_updatetonly_load_propstidentity_tokenN(RHtload_on_pk_identity(RR^RbRcRdtidentRe((sI/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/orm/loading.pyt load_on_idents    c C@s|dkr%|j}|jn |j}|dk r%|j}|j\}} d|krtgt|j|D]%\} } | dkrz| | j^qz} t j || }n|j |t t }||_tgt||jD]\} }| |j| f^q}||_n|dk rCt }||_n*|jdk rgt }|j|_nt }|jdt|d|d|d|d|d|_y|jSWntjk rdSXdS(s6Load the given primary key identity from the database.tpopulate_existingt version_checkRdRbReN(RHt_clonet_get_conditiont _mapper_zerot _get_clausetsetRt primary_keyR^tsql_utiltadapt_criterion_to_nullt _adapt_clauseR R@t _criteriontdictt_paramst_for_update_argt _get_optionstboolt _order_bytoneR[t NoResultFound(Rtprimary_key_identityRbRcRdRetqtmapperRnt _get_paramstcoltvaluetnonestid_valRptparamsRj((sI/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/orm/loading.pyRfsN       " 5      c  K@s|r|j|} n |j} i} |j|jd| xT| D]L} |re| j|kreqDn| j||||d|d|d| | qDW|dk r||jk r|r|j|} n|} |j | ndS(Ntmemoized_setupsRdtcolumn_collectiontmemoized_populators( t_iterate_polymorphic_propertiest_polymorphic_propertiesRoRR^tsetupRHtpolymorphic_ontcolumnsRI(R,RR/R6tadapterRtwith_polymorphicRdtpolymorphic_discriminatortkwtpoly_propertiestquick_populatorsRtpd((sI/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/orm/loading.pyt_setup_entity_querys0      c @s j r2g D]} j| ^q n jtjt j} d k r| j fd D} n|j j dt } x/| D]'} | | kr| | } | t krdj | j| jfq| tkrdj | jtfqd }rNj| }|d k rN|j|t}qNn|si|j| t}n|rdj | j|fq| j| |q| j| |qWjjjjrjj|n|jjjp jt jjjt jjj tjjj! rnjjj! nt j"t j#jj$j%j&j' r|d k rd|jf}|j krj |j(dt)ffkr j*j |j+d|}n j*d |}|r||k r d ksPt,t-||}t.j/|j0|||qnt.j1 rjd kr j2qnd  j3rt j4n t j fd } j5r| r rt6| |||}n|S( s`Produce a mapper level row processor callable which processes rows into mapped instances.c3@s|]}j|VqdS(N(t_props(R tk(R(sI/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/orm/loading.pys psRtnewtexpiretquicktloadertselectinload_polymorphictentitiesc @s7rB}|j}|}|jk}t}t}ntg D]}||^qOf}j|}|dk r|}|}|jk}| }t}r^| r^t |||q^nx|drdSt}t}t} jj }|}|}||_ |_ |_ j |||sjr|rs} r|_|_nt||||| |rg|rr|jjj|n r# j|jq#n"r#|jjj| ns2|jrgrQ rQ|j| qd|j|qgnr3j|tq3n|j} |jk}| s| sdrt||||| } |rr|jjj|| n|j|| qnr3jr3j|tn|S(Niteager(tobjRR R@RRURHt_validate_version_idt class_managert new_instanceR^Ret session_idt_add_unpresentt load_optionst load_patht_populate_fulltmanagertdispatchR:R=trefreshtmodifiedt_committ _commit_allt add_statetunloadedR!t_populate_partialtinvoke_all_eagers( RR`RMtdict_tisnewt currentloadtloaded_instancetcolumnt identitykeyRtto_load(RR,tidentity_classReRERDtis_not_primary_keytload_evtRtloaded_as_persistentRRdtpersistent_evttpk_colsRit populatorsR7tpropagate_optionst refresh_evttrefresh_identity_keyRbRRtsession_identity_mapRj(sI/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/orm/loading.pyt _instances                     N(7RpRt_identity_classt collectionst defaultdictRt _prop_setRHt intersectionRURRRRIR^t_deferred_column_loaderRR@t_gettertcreate_row_processorRRt _current_pathR6R=RTRitalways_refreshRyRRR:RRRDREthash_keyRjRRetstrategyR t_should_selectin_loadt local_optstAssertionErrort_load_subclass_via_intPostLoadtcallable_for_pathRt for_contextt_identity_key_from_statetallow_partial_pkst issupersettpolymorphic_mapt_decorate_polymorphic_switch(RR,RR6RRdRbRt_polymorphic_fromtctpropsRtpropRtgettert adapted_colR^tselectin_load_viat callable_R((RR,RReRERDRRRRRRdRRRiRR7RRRRbRRRRjsI/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/orm/loading.pyt_instance_processorQs #   "                         W c@ss|j}t|jjdk|jrE|j|\n|j\fd}|S(Nic @s|j}jf|jf|jd|}|jrQ|jdn||jjdg|D]0\}}r|jddn |jd^qjj dS(Nt cache_pathcS@s |jS(N(Ri(R~((sI/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/orm/loading.pyttt primary_keysii( Rt_with_lazyload_optionst _with_optionstparentt_populate_existingt add_criteriaR=RR^tall( R,R6tstatest load_onlyteffective_entityt orig_querytq2R`t load_attrs(t disable_optt enable_optR~tzero_idx(sI/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/orm/loading.pytdo_loads    (RRt base_mapperRptis_aliased_classt_subclass_load_via_int_subclass_load_via_in_mapper(R,R6tentityRR((RRR~RsI/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/orm/loading.pyRs  c C@s|r|j|_x(|dD]\} } | ||| sL   I 5  L / , 9 "  4: