
    0WRi                         d dl Z d dlZd dlZd dlmZ d dlmZ d dlmZ	 d dlm
Z
 d dlmZ d dlmZmZ d dlmZ e	ee
ej$                  fZ G d	 d
      ZdedefdZ G d de      Zy)    N)OrderedDict)settings)ConnectionError)ResponseError)TimeoutError)DEFAULT_TIMEOUTDefaultClient)ConnectionInterruptedc                       e Zd ZdZy)Markerz<
    Dummy class for use as
    marker for herded keys.
    N)__name__
__module____qualname____doc__     v/var/www/html/navyabakers_fullstack/navyabakers_prod/venv_new/lib/python3.12/site-packages/django_redis/client/herd.pyr   r      s    
 	r   r   herd_timeoutreturnc                 J    | |k\  ry| t        j                  d|      z   }||k\  S )NT   )randomrandint)xr   vals      r   _is_expiredr      s-    L
fnnQ-
-C,r   c                        e Zd Z fdZd Zd Zeddddf fd	Zd fd	ZddZ	eddd	f fd
	Z
d Zd ZeddfdZ xZS )
HerdClientc                 n    t               | _        t        t        dd      | _        t        |   |i | y )NCACHE_HERD_TIMEOUT<   )r   _markergetattrr   _herd_timeoutsuper__init__)selfargskwargs	__class__s      r   r&   zHerdClient.__init__(   s0    x$X/CRH$)&)r   c                     |xs | j                   j                  t        t        j                               z   }| j                  ||fS N)_backenddefault_timeoutinttimer"   )r'   valuetimeoutr   s       r   _packzHerdClient._pack-   s7    @4==#@#@C		DTT||UL00r   c                     	 |\  }}}t        |t              s|dfS t	        t        j
                               }||k  r||z
  }|t        || j                        fS |dfS # t         t        f$ r |dfcY S w xY w)NF)
ValueError	TypeError
isinstancer   r/   r0   r   r$   )r'   r1   markerunpackedr   nowr   s          r   _unpackzHerdClient._unpack1   s    	 -2*FHl &&)%<$))+#l"A[D,>,>??? I& 	 %<	 s   A A54A5NFc           	          |t         u r| j                  j                  }||dk  rt        
|   |||||||      S | j                  ||      }|| j                  z   }	t        
|   |||	|||      S )Nr   )r2   versionclientnxxx)r2   r=   r>   r?   )r   r-   r.   r%   setr3   r$   )r'   keyr1   r2   r=   r>   r?   r@   packedreal_timeoutr*   s             r   rA   zHerdClient.setA   s     o%mm33G?gl7;    E7+!3!33w{wvRT  
 	
r   c                 ^    t         |   ||||      }| j                  |      \  }}|r|S |S )N)defaultr=   r>   )r%   getr;   )	r'   rB   rF   r=   r>   rC   r   refreshr*   s	           r   rG   zHerdClient.get`   s8    S'76R||F+WN
r   c                    || j                  d      }|si S t               }|D cg c]  }| j                  ||       }}t        t	        ||            }	  |j
                  | }t	        ||      D ]7  \  }}
|
	| j                  | j                  |
            \  }}|rd n||||   <   9 |S c c}w # t        $ r}	t        |      |	d }	~	ww xY w)NFwrite)r=   
connection)

get_clientr   make_keydictzipmget_main_exceptionsr
   r;   decode)r'   keysr=   r>   recovered_datarB   new_keysmap_keysresultser1   r   rH   s                r   get_manyzHerdClient.get_manyi   s    >__5_1FI$CGHCDMM#wM7HHHd+,	B!fkk8,G h0 	EJC}<<E(:;LC4;DN8C=)	E  I
   	B'6:A	Bs   B0B5 5	C>CCTc                 &   || j                  d      }|r| j                  n	t        |   }	 |j                         }|j	                         D ]  \  }}	 |||	|||        |j                          y# t        $ r}
t        |      |
d}
~
ww xY w)a"  
        Set a bunch of values in the cache at once from a dict of key/value
        pairs. This is much more efficient than calling set() multiple times.

        If timeout is given, that timeout will be used for the key; otherwise
        the default cache timeout will be used.
        NTrJ   r=   r>   rL   )rN   rA   r%   pipelineitemsexecuterS   r
   )r'   datar2   r=   r>   herdset_functionr^   rB   r1   rZ   r*   s              r   set_manyzHerdClient.set_many   s     >__4_0F#'txxUW[	B(H"jjl T
US%'(ST 	B'6:A	Bs   AA5 5	B>BBc                     t         r,   NotImplementedErrorr'   r(   r)   s      r   incrzHerdClient.incr       !!r   c                     t         r,   rf   rh   s      r   decrzHerdClient.decr   rj   r   c                     || j                  d      }| j                  |||      }|y| j                  |||||       y)NTrJ   r]   F)r2   r=   r>   )rN   rG   rA   )r'   rB   r2   r=   r>   r1   s         r   touchzHerdClient.touch   sL    >__4_0Fgf==eWgfMr   )NNN)NN)r   r   r   r&   r3   r;   r   rA   rG   r[   rd   ri   rl   rn   __classcell__)r*   s   @r   r   r   '   s[    *
1(  
>6 ,T$TB."" "1$t 	r   r   )r   socketr0   collectionsr   django.confr   redis.exceptionsr   RedisConnectionErrorr   r   RedisTimeoutErrordjango_redis.client.defaultr   r	   django_redis.exceptionsr
   r2   rS   r   r/   boolr   r   r   r   r   <module>ry      sh       #   D * > F 9 
NN	 	 	  B Br   