Ñò ‰„[Jc @sÀddklZddkZddklZddklZlZlZl Z l Z l Z ddk l Z ddk lZdefd„ƒYZd efd „ƒYZd efd „ƒYZdS( iÿÿÿÿ(t EMPTY_SETN(tutil(tPASSIVE_NORESULTt PASSIVE_OFFt NEVER_SETtNO_VALUEtmanager_of_classt ATTR_WAS_SET(t attributes(t interfacest InstanceStatecBsdeZdZdZdZdZeZeZ dZ dZ dZ dZ d„Zd„Zd„Zd„Zd„Zed„ƒZed„ƒZd„Zd „Zd „Zd „Zd „Zed „Zd„Zd„Zd„Zd„Z d„Z!d„Z"ed„ƒZ#ed„ƒZ$dd„Z%d„Z&d„Z'd„Z(ed„Z)d„Z*dd„Z+RS(s/tracks state information at the instance level.cCsg|i|_||_ti||iƒ|_t|_h|_ t|_ h|_ h|_ h|_ dS(N(t __class__tclass_tmanagertweakreftreft_cleanuptobjtFalsetmodifiedt callablestexpiredtcommitted_statetpendingtparents(tselfRR ((s8/usr/lib/python2.6/site-packages/sqlalchemy/orm/state.pyt__init__s       cCs|io |`ndS(N(t session_id(R((s8/usr/lib/python2.6/site-packages/sqlalchemy/orm/state.pytdetach s cCs|io |`n|`dS(N(RR(R((s8/usr/lib/python2.6/site-packages/sqlalchemy/orm/state.pytdispose$s  cCs2|iƒ}|o|i|ƒn|iƒdS(N(t_instance_dicttremoveR(RRt instance_dict((s8/usr/lib/python2.6/site-packages/sqlalchemy/orm/state.pyR)s cCsdS(N(tNone(R((s8/usr/lib/python2.6/site-packages/sqlalchemy/orm/state.pyR/scCs/|iƒ}|dj oti|ƒShSdS(N(RR!RR (Rto((s8/usr/lib/python2.6/site-packages/sqlalchemy/orm/state.pytdict2s  cCs"|io|idp |ifS(Ni(tkeyt insert_order(R((s8/usr/lib/python2.6/site-packages/sqlalchemy/orm/state.pytsort_key:scCs|iS(N(R(R((s8/usr/lib/python2.6/site-packages/sqlalchemy/orm/state.pytcheck_modified>sc Os÷|d|d|d}}}|i}x'|iiD]}|||||ƒq6W|ioD|itj o4t|_ti|iƒ|i ƒ|_h|_ ny|ii |d|ŽSWn4x'|ii D]}|||||ƒqÏW‚nXdS(Niii( R teventston_inittmutable_attributesR tMutableAttrInstanceStateRRRRt mutable_dictt original_initton_init_failure(tmixedtkwargsRtinstancetargsR tfn((s8/usr/lib/python2.6/site-packages/sqlalchemy/orm/state.pytinitialize_instanceBs       cKs"|ii|ƒi||i|S(N(R tget_implt get_historyR#(RR$R0((s8/usr/lib/python2.6/site-packages/sqlalchemy/orm/state.pyR6XscCs|ii|ƒS(N(R R5(RR$((s8/usr/lib/python2.6/site-packages/sqlalchemy/orm/state.pyR5[scCs/||ijotƒ|i|s RRRRRRc3s:x3|],}|ˆijo|ˆi|fVqqWdS(N(RD(RERF(R(s8/usr/lib/python2.6/site-packages/sqlalchemy/orm/state.pys †s R$t load_optionstexpired_attributesR,t load_path(scommitted_statespendingsparentssmodifiedsexpireds callables(skeys load_optionssexpired_attributess mutable_dict(RtupdateRIR tserialize_path(Rtd((Rs8/usr/lib/python2.6/site-packages/sqlalchemy/orm/state.pyt __getstate__ys     cs"tiˆd|iƒ|_ˆdi|_t|iƒ|_ˆidhƒ|_ ˆidhƒ|_ ˆidhƒ|_ ˆidt ƒ|_ ˆidt ƒ|_ˆidhƒ|_|i oˆd|_n|ii‡fd†dDƒƒd ˆjotiˆd ƒ|_ndS(NR1RRRRRRc3s4x-|]&}|ˆjo|ˆ|fVqqWdS(N((RERF(tstate(s8/usr/lib/python2.6/site-packages/sqlalchemy/orm/state.pys žs R$RGRHR,RI(skeys load_optionssexpired_attributess mutable_dict(RRRRR R RR R;RRRRRRRt _strong_objRDRJR tdeserialize_pathRI(RRN((RNs8/usr/lib/python2.6/site-packages/sqlalchemy/orm/state.pyt __setstate__Žs      cCs#|ii|ƒi||iƒdS(N(R R5t initializeR#(RR$((s8/usr/lib/python2.6/site-packages/sqlalchemy/orm/state.pyRR¦scCs$|ii|dƒ||i|Ïs (R]R titerkeys(R((Rs8/usr/lib/python2.6/site-packages/sqlalchemy/orm/state.pytunloadedÆscCstt|iƒ|_|djo{|iiƒ}t|_|ioF|p+|iƒ}|o|i i |ƒqƒq‡|i i |ƒnt |_t}nt }|i }xÄ|D]¼}|i|i }| p|i p ||jo/|ii|ƒ|io||i|R$R=((s8/usr/lib/python2.6/site-packages/sqlalchemy/orm/state.pytexpire_attributesÒs8           cCs'|i|dƒ|ii|dƒdS(s@remove the given attribute and any callables associated with it.N(RSR!R(RR$R>((s8/usr/lib/python2.6/site-packages/sqlalchemy/orm/state.pytresetôscCsdS(N(R!(R((s8/usr/lib/python2.6/site-packages/sqlalchemy/orm/state.pyRúscCs |iƒS(N(R(R((s8/usr/lib/python2.6/site-packages/sqlalchemy/orm/state.pyt_is_really_noneýscCs|i|ij}|ož|tjoB|o%|i|jo||i}qdqh|i||ƒ}n|o)|dttfjo|i|ƒ}n|o||i|iR[t should_copytpreviousR9tneeds_committedR ((s8/usr/lib/python2.6/site-packages/sqlalchemy/orm/state.pytmodified_events$     cCsÉ|i}x_|D]W}||jo1||ijo!||ii|||iƒq|ii|dƒqWt|_xN|i i |ƒD]:}||jo'|i i |ƒ|i i|dƒq‡q‡WdS(s8Commit attributes. This is used by a partial-attribute load operation to mark committed those attributes which were refreshed from the database. Attributes marked as "expired" can potentially remain "expired" after this step if a value was not populated in state.dict. N( R R*R=tcommit_to_stateRRSR!RRRHt intersectionRR(RR>RaRYR$((s8/usr/lib/python2.6/site-packages/sqlalchemy/orm/state.pytcommits !  cCsêh|_h|_|ioDx-|ii|ƒD]}|ii|dƒq/W|ii|ƒnxE|ii D]7}||jo$|i|i i |||iƒqmqmW|o|i o|i i|ƒnt|_ |_d|_dS(scommit all attributes unconditionally. This is used after a flush() or a full load/refresh to remove all pending state from the instance. - all attributes are marked as "committed" - the "strong dirty reference" is removed - the "modified" flag is set to False - any "expired" markers/callables are removed. Attributes marked as "expired" can potentially remain "expired" after this step if a value was not populated in state.dict. N(RRRHRrRRSR!tdifference_updateR R*R=RqRRcRdRRRO(RR>R R$((s8/usr/lib/python2.6/site-packages/sqlalchemy/orm/state.pyt commit_all2s     (N((,t__name__t __module__t__doc__R!RR$trunidRRHRGRIR%R,RORRRRRtpropertyR#R&R'R4R6R5R8RR@RCRMRQRRRUR\RVR`RiRjRRkRpRsRu(((s8/usr/lib/python2.6/site-packages/sqlalchemy/orm/state.pyR sL                 "     R+cBsheZd„Zdd„Zd„ZeeeƒZed„ƒZd„Z d„Z d„Z d„Z RS( cCs h|_ti|||ƒdS(N(R,R R(RRR ((s8/usr/lib/python2.6/site-packages/sqlalchemy/orm/state.pyRVs cCsv|iidtƒotS|djo |i}nx:|iiD](}|i|ii ||ƒotSqBWtSdS(NR( RDR;RRbR!R#R R*R=tcheck_mutable_modified(RR>R$((s8/usr/lib/python2.6/site-packages/sqlalchemy/orm/state.pyt _get_modifiedZs    cCs||id(s8/usr/lib/python2.6/site-packages/sqlalchemy/orm/state.pys qs (R#R]R R_(R((RR>s8/usr/lib/python2.6/site-packages/sqlalchemy/orm/state.pyRVks cCs)|io|i|_|iƒSdSdS(sdo a check modified/resurrect. This would be called in the extremely rare race condition that the weakref returned None but the cleanup handler had not yet established the __resurrect callable as its replacement. N(Rt$_MutableAttrInstanceState__resurrectRR!(R((s8/usr/lib/python2.6/site-packages/sqlalchemy/orm/state.pyRkvs   cCs*|ii|dƒti|||ƒdS(N(R,RSR!R Rj(RR$R>((s8/usr/lib/python2.6/site-packages/sqlalchemy/orm/state.pyRj…scCsU|i|iƒo|i|_n/|iƒ}|o|i|ƒn|iƒdS(sxweakref callback. This method may be called by an asynchronous gc. If the state shows pending changes, the weakref is replaced by the __resurrect callable which will re-establish an object reference on next access, else removes this InstanceState from the owning identity map, if any. N(R|R,RRRRR(RRR ((s8/usr/lib/python2.6/site-packages/sqlalchemy/orm/state.pyR‰s  cCss|iid|ƒ}ti||iƒ|_||_|ii|i ƒ|ii i d||ƒ|i |ƒ|S(s=A substitute for the obj() weakref function which resurrects.RNt on_resurrect( R t new_instanceRRRRRORDRJR,R(RBRC(RR((s8/usr/lib/python2.6/site-packages/sqlalchemy/orm/state.pyt __resurrectžs  N( RvRwRR!R|R~RzRRVRkRjRR(((s8/usr/lib/python2.6/site-packages/sqlalchemy/orm/state.pyR+Us     R7cBs)eZdZd„Zd„Zd„ZRS(sA writable placeholder for an unloaded collection. Stores items appended to and removed from a collection that has not yet been loaded. When the collection is loaded, the changes stored in PendingCollection are applied to it to produce the final result. cCs"tiƒ|_tiƒ|_dS(N(Rt IdentitySett deleted_itemstOrderedIdentitySett added_items(R((s8/usr/lib/python2.6/site-packages/sqlalchemy/orm/state.pyR»scCs8||ijo|ii|ƒn|ii|ƒdS(N(R„RR†Rf(RR}((s8/usr/lib/python2.6/site-packages/sqlalchemy/orm/state.pytappend¿scCs8||ijo|ii|ƒn|ii|ƒdS(N(R†RR„Rf(RR}((s8/usr/lib/python2.6/site-packages/sqlalchemy/orm/state.pyRÄs(RvRwRxRR‡R(((s8/usr/lib/python2.6/site-packages/sqlalchemy/orm/state.pyR7³s  (tsqlalchemy.utilRRt sqlalchemyRtsqlalchemy.orm.attributesRRRRRRtsqlalchemy.ormRR tobjectR R+R7(((s8/usr/lib/python2.6/site-packages/sqlalchemy/orm/state.pyts .ÿN^