Ë
    ³'wfÊ  ã                   ó<   — d Z ddlZddlmZ ddlmZ  G d„ d«      Zy)zPAn async reimplementation of the blocking elements from botocore.retries.bucket.é    N)ÚCapacityNotAvailableError)ÚClockc                   ót   — e Zd ZdZdZefd„Zed„ «       Zd„ Zd„ Z	ed„ «       Z
ed„ «       Zdd	„Zd
„ Zd„ Zd„ Zy)ÚAsyncTokenBucketz5A reimplementation of TokenBucket that doesn't block.g      à?c                 ó¬   — d | _         d | _        d| _        || _        d | _        || _        | j                  |«       t        j                  «       | _	        y )Nr   )
Ú
_fill_rateÚ_max_capacityÚ_current_capacityÚ_clockÚ_last_timestampÚ	_min_rateÚ_set_max_rateÚasyncioÚ	ConditionÚ_new_fill_rate_condition)ÚselfÚmax_rateÚclockÚmin_rates       ún/home/panchajanya/Development/work/volatility3/venv/lib/python3.12/site-packages/aiobotocore/retries/bucket.pyÚ__init__zAsyncTokenBucket.__init__   sP   € ØˆŒØ!ˆÔØ!"ˆÔØˆŒØ#ˆÔØ!ˆŒØ×Ñ˜8Ô$ô )0×(9Ñ(9Ó(;ˆÕ%ó    c                 ó   — | j                   S ©N)r   ©r   s    r   r   zAsyncTokenBucket.max_rate!   s   € à‰Ðr   c              ƒ   óÞ   K  — | j                   4 ƒd {  –—†  | j                  |«       | j                   j                  «        d d d «      ƒd {  –—†  y 7 Œ@7 Œ# 1 ƒd {  –—†7  sw Y   y xY w­wr   )r   r   Únotify©r   Úvalues     r   Úset_max_ratezAsyncTokenBucket.set_max_rate%   s^   è ø€ Ø×0Ñ0÷ 	3ñ 	3Ø×Ñ˜uÔ%Ø×)Ñ)×0Ñ0Ô2÷	3÷ 	3ñ 	3øð 	3ø÷ 	3÷ 	3ñ 	3üsD   ‚A-“A”A-—,AÁA-ÁAÁA-ÁA-ÁA*ÁA!ÁA*Á&A-c                 óÌ   — | j                  «        t        || j                  «      | _        |dk\  r|| _        nd| _        t        | j                  | j                  «      | _        y )Né   )Ú_refillÚmaxr   r   r	   Úminr
   r   s     r   r   zAsyncTokenBucket._set_max_rate*   sV   € ð 	‰ŒÜ˜e T§^¡^Ó4ˆŒØAŠ:Ø!&ˆDÕà!"ˆDÔô "%Ø×"Ñ" D×$6Ñ$6ó"
ˆÕr   c                 ó   — | j                   S r   )r	   r   s    r   Úmax_capacityzAsyncTokenBucket.max_capacity<   s   € à×!Ñ!Ð!r   c                 ó   — | j                   S r   )r
   r   s    r   Úavailable_capacityz#AsyncTokenBucket.available_capacity@   s   € à×%Ñ%Ð%r   c              ƒ   óÂ   K  — | j                   4 ƒd{  –—†  | j                  ||¬«      ƒ d{  –—† cddd«      ƒd{  –—†  S 7 Œ07 Œ7 Œ	# 1 ƒd{  –—†7  sw Y   yxY w­w)aj  Acquire token or return amount of time until next token available.

        If block is True, then this method will return when there's sufficient
        capacity to acquire the desired amount. This won't block the event loop.

        If block is False, then this method will return True if capacity
        was successfully acquired, False otherwise.
        N)ÚamountÚblock)r   Ú_acquire)r   r+   r,   s      r   ÚacquirezAsyncTokenBucket.acquireD   s`   è ø€ ð ×0Ñ0÷ 	Cñ 	CØŸ™¨f¸E˜ÓB×B÷	C÷ 	Cò 	CøØBøð	Cø÷ 	C÷ 	Cñ 	CüsQ   ‚A“A”A—A
®A¯A
²A¾A¿AÁA
ÁAÁ
AÁAÁAÁAc              ƒ   óÖ  K  — | j                  «        || j                  k  r| xj                  |z  c_        y|s
t        «       ‚| j                  |«      }|dkD  r^	 t	        j
                  | j                  j                  «       |«      ƒ d {  –—†  | j                  «        | j                  |«      }|dkD  rŒ^| xj                  |z  c_        y7 ŒA# t        j                  $ r Y ŒTw xY w­w)NTr   )	r#   r
   r   Ú_sleep_amountr   Úwait_forr   ÚwaitÚTimeoutError)r   r+   r,   Úsleep_amounts       r   r-   zAsyncTokenBucket._acquireP   sß   è ø€ Ø‰ŒØT×+Ñ+Ò+Ø×"Ò" fÑ,Õ"ØáÜ/Ó1Ð1à×-Ñ-¨fÓ5ˆLØ Ò"ðÜ!×*Ñ*Ø×5Ñ5×:Ñ:Ó<¸ló÷ ð ð
 —‘”Ø#×1Ñ1°&Ó9ð  Ó"ð ×"Ò" fÑ,Õ"Øðùô ×+Ñ+ò ÙðüsB   ‚AC)Á1C ÂCÂC Â&C)Â8C)ÃC ÃC&Ã#C)Ã%C&Ã&C)c                 ó:   — || j                   z
  | j                  z  S r   )r
   r   )r   r+   s     r   r0   zAsyncTokenBucket._sleep_amountf   s   € Ø˜×/Ñ/Ñ/°4·?±?ÑBÐBr   c                 óþ   — | j                   j                  «       }| j                  €|| _        y | j                  }|| j                  z
  | j                  z  }t        | j                  ||z   «      }|| _        || _        y r   )r   Úcurrent_timer   r
   r   r%   r	   )r   Ú	timestampÚcurrent_capacityÚfill_amountÚnew_capacitys        r   r#   zAsyncTokenBucket._refilli   sx   € Ø—K‘K×,Ñ,Ó.ˆ	Ø×ÑÐ'Ø#,ˆDÔ ØØ×1Ñ1ÐØ  4×#7Ñ#7Ñ7¸4¿?¹?ÑJˆÜ˜4×-Ñ-Ð/?À+Ñ/MÓNˆØ!-ˆÔØ(ˆÕr   N)r"   T)Ú__name__Ú
__module__Ú__qualname__Ú__doc__Ú	_MIN_RATEr   Úpropertyr   r    r   r'   r)   r.   r-   r0   r#   © r   r   r   r   	   sp   „ Ù?ð €Ià1:ó 
<ð ñó ðò3ò

ð$ ñ"ó ð"ð ñ&ó ð&ó
Còò,Có	)r   r   )r?   r   Úbotocore.exceptionsr   Úbotocore.retries.bucketr   r   rB   r   r   ú<module>rE      s   ðÙ VÛ å 9å 2÷i)ò i)r   