ó
TR¹Nc           @   s¾   d  Z  d d l Z d d l m Z m Z d d l m Z m Z y, d d l Z	 d d l
 Z
 e
 j d e ƒ Wn7 e k
 r£ y d d l	 Z	 Wq¤ e d ƒ ‚ q¤ Xn Xd e f d „  ƒ  YZ d S(	   s   Memcached cache backendiÿÿÿÿN(   t	   BaseCachet   InvalidCacheBackendError(   t   smart_unicodet	   smart_strs]   Support for the 'cmemcache' library has been deprecated. Please use python-memcached instead.sM   Memcached cache backend requires either the 'memcache' or 'cmemcache' libraryt
   CacheClassc           B   s   e  Z d  „  Z d „  Z d d „ Z d d „ Z d d „ Z d „  Z d „  Z	 d „  Z
 d	 d
 „ Z d	 d „ Z d d „ Z d „  Z d „  Z RS(   c         C   s/   t  j |  | ƒ t j | j d ƒ ƒ |  _ d  S(   Nt   ;(   R    t   __init__t   memcachet   Clientt   splitt   _cache(   t   selft   servert   params(    (    sQ   /home/panlixing/Python_Projects/gaeseries/django/core/cache/backends/memcached.pyR      s    c         C   s8   | p |  j  } | d k r4 | t t j ƒ  ƒ 7} n  | S(   s–   
        Memcached deals with long (> 30 days) timeouts in a special
        way. Call this function to obtain a safe value for your timeout.
        i ' (   t   default_timeoutt   intt   time(   R   t   timeout(    (    sQ   /home/panlixing/Python_Projects/gaeseries/django/core/cache/backends/memcached.pyt   _get_memcache_timeout   s    i    c         C   sF   t  | t ƒ r! | j d ƒ } n  |  j j t | ƒ | |  j | ƒ ƒ S(   Ns   utf-8(   t
   isinstancet   unicodet   encodeR
   t   addR   R   (   R   t   keyt   valueR   (    (    sQ   /home/panlixing/Python_Projects/gaeseries/django/core/cache/backends/memcached.pyR   *   s    c         C   s,   |  j  j t | ƒ ƒ } | d  k r( | S| S(   N(   R
   t   getR   t   None(   R   R   t   defaultt   val(    (    sQ   /home/panlixing/Python_Projects/gaeseries/django/core/cache/backends/memcached.pyR   /   s    c         C   s)   |  j  j t | ƒ | |  j | ƒ ƒ d  S(   N(   R
   t   setR   R   (   R   R   R   R   (    (    sQ   /home/panlixing/Python_Projects/gaeseries/django/core/cache/backends/memcached.pyR   5   s    c         C   s   |  j  j t | ƒ ƒ d  S(   N(   R
   t   deleteR   (   R   R   (    (    sQ   /home/panlixing/Python_Projects/gaeseries/django/core/cache/backends/memcached.pyR   8   s    c         C   s   |  j  j t t | ƒ ƒ S(   N(   R
   t	   get_multit   mapR   (   R   t   keys(    (    sQ   /home/panlixing/Python_Projects/gaeseries/django/core/cache/backends/memcached.pyt   get_many;   s    c         K   s   |  j  j ƒ  d  S(   N(   R
   t   disconnect_all(   R   t   kwargs(    (    sQ   /home/panlixing/Python_Projects/gaeseries/django/core/cache/backends/memcached.pyt   close>   s    i   c         C   sV   y |  j  j | | ƒ } Wn t k
 r2 d  } n X| d  k rR t d | ƒ ‚ n  | S(   Ns   Key '%s' not found(   R
   t   incrt
   ValueErrorR   (   R   R   t   deltaR   (    (    sQ   /home/panlixing/Python_Projects/gaeseries/django/core/cache/backends/memcached.pyR&   A   s    
c         C   sV   y |  j  j | | ƒ } Wn t k
 r2 d  } n X| d  k rR t d | ƒ ‚ n  | S(   Ns   Key '%s' not found(   R
   t   decrR'   R   (   R   R   R(   R   (    (    sQ   /home/panlixing/Python_Projects/gaeseries/django/core/cache/backends/memcached.pyR)   O   s    
c         C   st   i  } xK | j  ƒ  D]= \ } } t | t ƒ r@ | j d ƒ } n  | | t | ƒ <q W|  j j | |  j | ƒ ƒ d  S(   Ns   utf-8(   t   itemsR   R   R   R   R
   t	   set_multiR   (   R   t   dataR   t	   safe_dataR   R   (    (    sQ   /home/panlixing/Python_Projects/gaeseries/django/core/cache/backends/memcached.pyt   set_many\   s    c         C   s   |  j  j t t | ƒ ƒ d  S(   N(   R
   t   delete_multiR    R   (   R   R!   (    (    sQ   /home/panlixing/Python_Projects/gaeseries/django/core/cache/backends/memcached.pyt   delete_manyd   s    c         C   s   |  j  j ƒ  d  S(   N(   R
   t	   flush_all(   R   (    (    sQ   /home/panlixing/Python_Projects/gaeseries/django/core/cache/backends/memcached.pyt   clearg   s    N(   t   __name__t
   __module__R   R   R   R   R   R   R   R"   R%   R&   R)   R.   R0   R2   (    (    (    sQ   /home/panlixing/Python_Projects/gaeseries/django/core/cache/backends/memcached.pyR      s   						(   t   __doc__R   t   django.core.cache.backends.baseR    R   t   django.utils.encodingR   R   t	   cmemcacheR   t   warningst   warnt   PendingDeprecationWarningt   ImportErrorR   (    (    (    sQ   /home/panlixing/Python_Projects/gaeseries/django/core/cache/backends/memcached.pyt   <module>   s   