B ÃÌ4];(ã@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úJ/opt/alt/python37/lib64/python3.7/site-packages/sqlalchemy/orm/identity.pyÚ__init__szIdentityMap.__init__cCs |j ¡S)N)rÚkeys)rrrrrszIdentityMap.keyscCs tƒ‚dS)N)ÚNotImplementedError)rÚstaterrrÚreplaceszIdentityMap.replacecCs tƒ‚dS)N)r)rrrrrÚaddszIdentityMap.addcCs| |¡dS)zUoptional inlined form of add() which can assume item isn't present in the mapN)r)rrÚkeyrrrÚ_add_unpresentszIdentityMap._add_unpresentcCs tdƒ‚dS)Nz%IdentityMap uses add() to insert data)r)rÚdict_rrrÚupdate$szIdentityMap.updatecCs tdƒ‚dS)Nz(IdentityMap uses remove() to remove data)r)rrrrÚclear'szIdentityMap.clearcCs|j|_|jr|j |¡dS)N)r Ú_instance_dictÚmodifiedr r)rrrrrÚ_manage_incoming_state*sz"IdentityMap._manage_incoming_statecCs|`|jr|j |¡dS)N)rrr Údiscard)rrrrrÚ_manage_removed_state0sz!IdentityMap._manage_removed_statecCs|jS)N)r )rrrrÚ _dirty_states5szIdentityMap._dirty_statescCs t|jƒS)z[return True if any InstanceStates present have been marked as 'modified'. )Úboolr )rrrrÚcheck_modified8szIdentityMap.check_modifiedcCs||kS)Nr)rrrrrÚhas_key?szIdentityMap.has_keycCs tdƒ‚dS)Nz(IdentityMap uses remove() to remove data)r)rrrrÚpopitemBszIdentityMap.popitemcGs tdƒ‚dS)Nz(IdentityMap uses remove() to remove data)r)rrÚargsrrrÚpopEszIdentityMap.popNcCs tdƒ‚dS)Nz%IdentityMap uses add() to insert data)r)rrÚdefaultrrrÚ setdefaultHszIdentityMap.setdefaultcCs t|jƒS)N)Úlenr)rrrrÚ__len__KszIdentityMap.__len__cCs tƒ‚dS)N)r)rrrrÚcopyNszIdentityMap.copycCs tdƒ‚dS)Nz%IdentityMap uses add() to insert data)r)rrÚvaluerrrÚ __setitem__QszIdentityMap.__setitem__cCs tdƒ‚dS)Nz(IdentityMap uses remove() to remove data)r)rrrrrÚ __delitem__TszIdentityMap.__delitem__)N)Ú__name__Ú __module__Ú __qualname__rrrrrrrrr r!r#r$r%r'r)r+r,r.r/rrrrrs& rc@sœeZdZdd„Zdd„Zdd„Zdd„Zd d „Zd d „Zd$dd„Z dd„Z dd„Z dd„Z e jrpdd„Zdd„Zdd„Zdd„Zdd„Zd d!„Zd"d#„Zd S)%ÚWeakInstanceDictcCs&|j|}| ¡}|dkr"t|ƒ‚|S)N)rÚobjÚKeyError)rrrÚorrrÚ __getitem__Ys  zWeakInstanceDict.__getitem__cCsHy&||jkr |j|}| ¡}ndSWntk r:dSX|dk SdS)NF)rr4r5)rrrr6rrrÚ __contains__`s   zWeakInstanceDict.__contains__cCs<|j|jkr4y|j|j|kStk r0dSXndSdS)NF)rrr5)rrrrrÚcontains_statels  zWeakInstanceDict.contains_statecCsd|j|jkrJy|j|j}Wntk r0YnX||k rF| |¡ndS||j|j<| |¡dS)N)rrr5r r)rrÚexistingrrrrus   zWeakInstanceDict.replacecCs„|j}||jkrly|j|}Wntk r2Yn:X||k rh| ¡}|dk rlt dt |¡|jf¡‚ndS||j|<| |¡dS)NzZCan't attach instance %s; another instance with key %s is already present in this session.FT) rrr5r4Úsa_excÚInvalidRequestErrorÚorm_utilÚ state_strr)rrrZexisting_stater6rrrr…s    zWeakInstanceDict.addcCs||j|<|j|_dS)N)rr r)rrrrrrržs zWeakInstanceDict._add_unpresentNcCsN||jkr|Sy|j|}Wntk r0|SX| ¡}|dkrF|S|SdS)N)rr5r4)rrr(rr6rrrÚget£s zWeakInstanceDict.getcCs>| ¡}g}x,|D]$}| ¡}|dk r| |j|f¡qW|S)N)Ú all_statesr4Úappendr)rÚvaluesÚresultrr-rrrÚitems±s zWeakInstanceDict.itemscCs8| ¡}g}x&|D]}| ¡}|dk r| |¡qW|S)N)r@r4rA)rrBrCrr-rrrrBºs zWeakInstanceDict.valuescCs t| ¡ƒS)N)Úiterr)rrrrÚ__iter__ÄszWeakInstanceDict.__iter__cCs t| ¡ƒS)N)rErD)rrrrÚ iteritemsÉszWeakInstanceDict.iteritemscCs t| ¡ƒS)N)rErB)rrrrÚ itervaluesÌszWeakInstanceDict.itervaluescCs"tjr|j ¡St|j ¡ƒSdS)N)rÚpy2krrBÚlist)rrrrr@Ïs zWeakInstanceDict.all_statescCsBy|j|j}Wntk r$YnX||kr>|j |jd¡dS)N)rrr5r')rrÚstrrrÚ _fast_discardÕs zWeakInstanceDict._fast_discardcCs| |¡dS)N)Ú safe_discard)rrrrrrászWeakInstanceDict.discardcCsX|j|jkrTy|j|j}Wntk r0Yn$X||krT|j |jd¡| |¡dS)N)rrr5r'r )rrrKrrrrMäs zWeakInstanceDict.safe_discardcCsdS)Nrr)rrrrÚpruneðszWeakInstanceDict.prune)N)r0r1r2r7r8r9rrrr?rDrBrFrrIrGrHr@rLrrMrNrrrrr3Xs$       r3c@s eZdZdZejr"dd„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. cCs |j ¡S)N)rrH)rrrrrHszStrongInstanceDict.itervaluescCs |j ¡S)N)rrG)rrrrrGszStrongInstanceDict.iteritemscCs t|jƒS)N)rEr)rrrrrF szStrongInstanceDict.__iter__cCs |j|S)N)r)rrrrrr7 szStrongInstanceDict.__getitem__cCs ||jkS)N)r)rrrrrr8szStrongInstanceDict.__contains__NcCs|j ||¡S)N)rr?)rrr(rrrr?szStrongInstanceDict.getcCs |j ¡S)N)rrB)rrrrrBszStrongInstanceDict.valuescCs |j ¡S)N)rrD)rrrrrDszStrongInstanceDict.itemscCsdd„| ¡DƒS)NcSsg|]}t |¡‘qSr)rÚinstance_state)Ú.0r6rrrú sz1StrongInstanceDict.all_states..)rB)rrrrr@szStrongInstanceDict.all_statescCs|j|kot ||j¡|kS)N)rrrP)rrrrrr9s z!StrongInstanceDict.contains_statecCsX|j|jkr:|j|j}t |¡}||k r6| |¡ndS| ¡|j|j<| |¡dS)N)rrrrPr r4r)rrr:rrrr$s    zStrongInstanceDict.replacecCs`|j|kr>t |j|j¡|k r:t dt |¡|jf¡‚dS| ¡|j|j<|  |¡dSdS)NzZCan't attach instance %s; another instance with key %s is already present in this session.FT) rrrPrr;r<r=r>r4r)rrrrrr0s  zStrongInstanceDict.addcCs| ¡|j|<|j|_dS)N)r4rr r)rrrrrrr?sz!StrongInstanceDict._add_unpresentcCsHy|j|j}Wntk r$Yn Xt |¡|krD|j |jd¡dS)N)rrr5rrPr')rrr4rrrrLDs z StrongInstanceDict._fast_discardcCs| |¡dS)N)rM)rrrrrrPszStrongInstanceDict.discardcCsH|j|jkrD|j|j}t |¡}||krD|j |jd¡| |¡dS)N)rrrrPr'r )rrr4rKrrrrMSs    zStrongInstanceDict.safe_discardcCsXt|ƒ}dd„| ¡Dƒ}t ¡}| |¡|j ¡|j |¡t|ƒ|_|t|ƒS)z%prune unreferenced, non-dirty states.cSsg|]}|jr| ¡‘qSr)rr4)rQÚsrrrrR_sz,StrongInstanceDict.prune..) r*r@r ZWeakValueDictionaryrrrr"r)rZ ref_countZdirtyZkeepersrrrrN[s    zStrongInstanceDict.prune)N)r0r1r2Ú__doc__rrIrHrGrFr7r8r?rBrDr@r9rrrrLrrMrNrrrrrOôs&    rO) r Úrrr=rr;Úobjectrr3rOrrrrÚs    H