o z¾nhÄ(ã@slddlZddlmZddlmZddlmZddlmZGdd„deƒZGd d „d eƒZ Gd d „d eƒZ dS) éNé)Ú attributes)Úutilé)Úexcc@s¦eZdZdd„Zdd„Zdd„Zdd„Zd d „Zd d „Zd d„Z dd„Z dd„Z dd„Z dd„Z dd„Zdd„Zdd„Zd(dd„Zd d!„Zd"d#„Zd$d%„Zd&d'„ZdS))Ú IdentityMapcCsi|_tƒ|_t |¡|_dS©N)Ú_dictÚsetÚ _modifiedÚweakrefÚrefÚ_wr©Úself©rúB/usr/local/lib/python3.10/dist-packages/sqlalchemy/orm/identity.pyÚ__init__szIdentityMap.__init__cCó |j ¡Sr)r Úkeysrrrrró zIdentityMap.keyscCótƒ‚r©ÚNotImplementedError©rÚstaterrrÚreplaceózIdentityMap.replacecCrrrrrrrÚaddrzIdentityMap.addcCs| |¡dS)zUoptional inlined form of add() which can assume item isn't present in the mapN)r©rrÚkeyrrrÚ_add_unpresentszIdentityMap._add_unpresentcCótdƒ‚©Nz%IdentityMap uses add() to insert datar)rÚdict_rrrÚupdate$ózIdentityMap.updatecCr"©Nz(IdentityMap uses remove() to remove datarrrrrÚclear'r&zIdentityMap.clearcCs"|j|_|jr|j |¡dSdSr)rÚ_instance_dictÚmodifiedr rrrrrÚ_manage_incoming_state*sÿz"IdentityMap._manage_incoming_statecCs|`|jr |j |¡dSdSr)r)r*r ÚdiscardrrrrÚ_manage_removed_state0sÿz!IdentityMap._manage_removed_statecCs|jSr)r rrrrÚ _dirty_states5rzIdentityMap._dirty_statescCó t|jƒS)z[return True if any InstanceStates present have been marked as 'modified'. )Úboolr rrrrÚcheck_modified8s zIdentityMap.check_modifiedcCs||vSrr©rr rrrÚhas_key?r&zIdentityMap.has_keycCr"r'rrrrrÚpopitemBr&zIdentityMap.popitemcGr"r'r)rr ÚargsrrrÚpopEr&zIdentityMap.popNcCr"r#r©rr ÚdefaultrrrÚ setdefaultHr&zIdentityMap.setdefaultcCr/r)Úlenr rrrrÚ__len__KrzIdentityMap.__len__cCrrrrrrrÚcopyNrzIdentityMap.copycCr"r#r)rr ÚvaluerrrÚ __setitem__Qr&zIdentityMap.__setitem__cCr"r'rr2rrrÚ __delitem__Tr&zIdentityMap.__delitem__r)Ú__name__Ú __module__Ú __qualname__rrrrr!r%r(r+r-r.r1r3r4r6r9r;r<r>r?rrrrrs(  rc@sœeZdZdd„Zdd„Zdd„Zdd„Zd d „Zd d „Zd$dd„Z dd„Z dd„Z dd„Z e jr8dd„Zdd„Zdd„Zdd„Zdd„Zd d!„Zd"d#„Zd S)%ÚWeakInstanceDictcCs&|j|}| ¡}|durt|ƒ‚|Sr©r ÚobjÚKeyError©rr rÚorrrÚ __getitem__Ys zWeakInstanceDict.__getitem__cCsDz||jvr|j|}| ¡}nWdSW|duSty!YdSw©NFrDrGrrrÚ __contains__`s   þ ýÿzWeakInstanceDict.__contains__cCs8|j|jvrz |j|j|uWStyYdSwdSrJ)r r rFrrrrÚcontains_statels  ÿzWeakInstanceDict.contains_statecCsf|j|jvr$z|j|j}Wn tyYnw||ur"| |¡ndSd}||j|j<| |¡|Sr)r r rFr-r+©rrÚexistingrrrrus  þ   zWeakInstanceDict.replacecCs‚|j}||jvr5z|j|}Wn tyYnw||ur3| ¡}|dur2t dt |¡|jf¡‚ndS||j|<| |¡dS©NzZCan't attach instance %s; another instance with key %s is already present in this session.FT) r r rFrEÚsa_excÚInvalidRequestErrorÚorm_utilÚ state_strr+)rrr Úexisting_staterHrrrrˆs(  þýÿÿ  zWeakInstanceDict.addcCs||j|<|j|_dSr)r rr)rrrrr!¡s  zWeakInstanceDict._add_unpresentNcCsL||jvr|Sz|j|}Wn ty|YSw| ¡}|dur$|S|Sr)r rFrE)rr r8rrHrrrÚget¦s  þzWeakInstanceDict.getcCs:| ¡}g}|D]}| ¡}|dur| |j|f¡q|Sr)Ú all_statesrEÚappendr ©rÚvaluesÚresultrr=rrrÚitems´s€zWeakInstanceDict.itemscCs4| ¡}g}|D]}| ¡}|dur| |¡q|Sr)rVrErWrXrrrrY½s €zWeakInstanceDict.valuescCó t| ¡ƒSr)ÚiterrrrrrÚ__iter__Çó zWeakInstanceDict.__iter__cCr\r)r]r[rrrrÚ iteritemsÌr_zWeakInstanceDict.iteritemscCr\r)r]rYrrrrÚ itervaluesÏr_zWeakInstanceDict.itervaluescCstjr|j ¡St|j ¡ƒSr)rÚpy2kr rYÚlistrrrrrVÒs zWeakInstanceDict.all_statescCsFz|j|j}Wn tyYdSw||ur!|j |jd¡dSdSr)r r rFr6©rrÚstrrrÚ _fast_discardØs þÿzWeakInstanceDict._fast_discardcCó| |¡dSr©Ú safe_discardrrrrr,äózWeakInstanceDict.discardcCs`|j|jvr,z|j|j}Wn tyYdSw||ur.|j |jd¡| |¡dSdSdSr)r r rFr6r-rdrrrriçs  þ÷zWeakInstanceDict.safe_discardcCsdS)NrrrrrrÚpruneószWeakInstanceDict.pruner)r@rArBrIrKrLrrr!rUr[rYr^rrbr`rarVrfr,rirkrrrrrCXs&       rCc@s eZdZdZejrdd„Zdd„Zdd„Zdd „Z d d „Z d%d d„Z dd„Z dd„Z dd„Zdd„Zdd„Zdd„Zdd„Zdd„Zdd „Zd!d"„Zd#d$„Zd S)&ÚStrongInstanceDicta&A 'strong-referencing' version of the identity map. .. deprecated 1.1:: The strong reference identity map is legacy. See the recipe at :ref:`session_referencing_behavior` for an event-based approach to maintaining strong identity references. cCrr)r rarrrrrarzStrongInstanceDict.itervaluescCrr)r r`rrrrr` rzStrongInstanceDict.iteritemscCr/r)r]r$rrrrr^ rzStrongInstanceDict.__iter__cCs |j|Sr©r r2rrrrIrzStrongInstanceDict.__getitem__cCs ||jvSrrmr2rrrrKrzStrongInstanceDict.__contains__NcCs|j ||¡Sr)r rUr7rrrrUrjzStrongInstanceDict.getcCrr)r rYrrrrrYrzStrongInstanceDict.valuescCrr)r r[rrrrr[rzStrongInstanceDict.itemscCsdd„| ¡DƒS)NcSsg|]}t |¡‘qSr)rÚinstance_state)Ú.0rHrrrÚ sz1StrongInstanceDict.all_states..)rYrrrrrVszStrongInstanceDict.all_statescCs|j|vot ||j¡|uSr)r rrnrrrrrL!s þz!StrongInstanceDict.contains_statecCs\|j|jvr|j|j}t |¡}||ur| |¡ndSd}| ¡|j|j<| |¡|Sr)r r rrnr-rEr+rMrrrr's     zStrongInstanceDict.replacecCs\|j|vrt |j|j¡|urt dt |¡|jf¡‚dS| ¡|j|j<|  |¡dSrO) r rrnr rPrQrRrSrEr+rrrrr6s ýÿ zStrongInstanceDict.addcCs| ¡|j|<|j|_dSr)rEr rr)rrrrr!Es z!StrongInstanceDict._add_unpresentcCsLz|j|j}Wn tyYdSwt |¡|ur$|j |jd¡dSdSr)r r rFrrnr6)rrrErrrrfJs þÿz StrongInstanceDict._fast_discardcCrgrrhrrrrr,VrjzStrongInstanceDict.discardcCsP|j|jvr$|j|j}t |¡}||ur&|j |jd¡| |¡dSdSdSr)r r rrnr6r-)rrrErerrrriYs   ûzStrongInstanceDict.safe_discardcCsXt|ƒ}dd„| ¡Dƒ}t ¡}| |¡|j ¡|j |¡t|ƒ|_|t|ƒS)z%prune unreferenced, non-dirty states.cSsg|] }|jr| ¡‘qSr)r*rE)roÚsrrrrpesz,StrongInstanceDict.prune..) r:rVr ÚWeakValueDictionaryr%r r(r0r*)rÚ ref_countÚdirtyÚkeepersrrrrkas     zStrongInstanceDict.pruner)r@rArBÚ__doc__rrbrar`r^rIrKrUrYr[rVrLrrr!rfr,rirkrrrrrl÷s(    rl) r ÚrrrRrrPÚobjectrrCrlrrrrÚs    H