Ë
    ±Œj’   ã                  ór   — d dl mZ d dlZd dlmZmZ d dlmZ d dlm	Z	 d dl
mZmZ erd dlZ G d„ de«      Zy)	é    )ÚannotationsN)ÚTYPE_CHECKINGÚcast)ÚRedisBridge)ÚConfigurationError)ÚAsyncRedisClientÚCallablec                  ór  — e Zd ZU ddiZded<   	 ed d„«       Z	 	 	 	 	 	 	 	 	 	 d!d„Zd"d„Zd"d„Z	d	ed
<   d	ed<   d	ed<   d	ed<   d	ed<   d	ed<   ded<   d#d$d„Z
d%d„Z	 d&	 	 	 	 	 	 	 d'd„Zd(d„Zd)d„Zd*d„Z	 	 	 	 	 	 	 	 d+d„Z	 	 	 	 	 	 	 	 d,d„Z	 d&	 	 	 	 	 	 	 	 	 d-d„Z	 d&	 	 	 	 	 	 	 	 	 	 	 d.d„Zd/d„Zd0d„Zd*d„Zy)1ÚRedispyBridgeÚmax_connectionséè  zdict[str, float | str | bool]ÚDEFAULT_CLUSTER_OPTIONSc                ó0   — | j                   j                  fS ©N)Ú
dependencyÚ
RedisError©Úselfs    új/var/www/html/Fitness-lenito-AI-main/venv/lib/python3.12/site-packages/limits/aio/storage/redis/redispy.pyÚbase_exceptionszRedispyBridge.base_exceptions   s   € à—‘×*Ñ*Ð,Ð,ó    c                ó>  ‡ ‡— g }|j                  «       }|j                  ‰ j                  j                  «       ‰ j                  j                  r&‰ j                  j                  j                  dd«      n|}|€t        d«      ‚ ‰ j                  j                  j                  |fdi ‰ j                  ¥|xs i ¥ii ‰ j                  ¥|¥¤Ž‰ _        ‰ j                  j                  |«      ‰ _        ‰ j                  j                  |«      ‰ _        ˆ ˆfd„‰ _        y )NÚ/Ú z'service_name' not providedÚsentinel_kwargsc                ó<   •— | r‰r‰j                   S ‰j                  S r   )Ústorage_replicaÚstorage)Úreadonlyr   Úuse_replicass    €€r   Ú<lambda>z,RedispyBridge.use_sentinel.<locals>.<lambda>4   s   ø€ Ù$,±ˆD× Ñ ÐOÀ4Ç<Á<ÐOr   )ÚcopyÚextendÚoptions_from_uriÚ	locationsÚpathÚreplacer   r   ÚasyncioÚSentinelÚparsed_authÚsentinelÚ
master_forr   Ú	slave_forr   Úconnection_getter)r   Úservice_namer    r   ÚoptionsÚsentinel_configurationÚconnection_optionss   ` `    r   Úuse_sentinelzRedispyBridge.use_sentinel   s  ù€ ð "$Ðà$Ÿ\™\›^Ðà×%Ñ% d×&;Ñ&;×&EÑ&EÔFð ×$Ñ$×)Ò)ð ×!Ñ!×&Ñ&×.Ñ.¨s°BÔ7àð 	ð ÐÜ$Ð%BÓCÐCà8˜Ÿ™×/Ñ/×8Ñ8Ø"ñ
àK˜t×/Ñ/ÐK°OÒ4IÀrÐKð
ð 9�×!Ñ!Ð8Ð%7Ð8ñ
ˆŒð
 —}‘}×/Ñ/°Ó=ˆŒØ#Ÿ}™}×6Ñ6°|ÓDˆÔô"
ˆÕr   c                ó¢  ‡ — |j                  dd «      x}r. ‰ j                  j                  j                  dd|i|¤Ž‰ _        n‚‰ j
                  j                  r, ‰ j                  j                  j                  di |¤Ž‰ _        n@ ‰ j                  j                  j                  j                  ‰ j                  fi |¤Ž‰ _        ˆ fd„‰ _	        y )NÚconnection_poolc                ó   •— ‰j                   S r   ©r   ©Ú_r   s    €r   r!   z)RedispyBridge.use_basic.<locals>.<lambda>E   ó	   ø€ ¨4¯<ª<r   © )
