
    h                     :    S SK rS SKJr  S SKJr   " S S\5      rg)    N)	BaseCache)RedisSerializerc                      \ rS rSr% SrSr\R                  \S'   Sr	\R                  \S'   \
" 5       r      S#S\R                  S\S\R                  \   S	\S
\S\R                  \R                  \\R                   / \4   4      S\R                  4S jjrS\4S jrS\R                  \   S\4S jrS\S\R                  4S jrS\S\R*                  \R                     4S jrS$S\S\R                  S\R                  \   S\R                  4S jjrS$S\S\R                  S\R                  \   S\R                  4S jjr S$S\R2                  \\R                  4   S\R                  \   S\R*                  \R                     4S jjrS\S\4S jrS\S\R*                  \R                     4S jrS\S\4S jrS\4S jrS%S\S\S\R                  4S  jjr S%S\S\S\R                  4S! jjr!S"r"g)&
RedisCache   a  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hostportpassworddbdefault_timeout
key_prefixkwargsc                    [         R                  " X5        Uc  [        S5      e[        U[        5      (       aI   SS KnUR                  SS 5      (       a  [        S5      eUR                  " SXX4S.UD6=U l
        U l        OU=U l        U l
        U=(       d    SU l        g ! [         a  n	[        S5      U	eS n	A	ff = f)	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
             cC:\Users\ROHAN GUPTA\OneDrive\Desktop\mathbuddy-assessment\venv\Lib\site-packages\cachelib/redis.pyr   RedisCache.__init__!   s     	41<HIIdC  E zz,d33 !STT5:[[ 6x6BH6 D!2 6:9D 2$*  E"#:;DEs   B" "
B=,B88B=returnc                 x    [        U R                  [        5      (       a  U R                  $ U R                  5       $ N)r   r   r   )r   s    r    _get_prefixRedisCache._get_prefix<   s-    )$//3??DOO	
EI__EV	
    timeoutc                 B    [         R                  " X5      nUS:X  a  SnU$ )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+   RedisCache._normalize_timeoutA   s%     ..t=a<Gr'   keyc                     U R                   R                  U R                  R                  U R	                  5        U 35      5      $ r$   )
serializerloadsr   r   r%   r   r-   s     r    r   RedisCache.getL   s@    $$!!T%5%5%7$8">?
 	
r'   keysc                    U R                   (       a$  U Vs/ s H  o R                  5        U 3PM     nnO[        U5      nU R                  R	                  U5       Vs/ s H  o@R
                  R                  U5      PM     sn$ s  snf s  snf r$   )r   r%   listr   mgetr/   r0   )r   r3   r-   prefixed_keysxs        r    get_manyRedisCache.get_manyQ   sz    ??EIJTc 0 0 23C59TMJM JM262C2C2H2H2WX2WQ%%a(2WXX K Ys   B$B
valuec                    U R                  U5      nU R                  R                  U5      nUS:X  a.  U R                  R	                  U R                  5        U 3US9nU$ U R                  R                  U R                  5        U 3XCS9nU$ )Nr*   namer;   r>   r;   time)r+   r/   dumpsr	   setr%   setex)r   r-   r;   r(   dumpresults         r    rB   RedisCache.setX   s    ))'2$$U+b=''++((*+C51 , F  ''--((*+C51 . F r'   c                 (   U R                  U5      nU R                  R                  U5      nU R                  R	                  U R                  5        U 3US9nU(       a2  US:w  a,  U R                  R                  U R                  5        U 3US9  U$ )Nr=   r*   )r>   r@   )r+   r/   rA   r	   setnxr%   expire)r   r-   r;   r(   rD   createds         r    addRedisCache.adde   s    ))'2$$U+$$**$$&'u-T + 
 w"}%%d.>.>.@-A#+Gg%Vr'   mappingc                    U R                  U5      nU R                  R                  SS9nUR                  5        Hl  u  pEU R                  R                  U5      nUS:X  a$  UR                  U R                  5        U 3US9  MJ  UR                  U R                  5        U 3XbS9  Mn     UR                  5       n[        UR                  5       U5       VV	s/ s H  u  pU	(       d  M  UPM     sn	n$ s  sn	nf )NF)transactionr*   r=   r?   )r+   r	   pipelineitemsr/   rA   rB   r%   rC   executezipr3   )
r   rM   r(   piper-   r;   rD   resultskwas_sets
             r    set_manyRedisCache.set_manyp   s     ))'2 !!**u*=!--/JC??((/D"}!1!1!3 4SE:$G

4#3#3#5"6se <D
W * ,,.$'$@L$@jaG$@LLLs   C3)C3c                 n    [        U R                  R                  U R                  5        U 35      5      $ r$   )boolr	   deleter%   r1   s     r    r\   RedisCache.delete   s1    D&&--1A1A1C0DSE.JKLLr'   c                 D   U(       d  / $ U R                   (       a$  U Vs/ s H  o R                  5        U 3PM     nnOU Vs/ s H  oDPM     nnU R                  R                  " U6   U Vs/ s H  o@R	                  U5      (       a  M  UPM     sn$ s  snf s  snf s  snf r$   )r   r%   r	   r\   has)r   r3   r-   r7   rV   s        r    delete_manyRedisCache.delete_many   s    I??EIJTc 0 0 23C59TMJM(,-1QM-!!=1(<=a=<<	 K-<s   BB-B
Bc                 n    [        U R                  R                  U R                  5        U 35      5      $ r$   )r[   r   existsr%   r1   s     r    r_   RedisCache.has   s1    D%%,,0@0@0B/CC5-IJKKr'   c                    SnU R                   (       aM  U R                  R                  U R                  5       S-   5      nU(       a  U R                  R
                  " U6 nOU R                  R                  5       n[        U5      $ )Nr   *)r   r   r3   r%   r	   r\   flushdbr[   )r   statusr3   s      r    clearRedisCache.clear   sj    ??$$))$*:*:*<s*BCD++22D9''//1FF|r'   deltac                 Z    U R                   R                  U R                  5        U 3US9$ N)r>   amountr	   incrr%   r   r-   rk   s      r    incRedisCache.inc   s2    !!&&t/?/?/A.B3%,HQV&WWr'   c                 \    U R                   R                  U R                  5        U 3U* S9$ rm   ro   rq   s      r    decRedisCache.dec   s5    !!&&t/?/?/A.B3%,HRWQW&XXr'   )r   r	   r   )	localhosti  Nr   i,  Nr$   )   )#__name__
__module____qualname____firstlineno____doc__r   _tAny__annotations__r	   r   r/   intOptionalr   UnionCallabler   r%   r+   r   Listr9   rB   rK   DictrX   r[   r\   r`   r_   ri   rr   ru   __static_attributes__r   r'   r    r   r      sy   *  L"&& M266  "J #%)"GK+ff+ + ++c"	+
 + + KKbkk"c'.B)B CD+ &&+6
S 

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

Yc Ybggbffo Ys 266 BKK4D PRPVPV 	s 	266 	BKK4D 	PRPVPV 	 JNMwwsBFF{+M68kk#6FM	M"M# M$ M= = =Ls Lt Lt Xs X3 Xrvv XYs Y3 Yrvv Y Yr'   r   )typingr~   cachelib.baser   cachelib.serializersr   r   r   r'   r    <module>r      s     # 0XY XYr'   