o 3aA@s\dZddlZddlZddlmZddlmZddlmZm Z iZ iZ iZ Gddde Z dS)z$Thread-safe in-memory cache backend.N) OrderedDict)Lock)DEFAULT_TIMEOUT BaseCachecseZdZejZfddZedfddZdddZ efdd Z edfd d Z edfd d Z dddZ dddZddZddZddZdddZddZZS) LocMemCachecs>t|t|t|_t|i|_t|t|_ dSN) super__init___caches setdefaultr_cache _expire_info_locksr_lock)selfnameparams __class__C/usr/lib/python3/dist-packages/django/core/cache/backends/locmem.pyr s zLocMemCache.__init__NcCs~|j||d}||t||j}|j||r,|||| WddS WddS1s8wYdS)NversionTF)make_key validate_keypickledumpspickle_protocolr _has_expired_setrkeyvaluetimeoutrpickledrrradds  $zLocMemCache.addcCs|j||d}|||j(||r#|||WdS|j|}|jj|ddWdn1s:wYt|S)NrFlast) rrrr_deleter move_to_endrloads)rr!defaultrr$rrrget#s     zLocMemCache.getcCsFt|j|jkr |||j|<|jj|dd|||j|<dS)NFr&)lenr _max_entries_cullr)get_backend_timeoutr )rr!r"r#rrrr.s  zLocMemCache._setcCs`|j||d}||t||j}|j||||WddS1s)wYdSNr)rrrrrrrr rrrset5s  "zLocMemCache.setcCsr|j||d}|||j ||r WddS|||j|< WddS1s2wYdSNrFT)rrrrr0r )rr!r#rrrrtouch<s  $zLocMemCache.touchcCs|j||d}|||j;||r ||td||j|}t|}||}t ||j }||j|<|jj |ddWd|S1sMwY|S)NrzKey '%s' not foundFr&) rrrrr( ValueErrorr rr*rrr))rr!deltarr$r" new_valuerrrincrEs           zLocMemCache.incrcCsl|j||d}|||j||r#|| WddS WddS1s/wYdSr3)rrrrr(rr!rrrrhas_keyTs   $zLocMemCache.has_keycCs"|j|d}|duo|tkS)N)r r,time)rr!exprrrr]szLocMemCache._has_expiredcCsZ|jdkr|j|jdSt|j|j}t|D] }|j\}}|j|=qdS)Nr)_cull_frequencyr clearr r-rangepopitem)rcountir!_rrrr/as    zLocMemCache._cullcCs,z |j|=|j|=WdStyYdSw)NFT)r r KeyError)rr!rrrr(ks  zLocMemCache._deletecCsL|j||d}|||j ||WdS1swYdSr1)rrrr(r:rrrdeletess  $zLocMemCache.deletecCs@|j|j|jWddS1swYdSr)rr r@r )rrrrr@ys  "zLocMemCache.clear)NN)r5Nr)__name__ __module__ __qualname__rHIGHEST_PROTOCOLrr rr%r,rr2r4r9r;rr/r(rGr@ __classcell__rrrrrs     r)__doc__rr= collectionsr threadingrdjango.core.cache.backends.baserrr r rrrrrrs