Úpopr   r(   ÚRedisr   r$   ÚemptyÚfrom_urlÚurir.   )r   r0   r5   s   `  r   Ú	use_basiczRedispyBridge.use_basic8   s·   ø€ Ø%Ÿk™kÐ*;¸TÓBÐBˆ?ÐBØ8˜4Ÿ?™?×2Ñ2×8Ñ8ñ Ø /ðØ3:ñˆD�Lð ×$Ñ$×*Ò*Ø<˜tŸ™×6Ñ6×<Ñ<ÑG¸wÑG�•àE˜tŸ™×6Ñ6×<Ñ<×EÑEØ—H‘Hñ Ø 'ñ �”ó "8ˆÕr   c           	     ó~  ‡ — g }‰ j                   j                  D ]N  \  }}|j                  ‰ j                  j                  j
                  j                  |t        |«      ¬«      «       ŒP  ‰ j                  j                  j                  di i ‰ j                  ¥d|i¥‰ j                  ¥|¥¤Ž‰ _        ˆ fd„‰ _        y )N)ÚhostÚportÚstartup_nodesc                ó   •— ‰j                   S r   r7   r8   s    €r   r!   z+RedispyBridge.use_cluster.<locals>.<lambda>W   r:   r   r;   )r$   r%   Úappendr   r(   ÚclusterÚClusterNodeÚintÚRedisClusterr   r*   r   r.   )r   r0   Úcluster_hostsrC   rD   s   `    r   Úuse_clusterzRedispyBridge.use_clusterG   sÁ   ø€ Øˆà×/Ñ/×9Ô9‰JˆD�$Ø× Ñ Ø—‘×'Ñ'×/Ñ/×;Ñ;ÀÌCÐPTËIÐ;ÓVõð :ð
 <�t—‘×.Ñ.×;Ñ;ñ 
ðØ×.Ñ.ðà" MÐ2ðð ×"Ñ"ðð ð	ñ
ˆŒó "8ˆÕr   zredis.commands.core.ScriptÚlua_moving_windowÚlua_acquire_moving_windowÚlua_sliding_windowÚlua_acquire_sliding_windowÚlua_clear_keysÚlua_incr_expirez"Callable[[bool], AsyncRedisClient]r.   c                ó$   — | j                  |«      S r   )r.   )r   r   s     r   Úget_connectionzRedispyBridge.get_connectiona   s   € Ø×%Ñ% hÓ/Ð/r   c                ó,  — | j                  «       j                  | j                  «      | _        | j                  «       j                  | j                  «      | _        | j                  «       j                  | j                  «      | _        | j                  «       j                  | j                  «      | _	        | j                  «       j                  | j                  «      | _        | j                  «       j                  | j                  «      | _        y r   )rU   Úregister_scriptÚSCRIPT_MOVING_WINDOWrN   ÚSCRIPT_ACQUIRE_MOVING_WINDOWrO   ÚSCRIPT_CLEAR_KEYSrR   ÚSCRIPT_INCR_EXPIRErS   ÚSCRIPT_SLIDING_WINDOWrP   ÚSCRIPT_ACQUIRE_SLIDING_WINDOWrQ   r   s    r   Úregister_scriptszRedispyBridge.register_scriptsd   sê   € à!%×!4Ñ!4Ó!6×!FÑ!FØ×%Ñ%ó"
ˆÔð *.×)<Ñ)<Ó)>×)NÑ)NØ×-Ñ-ó*
ˆÔ&ð #×1Ñ1Ó3×CÑCØ×"Ñ"ó
ˆÔð  $×2Ñ2Ó4×DÑDØ×#Ñ#ó 
ˆÔð #'×"5Ñ"5Ó"7×"GÑ"GØ×&Ñ&ó#
ˆÔð +/×*=Ñ*=Ó*?×*OÑ*OØ×.Ñ.ó+
ˆÕ'r   c              ƒ  ó†   K  — | j                  |«      }t        t        | j                  |g||g«      ƒ d{  –—† «      S 7 Œ­w)zâ
        increments the counter for a given rate limit key


        :param key: the key to increment
        :param expiry: amount in seconds for the key to expire in
        :param amount: the number to increment by
        N)Úprefixed_keyr   rJ   rS   )r   ÚkeyÚexpiryÚamounts       r   ÚincrzRedispyBridge.incry   s?   è ø€ ð ×Ñ Ó$ˆÜ”C˜t×3Ñ3°S°E¸FÀFÐ;KÓL×LÓMÐMÐLús   ‚4A¶?
