
    Vhx                     ~    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e      Z
 G d de
      Z G d	 d
e
      Zy)zMemcached cache backend    N)DEFAULT_TIMEOUT	BaseCacheInvalidCacheKeymemcache_key_warnings)cached_propertyc                        e Zd Z fdZed        Zed        ZefdZ	edfdZ
ddZedfdZedfd	Zdd
ZddZd ZddZedfdZddZd Zd Z xZS )BaseMemcachedCachec                     t         |   |       t        |t              rt	        j
                  d|      | _        n|| _        || _        || _        |j                  | _
        |j                  d      xs i | _        y )Nz[;,]OPTIONS)super__init__
isinstancestrresplit_serversLibraryValueNotFoundException_libClient_classget_options)selfserverparamslibraryvalue_not_found_exception	__class__s        T/home/dcms/DCMS/lib/python3.12/site-packages/django/core/cache/backends/memcached.pyr   zBaseMemcachedCache.__init__   se     fc"HHVV4DM"DM .G*	nn

9-3    c                     | j                   S N)r   r   s    r   client_serversz!BaseMemcachedCache.client_servers   s    }}r    c                 P     | j                   | j                  fi | j                  S )zQ
        Implement transparent thread-safe access to a memcached client.
        )r   r$   r   r#   s    r   _cachezBaseMemcachedCache._cache#   s$    
 t{{4..@$--@@r    c                     |t         k(  r| j                  }|yt        |      dk(  rd}|dkD  r |t        t        j                               z  }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.
        r   i ' )r   default_timeoutinttime)r   timeouts     r   get_backend_timeoutz&BaseMemcachedCache.get_backend_timeout*   s[    
 o%**G?\Q GW s499;''G7|r    Nc                     | j                  ||      }| j                  j                  ||| j                  |            S Nversion)make_and_validate_keyr&   addr-   r   keyvaluer,   r1   s        r   r3   zBaseMemcachedCache.addE   s9    ((g(>{{sE4+C+CG+LMMr    c                 `    | j                  ||      }| j                  j                  ||      S r/   )r2   r&   r   )r   r5   defaultr1   s       r   r   zBaseMemcachedCache.getI   s,    ((g(>{{sG,,r    c                     | j                  ||      }| j                  j                  ||| j                  |            s| j                  j	                  |       y y r/   )r2   r&   setr-   deleter4   s        r   r:   zBaseMemcachedCache.setM   sP    ((g(>{{sE4+C+CG+LM KKs# Nr    c                     | j                  ||      }t        | j                  j                  || j	                  |                  S r/   )r2   boolr&   touchr-   r   r5   r,   r1   s       r   r>   zBaseMemcachedCache.touchT   s>    ((g(>DKK%%c4+C+CG+LMNNr    c                 p    | j                  ||      }t        | j                  j                  |            S r/   )r2   r=   r&   r;   )r   r5   r1   s      r   r;   zBaseMemcachedCache.deleteX   s1    ((g(>DKK&&s+,,r    c                     |D ci c]  }| j                  ||      | }}| j                  j                  |j                               }|j	                         D ci c]  \  }}||   | c}}S c c}w c c}}w r/   )r2   r&   	get_multikeysitems)r   rC   r1   r5   key_mapretkvs           r   get_manyzBaseMemcachedCache.get_many\   sz    MQ
FID&&sG&<cA
 
 kk##GLLN3*-))+6$!Q
A66	
 7s   A2A7c                 8    | j                   j                          y r"   )r&   disconnect_allr   kwargss     r   closezBaseMemcachedCache.closec   s    ""$r    c                     | j                  ||      }	 |dk  r| j                  j                  ||       }n| j                  j                  ||      }|t        d|z        |S # | j                  $ r d }Y %w xY w)Nr0   r   zKey '%s' not found)r2   r&   decrincrr   
ValueError)r   r5   deltar1   vals        r   rQ   zBaseMemcachedCache.incrg   s    ((g(>
	qykk&&sUF3kk&&sE2 ;1C788
	 11 	C	s   ?A& &A:9A:c                     i }i }|j                         D ]"  \  }}| j                  ||      }|||<   |||<   $ | j                  j                  || j	                  |            }	|	D 
cg c]  }
||
   	 c}
S c c}
w r/   )rD   r2   r&   	set_multir-   )r   datar,   r1   	safe_dataoriginal_keysr5   r6   safe_keyfailed_keysrG   s              r   set_manyzBaseMemcachedCache.set_manyx   s    	**, 	*JC11#w1GH"'Ih&)M(#	* kk++t//8
 +66Qa 666s   )A8c                     |D cg c]  }| j                  ||       }}| j                  j                  |       y c c}w r/   )r2   r&   delete_multi)r   rC   r1   r5   s       r   delete_manyzBaseMemcachedCache.delete_many   s=    LPQS**3*@QQ  & Rs   =c                 8    | j                   j                          y r"   )r&   	flush_allr#   s    r   clearzBaseMemcachedCache.clear   s    r    c                 8    t        |      D ]  }t        |       y r"   )r   r   )r   r5   warnings      r   validate_keyzBaseMemcachedCache.validate_key   s!    ,S1 	+G!'**	+r    )NNr"   )   N)__name__
__module____qualname__r   propertyr$   r   r&   r   r-   r3   r   r:   r>   r;   rI   rN   rQ   r\   r_   rb   re   __classcell__r   s   @r   r	   r	      s    4   A A +: 6 '6t N- '6t $ "1$ O-7%" &5d 
7' +r    r	   c                   D     e Zd ZdZ fdZed        ZedfdZd Z	 xZ
S )PyLibMCCachez2An implementation of a cache binding using pylibmcc                 H    dd l }t        | 	  ||||j                         y )Nr   r   r   )pylibmcr   r   NotFound)r   r   r   rq   r   s       r   r   zPyLibMCCache.__init__   s'    FGwGWGW 	 	
r    c                 l    g }| j                   D ]"  }|j                  |j                  d             $ |S )Nzunix:)r   appendremoveprefix)r   outputr   s      r   r$   zPyLibMCCache.client_servers   s6    mm 	8FMM&--g67	8r    Nc                     | j                  ||      }|dk(  r| j                  j                  |      S | j                  j                  || j	                  |            S )Nr0   r   )r2   r&   r;   r>   r-   r?   s       r   r>   zPyLibMCCache.touch   sU    ((g(>a<;;%%c**{{  d&>&>w&GHHr    c                      y r"    rL   s     r   rN   zPyLibMCCache.close   s     	r    )rg   rh   ri   __doc__r   rj   r$   r   r>   rN   rk   rl   s   @r   rn   rn      s1    8
   "1$ Ir    rn   c                   "     e Zd ZdZ fdZ xZS )PyMemcacheCachez6An implementation of a cache binding using pymemcache.c                     dd l }t        | 	  |||t               | j                  j
                  | _        dd|j                  j                  d| j                  | _	        y )Nr   rp   TF)allow_unicode_keysdefault_noreplyserde)
pymemcache.serder   r   KeyErrorr   
HashClientr   r   pickle_serder   )r   r   r   
pymemcacher   s       r   r   zPyMemcacheCache.__init__   s`    FJ( 	 	
 ii**"&$%%22
 mm	
r    )rg   rh   ri   rz   r   rk   rl   s   @r   r|   r|      s    @
 
r    r|   )rz   r   r+   django.core.cache.backends.baser   r   r   r   django.utils.functionalr   r	   rn   r|   ry   r    r   <module>r      sF     	   4~+ ~+B% :
( 
r    