a
    [f                     @   sl   d Z ddlZddlZddlmZmZmZmZ ddlm	Z	 G dd deZ
G dd de
ZG d	d
 d
e
ZdS )zMemcached cache backend    N)DEFAULT_TIMEOUT	BaseCacheInvalidCacheKeymemcache_key_warnings)cached_propertyc                       s   e Zd Z fddZedd Zedd ZefddZ	ed	fd
dZ
d#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dZed	fddZd'ddZdd  Zd!d" Z  ZS )(BaseMemcachedCachec                    sT   t  | t|tr&td|| _n|| _|| _|| _|j	| _
|dpLi | _d S )Nz[;,]OPTIONS)super__init__
isinstancestrresplit_serversLibraryValueNotFoundException_libZClient_classget_options)selfserverparamslibraryvalue_not_found_exception	__class__ vC:\Users\91910\OneDrive\Desktop\vts_admin_rebuild-master\vts\Lib\site-packages\django/core/cache/backends/memcached.pyr
      s    
zBaseMemcachedCache.__init__c                 C   s   | j S N)r   r   r   r   r   client_servers   s    z!BaseMemcachedCache.client_serversc                 C   s   | j | jfi | jS )zQ
        Implement transparent thread-safe access to a memcached client.
        )r   r    r   r   r   r   r   _cache#   s    zBaseMemcachedCache._cachec                 C   sJ   |t kr| j}|du rdS t|dkr*d}|dkrB|tt 7 }t|S )z
        Memcached deals with long (> 30 days) timeouts in a special
        way. Call this function to obtain a safe value for your timeout.
        Nr   i ' )r   Zdefault_timeoutinttime)r   timeoutr   r   r   get_backend_timeout*   s    z&BaseMemcachedCache.get_backend_timeoutNc                 C   s$   | j ||d}| j||| |S Nversion)make_and_validate_keyr!   addr&   r   keyvaluer%   r)   r   r   r   r+   E   s    zBaseMemcachedCache.addc                 C   s   | j ||d}| j||S r'   )r*   r!   r   )r   r-   defaultr)   r   r   r   r   I   s    zBaseMemcachedCache.getc                 C   s4   | j ||d}| j||| |s0| j| d S r'   )r*   r!   setr&   deleter,   r   r   r   r0   M   s    zBaseMemcachedCache.setc                 C   s&   | j ||d}t| j|| |S r'   )r*   boolr!   touchr&   r   r-   r%   r)   r   r   r   r3   T   s    zBaseMemcachedCache.touchc                 C   s   | j ||d}t| j|S r'   )r*   r2   r!   r1   )r   r-   r)   r   r   r   r1   X   s    zBaseMemcachedCache.deletec                    s:   fdd|D  j   } fdd| D S )Nc                    s   i | ]} j |d |qS r(   r*   .0r-   r   r)   r   r   
<dictcomp>]   s   z/BaseMemcachedCache.get_many.<locals>.<dictcomp>c                    s   i | ]\}} | |qS r   r   )r8   kv)key_mapr   r   r:   a       )r!   Z	get_multikeysitems)r   r?   r)   retr   )r=   r   r)   r   get_many\   s
    zBaseMemcachedCache.get_manyc                 K   s   | j   d S r   )r!   Zdisconnect_allr   kwargsr   r   r   closec   s    zBaseMemcachedCache.close   c                 C   sl   | j ||d}z,|dk r*| j|| }n| j||}W n | jyR   d }Y n0 |d u rhtd| |S )Nr(   r   zKey '%s' not found)r*   r!   Zdecrincrr   
ValueError)r   r-   deltar)   valr   r   r   rG   g   s    
zBaseMemcachedCache.incrc           	         s^   i }i  |  D ]&\}}| j||d}|||< | |< q| j|| |} fdd|D S )Nr(   c                    s   g | ]} | qS r   r   )r8   r;   Zoriginal_keysr   r   
<listcomp>   r>   z/BaseMemcachedCache.set_many.<locals>.<listcomp>)r@   r*   r!   Z	set_multir&   )	r   datar%   r)   Z	safe_datar-   r.   Zsafe_keyZfailed_keysr   rK   r   set_manyx   s    

zBaseMemcachedCache.set_manyc                    s$    fdd|D } j | d S )Nc                    s   g | ]} j |d qS r5   r6   r7   r9   r   r   rL      r>   z2BaseMemcachedCache.delete_many.<locals>.<listcomp>)r!   Zdelete_multi)r   r?   r)   r   r9   r   delete_many   s    zBaseMemcachedCache.delete_manyc                 C   s   | j   d S r   )r!   Z	flush_allr   r   r   r   clear   s    zBaseMemcachedCache.clearc                 C   s   t |D ]}t|qd S r   )r   r   )r   r-   warningr   r   r   validate_key   s    zBaseMemcachedCache.validate_key)NN)N)N)rF   N)N)__name__
__module____qualname__r
   propertyr    r   r!   r   r&   r+   r   r0   r3   r1   rB   rE   rG   rN   rO   rP   rR   __classcell__r   r   r   r   r      s$   






r   c                       sB   e Zd ZdZ fddZedd ZedfddZd	d
 Z	  Z
S )PyLibMCCachez2An implementation of a cache binding using pylibmcc                    s"   dd l }t j||||jd d S )Nr   r   r   )pylibmcr	   r
   ZNotFound)r   r   r   rZ   r   r   r   r
      s    
zPyLibMCCache.__init__c                 C   s4   g }| j D ]$}||dr(|dd  n| q
|S )Nzunix:   )r   append
startswith)r   outputr   r   r   r   r       s    
"zPyLibMCCache.client_serversNc                 C   s6   | j ||d}|dkr"| j|S | j|| |S )Nr(   r   )r*   r!   r1   r3   r&   r4   r   r   r   r3      s    zPyLibMCCache.touchc                 K   s   d S r   r   rC   r   r   r   rE      s    zPyLibMCCache.close)rS   rT   rU   __doc__r
   rV   r    r   r3   rE   rW   r   r   r   r   rX      s   
rX   c                       s    e Zd ZdZ fddZ  ZS )PyMemcacheCachez6An implementation of a cache binding using pymemcache.c                    sB   dd l }t j|||td | jj| _dd|jjd| j	| _	d S )Nr   rY   TF)Zallow_unicode_keysZdefault_noreplyserde)
Zpymemcache.serder	   r
   KeyErrorr   Z
HashClientr   ra   Zpickle_serder   )r   r   r   Z
pymemcacher   r   r   r
      s    
zPyMemcacheCache.__init__)rS   rT   rU   r_   r
   rW   r   r   r   r   r`      s   r`   )r_   r   r$   Zdjango.core.cache.backends.baser   r   r   r   Zdjango.utils.functionalr   r   rX   r`   r   r   r   r   <module>   s    