Ë
    ±Œjr&  ã            	      óÀ   — d dl mZ d dlZd dl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Zd dlmZmZmZ d dlmZ  G d„ d	«      Z ed
¬«       G d„ deeee«      «       Zy)é    )ÚannotationsN)ÚCounterÚdefaultdict)Úfloor)Úversionadded)ÚMovingWindowSupportÚSlidingWindowCounterSupportÚStorage)ÚTimestampedSlidingWindowc                  ó   — e Zd Zdd„Zy)ÚEntryc                ó^   — t        j                   «       | _        | j                  |z   | _        y ©N)ÚtimeÚatimeÚexpiry)Úselfr   s     úc/var/www/html/Fitness-lenito-AI-main/venv/lib/python3.12/site-packages/limits/aio/storage/memory.pyÚ__init__zEntry.__init__   s   € Ü—Y‘Y“[ˆŒ
Ø—j‘j 6Ñ)ˆ�ó    N)r   ÚintÚreturnÚNone)Ú__name__Ú
__module__Ú__qualname__r   © r   r   r   r      s   „ ô*r   r   z2.1)Úversionc                  óD  ‡ — e Zd ZdZdgZ	 	 d	 	 	 	 	 	 	 dˆ fd„Zdd„Zdd„Zdd„Zdd„Z	e
	 	 dd„«       Zddd	„Zddd
„Zd d„Zd!d„Z	 d	 	 	 	 	 	 	 	 	 d"d„Z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„Zˆ xZS )*ÚMemoryStoragez½
    rate limit storage using :class:`collections.Counter`
    as an in memory storage for fixed & sliding window strategies,
    and a simple list to implement moving window strategy.
    zasync+memoryc                ó®   •— t        «       | _        t        t        j                  «      | _        i | _        i | _        d | _        t        ‰| �(  |fd|i|¤Ž y )NÚwrap_exceptions)r   Ústorager   ÚasyncioÚLockÚlocksÚexpirationsÚeventsÚtimerÚsuperr   )r   Úurir"   Ú_Ú	__class__s       €r   r   zMemoryStorage.__init__*   sK   ø€ ô 4;³9ˆŒÜ5@ÄÇÁÓ5NˆŒ
Ø-/ˆÔØ.0ˆŒØ04ˆŒ
Ü‰Ñ˜ÑC¨oÐCÀÓCr   c                óF   — | j                   j                  «       }|d= |d= |S )Nr)   r&   )Ú__dict__Úcopy©r   Ústates     r   Ú__getstate__zMemoryStorage.__getstate__4   s'   € Ø—‘×"Ñ"Ó$ˆØ�'ˆNØ�'ˆNØˆr   c                óÊ   — | j                   j                  |«       d | _        t        t        j
                  «      | _        t	        j                  | j                  «       «       y r   )	r/   Úupdater)   r   r$   r%   r&   Úensure_futureÚ_MemoryStorage__schedule_expiryr1   s     r   Ú__setstate__zMemoryStorage.__setstate__:   sB   € Ø�‰×Ñ˜UÔ#ØˆŒ