·	Ac              ƒ  óœ   K  — | j                  |«      }t        | j                  d¬«      j                  |«      ƒ d{  –—† xs d«      S 7 Œ­w)zC

        :param key: the key to get the counter value for
        T)r   Nr   )r`   rJ   rU   Úget©r   ra   s     r   rf   zRedispyBridge.getŠ   sG   è ø€ ð ×Ñ Ó$ˆÜ˜×,Ñ,°dÐ,Ó;×?Ñ?ÀÓD×DÒIÈÓJÐJÐDús   ‚;A½A
¾Ac              ƒ  ó€   K  — | j                  |«      }| j                  «       j                  |«      ƒ d{  –—†  y7 Œ­w)z?
        :param key: the key to clear rate limits for

        N)r`   rU   Údeleterg   s     r   ÚclearzRedispyBridge.clear“   s5   è ø€ ð
 ×Ñ Ó$ˆØ×!Ñ!Ó#×*Ñ*¨3Ó/×/Ò/ús   ‚4>¶<·>c              ƒ  ó|   K  — t        t        | j                  | j                  d«      g«      ƒ d {  –—† «      S 7 Œ­w)NÚ*)r   rJ   rR   r`   r   s    r   Ú	lua_resetzRedispyBridge.lua_reset›   s2   è ø€ Ü”C˜t×2Ñ2°D×4EÑ4EÀcÓ4JÐ3KÓL×LÓMÐMÐLús   ‚/<±:
²	<c              ƒ  óÊ   K  — | j                  |«      }t        j                  «       }| j                  |g||z
  |g«      ƒ d{  –—† }|rt        |d   «      |d   fS |dfS 7 Œ­w)zú
        returns the starting point and the number of entries in the moving
        window

        :param key: rate limit key
        :param expiry: expiry of entry
        :return: (previous count, previous TTL, current count, current TTL)
        Nr   é   )r`   ÚtimerN   Úfloat)r   ra   Úlimitrb   Ú	timestampÚwindows         r   Úget_moving_windowzRedispyBridge.get_moving_windowž   so   è ø€ ð ×Ñ Ó$ˆÜ—I‘I“Kˆ	Ø×-Ñ-¨s¨e°iÀ&Ñ6HÈ%Ð5PÓQ×QˆÙÜ˜ ™Ó# V¨A¡YÐ.Ð.Ø˜!ˆ|Ðð Rús   ‚AA#ÁA!ÁA#c           
   ƒ  óJ  K  — | j                  | j                  |«      | j                  |«      g|g«      ƒ d {  –—† x}r`t        |d   xs d«      t        dt	        |d   xs d«      «      dz  t        |d   xs d«      t        dt	        |d   xs d«      «      dz  fS y7 Œg­w)Nr   ro   r   é   é   )r   ç        r   ry   )rP   r`   rJ   Úmaxrq   )r   Úprevious_keyÚcurrent_keyrb   rt   s        r   Úget_sliding_windowz RedispyBridge.get_sliding_window°   s¸   è ø€ ð  ×2Ñ2Ø×Ñ˜|Ó,¨d×.?Ñ.?ÀÓ.LÐMÐPVÈxó
÷ 
ð 
ˆ6ð 
ô �F˜1‘I’N Ó#Ü�A”u˜V A™Yš^¨!Ó,Ó-°Ñ4Ü�F˜1‘I’N Ó#Ü�A”u˜V A™Yš^¨!Ó,Ó-°Ñ4ð	ð ð ð
ús   ‚7B#¹B!ºA(B#c              ƒ  ó¬   K  — | j                  |«      }t        j                  «       }| j                  |g||||g«      ƒ d{  –—† }t        |«      S 7 Œ­w)zŸ
        :param key: rate limit key to acquire an entry in
        :param limit: amount of entries allowed
        :param expiry: expiry of the entry

        N)r`   rp   rO   Úbool)r   ra   rr   rb   rc   rs   Úacquireds          r   Úacquire_entryzRedispyBridge.acquire_entry¾   sY   è ø€ ð ×Ñ Ó$ˆÜ—I‘I“Kˆ	Ø×7Ñ7ØˆE�I˜u f¨fÐ5ó
