a
    LcòfÃ  ã                   @   s\   d Z ddlZddlZddlmZ ddlmZ ddlmZm	Z	 i Z
i Zi ZG dd„ de	ƒZdS )z$Thread-safe in-memory cache backend.é    N)ÚOrderedDict)ÚLock)ÚDEFAULT_TIMEOUTÚ	BaseCachec                       s    e Zd ZejZ‡ fdd„Zedfdd„Zddd„Z	efdd	„Z
edfd
d„Zedfdd„Zddd„Zddd„Zdd„ Zdd„ Zdd„ Zd dd„Zdd„ Z‡  ZS )!ÚLocMemCachec                    s>   t ƒ  |¡ t |tƒ ¡| _t |i ¡| _t |tƒ ¡| _	d S ©N)
ÚsuperÚ__init__Ú_cachesÚ
setdefaultr   Ú_cacheÚ_expire_infoÚ_locksr   Ú_lock)ÚselfÚnameÚparams©Ú	__class__© ú^/home/httpd/docs/test/DocsMgr/lib/python3.9/site-packages/django/core/cache/backends/locmem.pyr	      s    zLocMemCache.__init__Nc                 C   sp   | j ||d�}t || j¡}| j�: |  |¡rL|  |||¡ W d   ƒ dS W d   ƒ dS 1 sb0    Y  d S )N©ÚversionTF)Úmake_and_validate_keyÚpickleÚdumpsÚpickle_protocolr   Ú_has_expiredÚ_set©r   ÚkeyÚvalueÚtimeoutr   Úpickledr   r   r   Úadd   s    
zLocMemCache.addc                 C   s~   | j ||d�}| j�P |  |¡r<|  |¡ |W  d   ƒ S | j| }| jj|dd� W d   ƒ n1 sj0    Y  t |¡S )Nr   F©Úlast)r   r   r   Ú_deleter   Úmove_to_endr   Úloads)r   r    Údefaultr   r#   r   r   r   Úget"   s    


.zLocMemCache.getc                 C   sF   t | jƒ| jkr|  ¡  || j|< | jj|dd� |  |¡| j|< d S )NFr%   )Úlenr   Z_max_entriesÚ_cullr(   Úget_backend_timeoutr   )r   r    r!   r"   r   r   r   r   ,   s
    
zLocMemCache._setc                 C   sT   | j ||d�}t || j¡}| j� |  |||¡ W d   ƒ n1 sF0    Y  d S ©Nr   )r   r   r   r   r   r   r   r   r   r   Úset3   s    zLocMemCache.setc                 C   sd   | j ||d�}| j�< |  |¡r0W d   ƒ dS |  |¡| j|< W d   ƒ dS 1 sV0    Y  d S ©Nr   FT)r   r   r   r.   r   )r   r    r"   r   r   r   r   Útouch9   s    
zLocMemCache.touché   c                 C   sœ   | j ||d�}| j�t |  |¡r6|  |¡ td| ƒ‚| j| }t |¡}|| }t || j	¡}|| j|< | jj
|dd� W d   ƒ n1 sŽ0    Y  |S )Nr   zKey '%s' not foundFr%   )r   r   r   r'   Ú
ValueErrorr   r   r)   r   r   r(   )r   r    Údeltar   r#   r!   Ú	new_valuer   r   r   ÚincrA   s    




.zLocMemCache.incrc                 C   s^   | j ||d�}| j�6 |  |¡r:|  |¡ W d   ƒ dS W d   ƒ dS 1 sP0    Y  d S r1   )r   r   r   r'   ©r   r    r   r   r   r   Úhas_keyO   s    

zLocMemCache.has_keyc                 C   s"   | j  |d¡}|d uo |t ¡ kS )Néÿÿÿÿ)r   r+   Útime)r   r    Úexpr   r   r   r   W   s    zLocMemCache._has_expiredc                 C   sX   | j dkr | j ¡  | j ¡  n4t| jƒ| j  }t|ƒD ]}| j ¡ \}}| j|= q8d S )Nr   )Z_cull_frequencyr   Úclearr   r,   ÚrangeÚpopitem)r   ÚcountÚir    Ú_r   r   r   r-   [   s    

zLocMemCache._cullc                 C   s.   z| j |= | j|= W n ty(   Y dS 0 dS )NFT)r   r   ÚKeyError)r   r    r   r   r   r'   e   s    zLocMemCache._deletec                 C   sB   | j ||d�}| j� |  |¡W  d   ƒ S 1 s40    Y  d S r/   )r   r   r'   r8   r   r   r   Údeletem   s    zLocMemCache.deletec                 C   s>   | j �$ | j ¡  | j ¡  W d   ƒ n1 s00    Y  d S r   )r   r   r=   r   )r   r   r   r   r=   r   s    
zLocMemCache.clear)NN)r3   N)N)N)Ú__name__Ú
__module__Ú__qualname__r   ÚHIGHEST_PROTOCOLr   r	   r   r$   r+   r   r0   r2   r7   r9   r   r-   r'   rD   r=   Ú__classcell__r   r   r   r   r      s   	





r   )Ú__doc__r   r;   Úcollectionsr   Ú	threadingr   Zdjango.core.cache.backends.baser   r   r
   r   r   r   r   r   r   r   Ú<module>   s   