ó
    Û°›jš  ã                   óL   • S r SSKrSSKrSSKJr   " S S5      r " S S5      rg)zEThis module implements token buckets used for client side throttling.é    N)ÚCapacityNotAvailableErrorc                   ó&   • \ rS rSrS rS rS rSrg)ÚClocké	   c                 ó   • g ©N© ©Úselfs    ÚT/home/mande/repo/quber/.venv/lib/python3.13/site-packages/botocore/retries/bucket.pyÚ__init__ÚClock.__init__
   s   € Øó    c                 ó0   • [         R                  " U5        g r   )ÚtimeÚsleep©r   Úamounts     r   r   ÚClock.sleep   s   € Ü�
Š
�6Õr   c                 ó,   • [         R                   " 5       $ r   )r   r
   s    r   Úcurrent_timeÚClock.current_time   s   € Ü�yŠy‹{Ðr   r	   N)Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__r   r   r   Ú__static_attributes__r	   r   r   r   r   	   s   † òòõr   r   c                   ó”   • \ rS rSrSr\4S jr\S 5       r\R                  S 5       r\S 5       r	\S 5       r
SS jrS	 rS
 rS rSrg)ÚTokenBucketé   g      à?c                 óÞ   • S U l         S U l        SU l        X l        S U l        X0l        [        R                  " 5       U l        [        R                  " U R                  5      U l
        Xl        g )Nr   )Ú
_fill_rateÚ_max_capacityÚ_current_capacityÚ_clockÚ_last_timestampÚ	_min_rateÚ	threadingÚLockÚ_lockÚ	ConditionÚ_new_fill_rate_conditionÚmax_rate)r   r-   ÚclockÚmin_rates       r   r   ÚTokenBucket.__init__   sU   € ØˆŒØ!ˆÔØ!"ˆÔØŒØ#ˆÔØ!ŒÜ—^’^Ó%ˆŒ
Ü(1×(;Ò(;¸D¿J¹JÓ(GˆÔ%Ø �r   c                 ó   • U R                   $ r   )r"   r
   s    r   r-   ÚTokenBucket.max_rate"   s   € à�‰Ðr   c                 óJ  • U R                      U R                  5         [        XR                  5      U l        US:¼  a  Xl        OSU l        [        U R                  U R
                  5      U l        U R                   R                  5         S S S 5        g ! , (       d  f       g = f)Né   )	r,   Ú_refillÚmaxr'   r"   r#   Úminr$   Únotify)r   Úvalues     r   r-   r2   &   s{   € à×*Ó*ð �L‰LŒNÜ! %¯©Ó8ˆDŒOØ˜‹zØ%*Õ"à%&�Ô"ô &)Ø×&Ñ&¨×(:Ñ(:ó&ˆDÔ"ð ×)Ñ)×0Ñ0Ô2÷# +×*Ö*ús   �A>BÂ
B"c                 ó   • U R                   $ r   )r#   r
   s    r   Úmax_capacityÚTokenBucket.max_capacity;   s   € à×!Ñ!Ð!r   c                 ó   • U R                   $ r   )r$   r
   s    r   Úavailable_capacityÚTokenBucket.available_capacity?   s   € à×%Ñ%Ð%r   c                 ón   • U R                      U R                  XS9sSSS5        $ ! , (       d  f       g= f)a"  Acquire token or return amount of time until next token available.

If block is True, then this method will block until there's sufficient
capacity to acquire the desired amount.

If block is False, then this method will return True is capacity
was successfully acquired, False otherwise.

)r   ÚblockN)r,   Ú_acquire)r   r   rA   s      r   ÚacquireÚTokenBucket.acquireC   s'   € ð ×*Ó*Ø—=‘=¨�=Ð<÷ +×*×*ús   �&¦
4c                 óp  • U R                  5         XR                  ::  a  U =R                  U-  sl        gU(       d
  [        5       eU R                  U5      nUS:”  aD  U R                  R                  U5        U R                  5         U R                  U5      nUS:”  a  MD  U =R                  U-  sl        g)NTr   )r5   r$   r   Ú_sleep_amountr,   Úwait)r   r   rA   Úsleep_amounts       r   rB   ÚTokenBucket._acquireP   sž   € Ø�‰ŒØ×+Ñ+Ó+Ø×"Ò" fÑ,Õ"ØæÜ/Ó1Ð1à×-Ñ-¨fÓ5ˆLØ Ó"ð ×-Ñ-×2Ñ2°<Ô@Ø—‘”Ø#×1Ñ1°&Ó9�ð  Õ"ð ×"Ò" fÑ,Õ"Ør   c                 ó8   • XR                   -
  U R                  -  $ r   )r$   r"   r   s     r   rF   ÚTokenBucket._sleep_amountg   s   € Ø×/Ñ/Ñ/°4·?±?ÑBÐBr   c                 óö   • U R                   R                  5       nU R                  c  Xl        g U R                  nXR                  -
  U R                  -  n[        U R                  X#-   5      nX@l        Xl        g r   )r%   r   r&   r$   r"   r7   r#   )r   Ú	timestampÚcurrent_capacityÚfill_amountÚnew_capacitys        r   r5   ÚTokenBucket._refillj   sn   € Ø—K‘K×,Ñ,Ó.ˆ	Ø×ÑÑ'Ø#,Ô ØØ×1Ñ1ÐØ ×#7Ñ#7Ñ7¸4¿?¹?ÑJˆÜ˜4×-Ñ-Ð/?Ñ/MÓNˆØ!-ÔØ(Õr   )	r%   r$   r"   r&   r*   r#   r'   r,   r-   N)r4   T)r   r   r   r   Ú	_MIN_RATEr   Úpropertyr-   Úsetterr;   r>   rC   rB   rF   r5   r   r	   r   r   r   r      sx   † Ø€Ià1:ô 	!ð ñó ðð ‡_�_ñ3ó ð3ð( ñ"ó ð"ð ñ&ó ð&ô=òò.Cõ	)r   r   )Ú__doc__r(   r   Úbotocore.exceptionsr   r   r   r	   r   r   Ú<module>rW      s'   ðÙ Kã Û å 9÷ñ ÷_)ò _)r   