
    Xf                     B    d dl Zd dlmZ d dlmZ  G d de          ZdS )    N)	BaseCache)RedisSerializerc                      e Zd ZU dZdZej        ed<   dZej        ed<    e	            Z
	 	 	 	 	 	 d&d	ej        d
edej        e         dededej        ej        eej        g ef         f                  dej        fdZdefdZdej        e         defdZdedej        fdZdedej        ej                 fdZd'dedej        dej        e         dej        fdZd'dedej        dej        e         dej        fdZ	 d'dej        eej        f         dej        e         dej        ej                 fdZdedefdZdedej        ej                 fdZdedefd Zdefd!Zd(ded#edej        fd$Zd(ded#edej        fd%Z dS ))
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``.
    N_read_client_write_client	localhost  r   ,  hostportpassworddbdefault_timeout
key_prefixkwargsc                    t          j        | |           |t          d          t          |t                    rl	 dd l}n"# t          $ r}	t          d          |	d }	~	ww xY w|                    dd           rt          d           |j	        d||||d|x| _
        | _        n|x| _        | _
        |pd| _        d S )	Nz)RedisCache host parameter may not be Noner   zno redis module founddecode_responsesz0decode_responses is not supported by RedisCache.)r   r   r   r     )r   __init__
ValueError
isinstancestrredisImportErrorRuntimeErrorgetRedisr   r   r   )
selfr   r   r   r   r   r   r   r   errs
             B/var/www/piapp/venv/lib/python3.11/site-packages/cachelib/redis.pyr   zRedisCache.__init__!   s	    	4111<HIIIdC   	:E E E E"#:;;DEzz,d33 U !STTT5@U[ 6xB6 6BH6 6 D!2!2 6:9D 2$*s   A 
A!AA!returnc                 l    t          | j        t                    r| j        n|                                 S N)r   r   r   )r    s    r"   _get_prefixzRedisCache._get_prefix<   s+    )$/3??VDOOT__EVEV	
    timeoutc                 @    t          j        | |          }|dk    rd}|S )zNormalize timeout by setting it to default of 300 if
        not defined (None) or -1 if explicitly set to zero.

        :param timeout: timeout to normalize.
        r   )r   _normalize_timeout)r    r(   s     r"   r+   zRedisCache._normalize_timeoutA   s)     .tW==a<<Gr'   keyc                     | j                             | j                            |                                  |                     S r%   )
serializerloadsr   r   r&   r    r,   s     r"   r   zRedisCache.getL   sG    $$!!T%5%5%7%7">">">??
 
 	
r'   keysc                       j         r fd|D             }nt          |          } fd j                            |          D             S )Nc                 @    g | ]}                                  | S r   r&   .0r,   r    s     r"   
<listcomp>z'RedisCache.get_many.<locals>.<listcomp>S   0    JJJc 0 0 2 29C99JJJr'   c                 D    g | ]}j                             |          S r   )r.   r/   )r6   xr    s     r"   r7   z'RedisCache.get_many.<locals>.<listcomp>V   s)    XXXQ%%a((XXXr'   )r   listr   mgetr    r1   prefixed_keyss   `  r"   get_manyzRedisCache.get_manyQ   s^    ? 	'JJJJTJJJMM JJMXXXX$2C2H2H2W2WXXXXr'   valuec                 <   |                      |          }| j                            |          }|dk    r3| j                            |                                  | |          }n3| j                            |                                  | ||          }|S )Nr*   namer@   rC   r@   time)r+   r.   dumpsr   setr&   setex)r    r,   r@   r(   dumpresults         r"   rG   zRedisCache.setX   s    ))'22$$U++b=='++((**1C11 ,  FF '--((**1C11G .  F r'   c                 <   |                      |          }| j                            |          }| j                            |                                  | |          }|r8|dk    r2| j                            |                                  | |           |S )NrB   r*   )rC   rE   )r+   r.   rF   r   setnxr&   expire)r    r,   r@   r(   rI   createds         r"   addzRedisCache.adde   s    ))'22$$U++$**$$&&---T + 
 
  	Ww"}}%%d.>.>.@.@+G#+G+Gg%VVVr'   mappingc                    |                      |          }| j                            d          }|                                D ]\  }}| j                            |          }|dk    r.|                    |                                  | |           S|                    |                                  | ||           |	                                }d t          |                                |          D             S )NF)transactionr*   rB   rD   c                     g | ]	\  }}||
