3
ãde  ã               @   s<   d dl Zd dlZd dlmZ d dlmZ G dd„ deƒZdS )é    N)Ú	BaseCache)ÚRedisSerializerc            	   @   s’  e Zd ZdZeƒ Zd/ejeej	e
 eeej	e
 ejdœdd	„Zej	e ed
œdd„Zejedœdd„Zejejdœdd„Ze
ejdœdd„Ze
ejej dœdd„Zd0e
ejej	e ej	e dœdd„Zd1e
ejej	e edœdd„Zd2eje
ejf ej	e ejej dœdd„Ze
edœd d!„Ze
ejej dœd"d#„Ze
edœd$d%„Zed&œd'd(„Zd3e
eej	e d*œd+d,„Zd4e
eej	e d*œd-d.„ZdS )5Ú
RedisCachea  Uses the Redis key-value store as a cache backend.

    The first argument can be either a string denoting address of the Redis
    server or an object resembling an instance of a redis.Redis class.

    Note: Python Redis API already takes care of encoding unicode strings on
    the fly.

    :param host: address of the Redis server or an object which API is
                 compatible with the official Python Redis client (redis-py).
    :param port: port number on which Redis server listens for connections.
    :param password: password authentication for the Redis server.
    :param db: db (zero-based numeric index) on Redis Server to connect.
    :param default_timeout: the default timeout that is used if no timeout is
                            specified on :meth:`~BaseCache.set`. A timeout of
                            0 indicates that the cache never expires.
    :param key_prefix: A prefix that should be added to all keys.

    Any additional keyword arguments will be passed to ``redis.Redis``.
    Ú	localhostéë  Nr   é,  )ÚhostÚportÚpasswordÚdbÚdefault_timeoutÚ
key_prefixÚkwargsc       
      K   s¦   t j| |ƒ |d krtdƒ‚t|tƒr’ydd l}W n, tk
r^ }	 ztdƒ|	‚W Y d d }	~	X nX |jdd ƒrttdƒ‚|j	f ||||dœ|—Ž| _
n|| _
|pžd| _d S )Nz)RedisCache host parameter may not be Noner   zno redis module foundZdecode_responsesz0decode_responses is not supported by RedisCache.)r   r	   r
   r   Ú )r   Ú__init__Ú
ValueErrorÚ
isinstanceÚstrÚredisÚImportErrorÚRuntimeErrorÚgetZRedisÚ_clientr   )
Úselfr   r	   r
   r   r   r   r   r   Úerr© r   úE/var/www/agendate/envp3/lib/python3.6/site-packages/cachelib/redis.pyr       s    

zRedisCache.__init__)ÚtimeoutÚreturnc             C   s   t j| |ƒ}|dkrd}|S )Nr   é   éÿÿÿÿ)r   Ú_normalize_timeout)r   r   r   r   r   r!   ;   s    zRedisCache._normalize_timeout)Úvaluer   c             C   s   t jdtdd� | jj|ƒS )Nzs'dump_object' is deprecated and will be removed in the future.This is a proxy call to 'RedisCache.serializer.dumps'é   )Ú
stacklevel)ÚwarningsÚwarnÚDeprecationWarningÚ
serializerÚdumps)r   r"   r   r   r   Údump_objectA   s
    zRedisCache.dump_objectc             C   s   t jdtdd� | jj|ƒS )Nzs'load_object' is deprecated and will be removed in the future.This is a proxy call to 'RedisCache.serializer.loads'r#   )r$   )r%   r&   r'   r(   Úloads)r   r"   r   r   r   Úload_objectJ   s
    zRedisCache.load_object)Úkeyr   c             C   s   | j | jj| j| ƒƒS )N)r,   r   r   r   )r   r-   r   r   r   r   S   s    zRedisCache.get)Úkeysr   c                sB   ˆ j r‡ fdd„|D ƒ}ndd„ |D ƒ}‡ fdd„ˆ jj|ƒD ƒS )Nc                s   g | ]}ˆ j | ‘qS r   )r   )Ú.0r-   )r   r   r   ú