Ü ¤§¡Ó.ˆŒ
Ü×Ñ˜d×4Ñ4Ó6Õ7r   c              ƒ  ó  ‡K  — 	 t        j                   «       Št        | j                  j                  «       «      D ]ç  }| j                  |   4 ƒd {  –—†  t        j                  ˆfd„| j                  |   «      ƒ d {  –—† }| j                  j                  |g «      r| j                  |   d | | j                  |<   | j                  j                  |d «      s8| j                  j                  |d «       | j                  j                  |d «       d d d «      ƒd {  –—†  Œé t        | j                  j                  «       «      D ]{  }| j                  |   t        j                   «       k  sŒ(| j                  j                  |d «       | j                  j                  |d «       | j                  j                  |d «       Œ} y 7 �Œv7 �ŒK7 Œ®# 1 ƒd {  –—†7  sw Y   �Œ§xY w# t
        j                  $ r Y y w xY w­w)Nc                ó8   •— t        j                  | ‰ d„ ¬«      S )Nc                ó   — | j                    S r   )r   )Úevents    r   Ú<lambda>zAMemoryStorage.__expire_events.<locals>.<lambda>.<locals>.<lambda>G   s
   € ¸5¿<¹<¹-r   ©Úkey)ÚbisectÚbisect_left)ÚevtsÚnows    €r   r=   z/MemoryStorage.__expire_events.<locals>.<lambda>F   s   ø€ ¤V×%7Ñ%7Ø  3 $Ñ,Gõ&r   )r   Úlistr(   Úkeysr&   r$   Ú	to_threadÚgetÚpopr'   r#   ÚCancelledError)r   r?   ÚcutoffrC   s      @r   Ú__expire_eventszMemoryStorage.__expire_events@   s  øè ø€ ð	Ü—)‘)“+ˆCÜ˜DŸK™K×,Ñ,Ó.Ö/�ØŸ:™: cŸ?›?Ü#*×#4Ñ#4óð Ÿ™ CÑ(ó	$÷ �Fð —{‘{—‘ s¨BÔ/Ø+/¯;©;°sÑ+;¸G¸VÐ+D˜Ÿ™ CÑ(ØŸ;™;Ÿ?™?¨3°Ô5ØŸ™Ÿ™¨¨TÔ2ØŸ
™
Ÿ™ s¨DÔ1÷ +Ÿ?˜?ð 0ô ˜D×,Ñ,×1Ñ1Ó3Ö4�Ø×#Ñ# CÑ(¬D¯I©I«KÓ7Ø—L‘L×$Ñ$ S¨$Ô/Ø×$Ñ$×(Ñ(¨¨dÔ3Ø—J‘J—N‘N 3¨Õ-ñ	 5ð +ùðùð +øŸ?Ÿ?š?ûô$ ×%Ñ%ò 	Ùð	üsŒ   ƒG?…AG& ÁGÁG& Á*GÂ GÂBGÄG& ÄGÄ AG& Å1AG& ÇG?ÇG& ÇGÇG& ÇG#	ÇGÇG#	ÇG& Ç&G<Ç9G?Ç;G<Ç<G?c              ƒ  óª   K  — | j                   r| j                   j                  «       r)t        j                  | j	                  «       «      | _         y y ­wr   )r)   Údoner$   Úcreate_taskÚ_MemoryStorage__expire_events©r   s    r   Ú__schedule_expiryzMemoryStorage.__schedule_expiryY   s:   è ø€ Ø�zŠz˜TŸZ™ZŸ_™_Ô.Ü ×,Ñ,¨T×-AÑ-AÓ-CÓDˆD�Jð /ùs   ‚AAc                ó   — t         S r   )Ú
ValueErrorrP   s    r   Úbase_exceptionszMemoryStorage.base_exceptions]   s
   € ô Ðr   c              ƒ  óÈ  K  — | j                  |«      ƒ d{  –—†  | j                  «       ƒ d{  –—†  | j                  |   4 ƒd{  –—†  | j                  |xx   |z  cc<   | j                  |   |k(  r$t	        j                  «       |z   | j
                  |<   ddd«      ƒd{  –—†  | j                  j                  ||«      S 7 Œ­7 Œ—7 Œ�7 Œ&# 1 ƒd{  –—†7  sw Y   Œ6xY w­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)rG   r7   r&   r#   r   r'   )r   r?   r   Úamounts       r   ÚincrzMemoryStorage.incrc   s¯   è ø€ ð �h‰h�s‹m×ÐØ×$Ñ$Ó&×&Ð&Ø—:‘:˜c—?“?Ø�L‰L˜Ó Ñ'ÓØ�|‰|˜CÑ  FÒ*Ü(,¯	©	«°fÑ(<�× Ñ  Ñ%÷ #—?ð �|‰|×Ñ  VÓ,Ð,ð 	øØ&øØ"ø�?ø—?—?‘?üsh   ‚C"—C˜C"¯C°C"ÁC	ÁC"ÁACÂC"Â$CÂ%!C"ÃC"Ã	C"ÃC"ÃCÃCÃCÃC"c              ƒ  ó€  K  — | j                  |«      ƒ d{  –—†  | j                  «       ƒ d{  –—†  | j                  |   4 ƒd{  –—†  t        | j                  |   |z
  d«      | j                  |<   ddd«      ƒd{  –—†  | j                  j                  ||«      S 7 Œ‰7 Œs7 Œ]7 Œ&# 1 ƒd{  –—†7  sw Y   Œ6xY w­w)z—
        decrements the counter for a given rate limit key. 0 is the minimum allowed value.

        :param amount: the number to increment by
        Nr   )rG   r7   r&   Úmaxr#   )r   r?   rV   s      r   ÚdecrzMemoryStorage.decrs   s’   è ø€ ð �h‰h�s‹m×ÐØ×$Ñ$Ó&×&Ð&Ø—:‘:˜c—?“?Ü # D§L¡L°Ñ$5¸Ñ$>ÀÓ BˆD�L‰L˜Ñ÷ #—?ð �|‰|×Ñ  VÓ,Ð,ð 	øØ&øØ"ø�?ø—?—?‘?üsg   ‚B>—B!˜B>¯B#°B>ÁB%ÁB>Á*B)Á5B>Â B'Â!B>Â#B>Â%B>Â'B>Â)B;Â/B2Â0B;Â7B>c              ƒ  óL  K  — | j                   j                  |d«      t        j                  «       k  rT| j                  j	                  |d«       | j                   j	                  |d«       | j
                  j	                  |d«       | j                  j                  |d«      S ­w)zB
        :param key: the key to get the counter value for
        r   N)r'   rG   r   r#   rH   r&   ©r   r?   s     r   rG   zMemoryStorage.get€   s|   è ø€ ð ×Ñ×Ñ  QÓ'¬4¯9©9«;Ò6Ø�L‰L×Ñ˜S $Ô'Ø×Ñ× Ñ   dÔ+Ø�J‰J�N‰N˜3 Ô%à�|‰|×Ñ  QÓ'Ð'ùs   ‚B"B$c              ƒ  óì   K  — | j                   j                  |d«       | j                  j                  |d«       | j                  j                  |d«       | j                  j                  |d«       y­w)z>
        :param key: the key to clear rate limits for
        N)r#   rH   r'   r(   r&   r\   s     r   ÚclearzMemoryStorage.clear‹   sV   è ø€ ð 	�‰×Ñ˜˜dÔ#Ø×Ñ×Ñ˜S $Ô'Ø�‰�‰˜˜TÔ"Ø�
‰
�‰�s˜DÕ!ùs   ‚A2A4c              ƒ  ó  K  — ||kD  ry| j                  «       ƒ d{  –—†  | j                  |   4 ƒd{  –—†  | j                  j                  |g «       t	        j                  «       }	 | j                  |   ||z
     }|r$|j                  ||z
  k\  r	 ddd«      ƒd{  –—†  yt        |«      g|z  | j                  |   dd 	 ddd«      ƒd{  –—†  y7 Œ¹7 Œ£# t
        $ r d}Y Œhw xY w7 ŒK7 Œ# 1 ƒd{  –—†7  sw Y   yxY w­w)zÖ
        :param key: rate limit key to acquire an entry in
        :param limit: amount of entries allowed
        :param expiry: expiry of the entry
        :param amount: the number of entries to acquire
        FNr   T)r7   r&   r(   Ú
setdefaultr   Ú
IndexErrorr   r   )r   r?   Úlimitr   rV   Ú	timestampÚentrys          r   Úacquire_entryzMemoryStorage.acquire_entry”   sé   è ø€ ð �EŠ>Øà×$Ñ$Ó&×&Ð&Ø—:‘:˜c—?“?Ø�K‰K×"Ñ" 3¨Ô+ÜŸ	™	›ˆIðØ&*§k¡k°#Ñ&6°u¸v±~Ñ&F�ñ ˜Ÿ™¨	°FÑ(:Ò:Ø÷ #—?�?ô ).¨f« ¸Ñ'?�—‘˜CÑ   !Ð$Ø÷ #—?�?ð 	'øØ"ùô
 ò Ø’ðúð #ø�?ø—?—?‘?üs–   ‚DœC�D´CµD¸1C/Á*CÁ?C/ÂDÂC+Â DÂ% C/ÃDÃC-ÃDÃDÃC(Ã%C/Ã'C(Ã(C/Ã+DÃ-DÃ/DÃ5C8Ã6DÃ=Dc              ƒ  óf   K  — | j                   j                  |t        j                  «       «      S ­w)z;
        :param key: the key to get the expiry for
        )r'   rG   r   r\   s     r   Ú