÷ 
ˆô �H‹~Ðð	
ús   ‚A AÁAÁAc              ƒ  ó¦   K  — | j                  |«      }| j                  |«      }| j                  ||g|||g«      ƒ d {  –—† }t        |«      S 7 Œ­wr   )r`   rQ   r   )r   r{   r|   rr   rb   rc   r€   s          r   Úacquire_sliding_window_entryz*RedispyBridge.acquire_sliding_window_entryÓ   s_   è ø€ ð ×(Ñ(¨Ó6ˆØ×'Ñ'¨Ó4ˆØ×8Ñ8Ø˜;Ð'¨%°¸Ð)@ó
÷ 
ˆô �H‹~Ðð
ús   ‚=A¿AÁ Ac              ƒ  ó¼   K  — | j                  |«      }t        | j                  «       j                  |«      ƒ d{  –—† d«      t	        j                  «       z   S 7 Œ­w)z;
        :param key: the key to get the expiry for
        Nr   )r`   rz   rU   Úttlrp   rg   s     r   Ú
get_expiryzRedispyBridge.get_expiryâ   sJ   è ø€ ð
 ×Ñ Ó$ˆÜ˜×,Ñ,Ó.×2Ñ2°3Ó7×7¸Ó;¼d¿i¹i»kÑIÐIÐ7ús   ‚9A»A¼Ac              ƒ  ól   K  — 	 | j                  «       j                  «       ƒ d{  –—†  y7 Œ#  Y yxY w­w)z-
        check if storage is healthy
        NTF)rU   Úpingr   s    r   ÚcheckzRedispyBridge.checkê   s7   è ø€ ð	Ø×%Ñ%Ó'×,Ñ,Ó.×.Ð.àð /ùð	Ùüs    ‚4„!- ¥+¦- ª4«- ­1¯4c              ƒ  óD  K  — | j                  d«      }| j                  j                  || j                  j                  j
                  j                  j                  ¬«      ƒ d {  –—† }d}|D ](  }|| j                  j                  |«      ƒ d {  –—† z  }Œ* |S 7 Œ57 Œ­w)Nrl   )Útarget_nodesr   )	r`   r   Úkeysr   r(   rH   rK   Ú	ALL_NODESri   )r   ÚprefixrŒ   Úcountra   s        r   ÚresetzRedispyBridge.resetõ   s’   è ø€ Ø×"Ñ" 3Ó'ˆØ—\‘\×&Ñ&Ø §¡×!8Ñ!8×!@Ñ!@×!MÑ!M×!WÑ!Wð 'ó 
÷ 
ˆð ˆÛˆCØ˜4Ÿ<™<×.Ñ.¨sÓ3×3Ñ3‰Eð àˆð
øð
 4ús$   ‚A$B Á&BÁ'*B ÂBÂB ÂB N)Úreturnz-type[Exception] | tuple[type[Exception], ...])
r/   z
str | Noner    r   r   z$dict[str, str | float | bool] | Noner0   ústr | float | boolr‘   ÚNone)r0   r’   r‘   r“   )F)r   r   r‘   r   )r‘   r“   )ro   )ra   Ústrrb   rJ   rc   rJ   r‘   rJ   )ra   r”   r‘   rJ   )ra   r”   r‘   r“   )r‘   z
int | None)ra   r”   rr   rJ   rb   rJ   r‘   ztuple[float, int])r{   r”   r|   r”   rb   rJ   r‘   ztuple[int, float, int, float])
ra   r”   rr   rJ   rb   rJ   rc   rJ   r‘   r   )r{   r”   r|   r”   rr   rJ   rb   rJ   rc   rJ   r‘   r   )ra   r”   r‘   rq   )r‘   r   )Ú__name__Ú
__module__Ú__qualname__r   Ú__annotations__Úpropertyr   r3   rA   rM   rU   r^   rd   rf   rj   rm   ru   r}   r�   rƒ   r†   r‰   r�   r;   r   r   r   r      sÃ  … à˜4ð>ÐÐ:ó ð Dàò-ó ð-ð
à ð
ð ð
ð >ð	
ð
 &ð
ð 
ó
ó@8ó8ð$ 2Ó1Ø9Ó9Ø2Ó2Ø :Ó:Ø.Ó.Ø/Ó/Ø9Ó9ô0ó
ð2 ð	NàðNð ðNð ð	Nð
 
óNó"Kó0óNðØðØ"ðØ,/ðà	óð$ØðØ.1ðØ;>ðà	&óð& ðàðð ðð ð	ð
 ðð 
óð6 ðàðð ðð ð	ð
 ðð ðð 
óóJó	ôr   r   )Ú
__future__r   rp   Útypingr   r   Úlimits.aio.storage.redis.bridger   Úlimits.errorsr   Úlimits.typingr   r	   Úredis.commandsÚredisr   r;   r   r   Ú<module>r¡      s+   ðÝ "ã ß &å 7Ý ,ß 4áÛôo�Kõ or   