<listcomp>X   s    z'RedisCache.get_many.<locals>.<listcomp>c             S   s   g | ]}|‘qS r   r   )r/   Úkr   r   r   r0   Z   s    c                s   g | ]}ˆ j |ƒ‘qS r   )r,   )r/   Úx)r   r   r   r0   [   s    )r   r   Zmget)r   r.   Úprefixed_keysr   )r   r   Úget_manyV   s    zRedisCache.get_many)r-   r"   r   r   c             C   sP   | j |ƒ}| j|ƒ}|dkr4| jj| j| |d�}n| jj| j| ||d�}|S )Nr   )Únamer"   )r5   r"   Útimer    )r!   r*   r   Úsetr   Úsetex)r   r-   r"   r   ÚdumpÚresultr   r   r   r7   ]   s    

zRedisCache.setc             C   s@   | j |ƒ}| j|ƒ}| jj| j| |d�o>| jj| j| |d�S )N)r5   r"   )r5   r6   )r!   r*   r   Zsetnxr   Zexpire)r   r-   r"   r   r9   r   r   r   Úaddj   s
    

zRedisCache.add)Úmappingr   r   c             C   sŒ   | j |ƒ}| jjdd�}xR|jƒ D ]F\}}| j|ƒ}|dkrR|j| j| |d� q"|j| j| ||d� q"W |jƒ }dd„ t	|j
ƒ |ƒD ƒS )	NF)Ztransactionr   )r5   r"   )r5   r"   r6   c             S   s   g | ]\}}|r|‘qS r   r   )r/   r1   Zwas_setr   r   r   r0   €   s    z'RedisCache.set_many.<locals>.<listcomp>r    )r!   r   ZpipelineÚitemsr*   r7   r   r8   ÚexecuteÚzipr.   )r   r<   r   Úpiper-   r"   r9   Úresultsr   r   r   Úset_manyq   s    

zRedisCache.set_manyc             C   s   t | jj| j| ƒƒS )N)Úboolr   Údeleter   )r   r-   r   r   r   rD   ‚   s    zRedisCache.deletec                sN   |sg S ˆ j r"‡ fdd„|D ƒ}ndd„ |D ƒ}ˆ jj|Ž  ‡ fdd„|D ƒS )Nc                s   g | ]}ˆ j | ‘qS r   )r   )r/   r-   )r   r   r   r0   ‰   s    z*RedisCache.delete_many.<locals>.<listcomp>c             S   s   g | ]}|‘qS r   r   )r/   r1   r   r   r   r0   ‹   s    c                s   g | ]}ˆ j |ƒs|‘qS r   )Úhas)r/   r1   )r   r   r   r0   �   s    )r   r   rD   )r   r.   r3   r   )r   r   Údelete_many…   s    zRedisCache.delete_manyc             C   s   t | jj| j| ƒƒS )N)rC   r   Úexistsr   )r   r-   r   r   r   rE   �   s    zRedisCache.has)r   c             C   s@   d}| j r.| jj| j d ƒ}|r8| jj|Ž }n
| jjƒ }t|ƒS )Nr   Ú*)r   r   r.   rD   ZflushdbrC   )r   Ústatusr.   r   r   r   Úclear’   s    
zRedisCache.clearr   )r-   Údeltar   c             C   s   | j j| j| |d�S )N)r5   Úamount)r   Úincrr   )r   r-   rK   r   r   r   Úincœ   s    zRedisCache.incc             C   s   | j j| j| | d�S )N)r5   rL   )r   rM   r   )r   r-   rK   r   r   r   ÚdecŸ   s    zRedisCache.dec)r   r   Nr   r   N)N)N)N)r   )r   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r(   Ú_tÚAnyÚintÚOptionalr   r   r!   Úbytesr*   r,   r   ÚListr4   rC   r7   r;   ÚDictrB   rD   rF   rE   rJ   rN   rO   r   r   r   r   r      s2        		

r   )ÚtypingrT   r%   Zcachelib.baser   Zcachelib.serializersr   r   r   r   r   r   Ú<module>   s   