S r   r   )r6   kwas_sets      r"   r7   z'RedisCache.set_many.<locals>.<listcomp>   s!    LLLjaGLLLLr'   )r+   r   pipelineitemsr.   rF   rG   r&   rH   executezipr1   )r    rP   r(   piper,   r@   rI   resultss           r"   set_manyzRedisCache.set_manyp   s    ))'22 !**u*==!--// 	X 	XJC?((//D"}}!1!1!3!3:S::$GGGG

4#3#3#5#5 <s < <Dw
WWWW,,..LLC$@$@LLLLr'   c                 |    t          | j                            |                                  |                     S r%   )boolr   deleter&   r0   s     r"   r_   zRedisCache.delete   s8    D&--1A1A1C1C.JS.J.JKKLLLr'   c                      |sg S  j         r fd|D             }nd |D             }  j        j        |   fd|D             S )Nc                 @    g | ]}                                  | S r   r4   r5   s     r"   r7   z*RedisCache.delete_many.<locals>.<listcomp>   r8   r'   c                     g | ]}|S r   r   )r6   rT   s     r"   r7   z*RedisCache.delete_many.<locals>.<listcomp>   s    ---1Q---r'   c                 >    g | ]}                     |          |S r   )has)r6   rT   r    s     r"   r7   z*RedisCache.delete_many.<locals>.<listcomp>   s(    <<<a<<<<r'   )r   r   r_   r=   s   `  r"   delete_manyzRedisCache.delete_many   su     	I? 	.JJJJTJJJMM-----M!!=11<<<<=<<<<r'   c                 |    t          | j                            |                                  |                     S r%   )r^   r   existsr&   r0   s     r"   rd   zRedisCache.has   s8    D%,,0@0@0B0B-IC-I-IJJKKKr'   c                     d}| j         rA| j                            |                                 dz             }|r | j        j        | }n| j                                        }t          |          S )Nr   *)r   r   r1   r&   r   r_   flushdbr^   )r    statusr1   s      r"   clearzRedisCache.clear   ss    ? 	2$))$*:*:*<*<s*BCCD :2+2D9'//11FF||r'      deltac                 f    | j                             |                                  | |          S N)rC   amountr   incrr&   r    r,   rn   s      r"   inczRedisCache.inc   s6    !&&t/?/?/A/A,H3,H,HQV&WWWr'   c                 h    | j                             |                                  | |           S rp   rr   rt   s      r"   deczRedisCache.dec   s9    !&&t/?/?/A/A,H3,H,HRWQW&XXXr'   )r	   r
   Nr   r   Nr%   )rm   )!__name__
__module____qualname____doc__r   _tAny__annotations__r   r   r.   intOptionalr   UnionCallabler   r&   r+   r   Listr?   rG   rO   Dictr\   r^   r_   re   rd   rl   ru   rw   r   r'   r"   r   r      sl         *  L"& M26    ""J #%)"GK+ +f+ + +c"	+
 + + Kbk"c'.B)B CD+ &+ + + +6
S 
 
 
 

	"+c*: 	s 	 	 	 	
s 
rv 
 
 
 

Yc Ybgbfo Y Y Y Y s 26 BK4D PRPV    	 	s 	26 	BK4D 	PRPV 	 	 	 	 JNM MwsBF{+M68k#6FM	M M M M"M# M$ M M M M= = = = = =Ls Lt L L L Lt    X Xs X3 Xrv X X X XY Ys Y3 Yrv Y Y Y Y Y Yr'   r   )typingr|   cachelib.baser   cachelib.serializersr   r   r   r'   r"   <module>r      s}        # # # # # # 0 0 0 0 0 0XY XY XY XY XY XY XY XY XY XYr'   