get_expiryzMemoryStorage.get_expiry¯   s'   è ø€ ð
 ×Ñ×#Ñ# C¬¯©«Ó5Ð5ùs   ‚/1c              ƒ  óØ   K  — t        j                   «       }| j                  j                  |g «      x}r1t        j                  |||z
   d„ ¬«      }||dz
     j
                  |fS |dfS ­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: (start of window, number of acquired entries)
        c                ó   — | j                    S r   )r   )rd   s    r   r=   z1MemoryStorage.get_moving_window.<locals>.<lambda>Å   s
   € À%Ç+Á+Ár   r>   é   r   )r   r(   rG   r@   rA   r   )r   r?   rb   r   rc   r(   Úoldests          r   Úget_moving_windowzMemoryStorage.get_moving_window¶   ss   è ø€ ô —I‘I“Kˆ	Ø—[‘[—_‘_ S¨"Ó-Ð-ˆ6Ð-Ü×'Ñ'Ø˜) fÑ,Ð-Ñ3MôˆFð ˜& 1™*Ñ%×+Ñ+¨VÐ3Ð3Ø˜!ˆ|Ðùs   ‚A(A*c              ƒ  óš  K  — ||kD  ryt        j                   «       }| j                  |||«      \  }}| j                  ||||«      ƒ d {  –—† \  }}	}
}||	z  |z  |
z   }t        |«      |z   |kD  ry| j	                  |d|z  |¬«      ƒ d {  –—† }
||	z  |z  |
z   }t        |«      |kD  r| j                  ||«      ƒ d {  –—†  yy7 Œz7 Œ;7 Œ
­w)NFé   )rV   T)r   Úsliding_window_keysÚ_get_sliding_window_infor   rW   rZ   )r   r?   rb   r   rV   rC   Úprevious_keyÚcurrent_keyÚprevious_countÚprevious_ttlÚcurrent_countr,   Úweighted_counts                r   Úacquire_sliding_window_entryz*MemoryStorage.acquire_sliding_window_entryÊ   s÷   è ø€ ð �EŠ>ØÜ�i‰i‹kˆØ$(×$<Ñ$<¸SÀ&È#Ó$NÑ!ˆ�kð ×/Ñ/°¸kÈ6ÐSVÓW×Wñ	
ØØØØà'¨,Ñ6¸Ñ?À-ÑOˆÜ�Ó  6Ñ)¨EÒ1Øð #'§)¡)¨K¸¸V¹ÈF )Ó"S×SˆMØ+¨lÑ:¸VÑCÀmÑSˆNÜ�^Ó$ uÒ,ð —i‘i ¨VÓ4×4Ð4ØØð Xøð Tøð 5ús7   ‚ACÁ
CÁA CÂCÂ2CÂ>C	Â?CÃCÃ	Cc              ƒ  óš   K  — t        j                   «       }| j                  |||«      \  }}| j                  ||||«      ƒ d {  –—† S 7 Œ­wr   )r   ro   rp   ©r   r?   r   rC   rq   rr   s         r   Úget_sliding_windowz MemoryStorage.get_sliding_windowë   sR   è ø€ ô �i‰i‹kˆØ$(×$<Ñ$<¸SÀ&È#Ó$NÑ!ˆ�kØ×2Ñ2Ø˜+ v¨só
÷ 
ð 	
ð 
ús   ‚AAÁA	ÁAc              ƒ  óÌ   K  — t        j                   «       }| j                  |||«      \  }}| j                  |«      ƒ d {  –—†  | j                  |«      ƒ d {  –—†  y 7 Œ7 Œ­wr   )r   ro   r^   ry   s         r   Úclear_sliding_windowz"MemoryStorage.clear_sliding_windowô   sW   è ø€ Ü�i‰i‹kˆØ$(×$<Ñ$<¸SÀ&È#Ó$NÑ!ˆ�kØ�j‰j˜Ó%×%Ð%Ø�j‰j˜Ó&×&Ñ&ð 	&øØ&ús#   ‚?A$ÁA ÁA$ÁA"ÁA$Á"A$c              ƒ  óè   K  — | j                  |«      ƒ d {  –—† }| j                  |«      ƒ d {  –—† }|dk(  rt        d«      }nd||z
  |z  dz  z
  |z  }d||z  dz  z
  |z  |z   }||||fS 7 ŒV7 Œ?­w)Nr   rj   )rG   Úfloat)	r   rq   rr   r   rC   rs   ru   rt   Úcurrent_ttls	            r   rp   z&MemoryStorage._get_sliding_window_infoú   s�   è ø€ ð  $Ÿx™x¨Ó5×5ˆØ"Ÿh™h {Ó3×3ˆØ˜QÒÜ  ›8‰Là 3¨¡<°6Ñ"9¸QÑ!>Ñ?À6ÑIˆLØ˜S 6™\¨QÑ.Ñ/°6Ñ9¸FÑBˆØ˜|¨]¸KÐGÐGð 6øØ3ús   ‚A2—A.˜A2°A0±>A2Á0A2c              ƒ  ó   K  — y­w)z-
        check if storage is healthy
        Tr   rP   s    r   ÚcheckzMemoryStorage.check
  s   è ø€ ð
 ùs   ‚c              ƒ  óB  K  — t        t        | j                  «      t        | j                  «      «      }| j                  j	                  «        | j
                  j	                  «        | j                  j	                  «        | j                  j	                  «        |S ­wr   )rY   Úlenr#   r(   r^   r'   r&   )r   Ú	num_itemss     r   ÚresetzMemoryStorage.reset  sl   è ø€ Üœ˜DŸL™LÓ)¬3¨t¯{©{Ó+;Ó<ˆ	Ø�‰×ÑÔØ×Ñ×ÑÔ Ø�‰×ÑÔØ�
‰
×ÑÔàÐùs   ‚BBc                ó¨   — 	 | j                   r6| j                   j                  «       s| j                   j                  «        y y y # t        $ r Y y w xY wr   )r)   rM   ÚcancelÚRuntimeErrorrP   s    r   Ú__del__zMemoryStorage.__del__  sD   € ð	Ø�zŠz $§*¡*§/¡/Ô"3Ø—
‘
×!Ñ!Õ#ð #4ˆzøäò 	Ùð	ús   ‚A A Á	AÁA)NF)r+   z
str | Noner"   Úboolr,   Ústrr   r   )r   údict[str, limits.typing.Any])r2   rŒ   r   r   )r   r   )r   z-type[Exception] | tuple[type[Exception], ...])rj   )r?   r‹   r   r~   rV   r   r   r   )r?   r‹   rV   r   r   r   )r?   r‹   r   r   )r?   r‹   r   r   )
r?   r‹   rb   r   r   r   rV   r   r   rŠ   )r?   r‹   r   r~   )r?   r‹   rb   r   r   r   r   ztuple[float, int])r?   r‹   r   r   r   útuple[int, float, int, float])r?   r‹   r   r   r   r   )
rq   r‹   rr   r‹   r   r   rC   r~   r   r�   )r   rŠ   )r   z
int | None)r   r   r   Ú__doc__ÚSTORAGE_SCHEMEr   r3   r8   rO   r7   ÚpropertyrT   rW   rZ   rG   r^   re   rg   rl   rw   rz   r|   rp   r�   r…   r‰   Ú__classcell__)r-   s   @r   r    r       s‘  ø„ ñð %Ð%€Nðð ?DðDØðDØ7;ðDØJMðDà	õDóó8óó2Eð ðà	6òó ðô
-ô -ó	(ó"ð @AðØðØ"ðØ,/ðØ9<ðà	óó66ðØðØ"ðØ,/ðà	óð2 ðàðð ðð ð	ð
 ðð 
óðB
Øð
Ø #ð
à	&ó
ó'ðHàðHð ðHð ð	Hð
 ðHð 
'óHó ó÷r   r    )Ú
__future__r   r$   r@   r   Úcollectionsr   r   Úmathr   Údeprecated.sphinxr   Úlimits.typingÚlimitsÚlimits.aio.storage.baser   r	   r
   Úlimits.storage.baser   r   r    r   r   r   Ú<module>rš      sc   ðÝ "ã Û Û ß ,Ý å *ã ÷ñ õ
 9÷*ñ *ñ �eÔôDØÐ Ð"=Ð?WóDó ñDr   