ó
    Û°›jo  ã                   ó‚   • S SK r S SKrS SKrS SKJrJrJr  \ R                  " \5      r	S r
 " S S5      r " S S5      rg)é    N)ÚbucketÚstandardÚ
throttlingc                 óÞ  • [         R                  " 5       n[        R                  " SUR	                  5       S9n[         R
                  " SUS9n[        U5      n[        R                  " [        R                  " 5       S9n[        UUUUUS9nU R                  R                  R                  SUR                  5        U R                  R                  R                  SUR                  5        U$ )	Nr   )Ústarting_max_rateÚ
start_timeé   )Úmax_rateÚclock)Úretry_event_adapter)Úrate_adjustorÚrate_clockerÚtoken_bucketÚthrottling_detectorr   zbefore-sendzneeds-retry)r   ÚClockr   ÚCubicCalculatorÚcurrent_timeÚTokenBucketÚRateClockerr   ÚThrottlingErrorDetectorÚRetryEventAdapterÚClientRateLimiterÚmetaÚeventsÚregisterÚon_sending_requestÚon_receiving_response)Úclientr   r   r   r   r   Úlimiters          ÚV/home/mande/repo/quber/.venv/lib/python3.13/site-packages/botocore/retries/adaptive.pyÚregister_retry_handlerr!   
   sÔ   € Ü�LŠL‹N€EÜ×.Ò.Ø¨×(:Ñ(:Ó(<ñ€Mô ×%Ò%¨q¸Ñ>€LÜ˜uÓ%€LÜ"×:Ò:Ü$×6Ò6Ó8ñÐô  Ø#Ø!Ø!Ø/Øñ€Gð ‡K�K×Ñ×ÑØØ×"Ñ"ôð ‡K�K×Ñ×ÑØØ×%Ñ%ôð €Nó    c                   ó*   • \ rS rSrSrS rS rS rSrg)r   é&   g       @c                 ó‚   • Xl         X l        X0l        X@l        XPl        SU l        [        R                  " 5       U l        g )NF)	Ú_rate_adjustorÚ_rate_clockerÚ_token_bucketÚ_throttling_detectorÚ_clockÚ_enabledÚ	threadingÚLockÚ_lock)Úselfr   r   r   r   r   s         r    Ú__init__ÚClientRateLimiter.__init__)   s6   € ð ,ÔØ)ÔØ)ÔØ$7Ô!ØŒØˆŒÜ—^’^Ó%ˆ�
r"   c                 ó\   • U R                   (       a  U R                  R                  5         g g ©N)r+   r(   Úacquire)r/   ÚrequestÚkwargss      r    r   Ú$ClientRateLimiter.on_sending_request9   s    € Ø�=�=Ø×Ñ×&Ñ&Õ(ð r"   c                 ó‚  • U R                   R                  5       nU R                  R                  5       nU R                     U R
                  R                  " S0 UD6(       d  U R                  R                  U5      nO�U R                  (       d  UnO[        X R                  R                  5      nU R                  R                  XS5      n[        R                  SUUU R                  R                   5        SU l	        [        X@R"                  U-  5      U R                  l        S S S 5        g ! , (       d  f       g = f)NzfThrottling response received, new send rate: %s measured rate: %s, token bucket capacity available: %sT© )r'   Úrecordr*   r   r.   r)   Úis_throttling_errorr&   Úsuccess_receivedr+   Úminr(   r
   Úerror_receivedÚloggerÚdebugÚavailable_capacityÚ_MAX_RATE_ADJUST_SCALE)r/   r6   Úmeasured_rateÚ	timestampÚnew_rateÚrate_to_uses         r    r   Ú'ClientRateLimiter.on_receiving_response>   sú   € Ø×*Ñ*×1Ñ1Ó3ˆØ—K‘K×,Ñ,Ó.ˆ	Ø�Z‹ZØ×,Ñ,×@Ò@ÑJÀ6×JØ×.Ñ.×?Ñ?À	ÓJ‘à—}—}Ø"/‘Kä"%Ø%×'9Ñ'9×'BÑ'Bó#�Kð  ×.Ñ.×=Ñ=Øó�ô —‘ð$ð Ø!Ø×&Ñ&×9Ñ9ôð !%�”Ü*-Ø×5Ñ5¸ÑEó+ˆD×ÑÔ'÷- �ZŽZús   ÁC&D0Ä0
D>)r*   r+   r.   r&   r'   r)   r(   N)	Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__rB   r0   r   r   Ú__static_attributes__r9   r"   r    r   r   &   s   † Ø Ðò&ò )õ
r"   r   c                   óH   • \ rS rSrSrSrSr\\4S jrS
S jr\	S 5       r
Srg	)r   é\   z7Tracks the rate at which a client is sending a request.gš™™™™™é?g      à?c                 óú   • Xl         SU l        X l        [        R                  " U R                   R                  5       5      U l        SU R                  -  U l        SU l	        [        R                  " 5       U l        g )Nr   r	   )r*   Ú_measured_rateÚ
_smoothingÚmathÚfloorr   Ú_last_bucketÚ_TIME_BUCKET_RANGEÚ_time_bucket_scaleÚ_countr,   r-   r.   )r/   r   Ú	smoothingÚtime_bucket_ranges       r    r0   ÚRateClocker.__init__c   s\   € ð ŒØˆÔØ#ŒÜ ŸJšJ t§{¡{×'?Ñ'?Ó'AÓBˆÔØ"# d×&=Ñ&=Ñ"=ˆÔØˆŒÜ—^’^Ó%ˆ�
r"   c                 ó  • U R                      U R                  R                  5       n[        R                  " X R
                  -  5      U R
                  -  nU =R                  U-  sl        X0R                  :”  aa  U R                  [        X0R                  -
  5      -  nX@R                  -  U R                  SU R                  -
  -  -   U l
        SU l        X0l        U R                  sS S S 5        $ ! , (       d  f       g = f)Nr	   r   )r.   r*   r   rR   rS   rV   rW   rT   ÚfloatrQ   rP   )r/   ÚamountÚtr   Úcurrent_rates        r    r:   ÚRateClocker.recordq   sÈ   € Ø�Z‹ZØ—‘×(Ñ(Ó*ˆAä—
’
˜1×6Ñ6Ñ6Ó7Ø×)Ñ)ñ*ð ð �KŠK˜6Ñ!�KØ×)Ñ)Ó)Ø#Ÿ{™{¬U°6×<MÑ<MÑ3MÓ-NÑN�Ø'3·o±oÑ'EØ×'Ñ'¨1¨t¯©Ñ+>Ñ?ñ'�Ô#ð  �”Ø$*Ô!Ø×&Ñ&÷ �Z�Zús   �CC1Ã1
C?c                 ó   • U R                   $ r3   )rP   )r/   s    r    rC   ÚRateClocker.measured_rate‚   s   € à×"Ñ"Ð"r"   )r*   rW   rT   r.   rP   rQ   rV   N)r	   )rH   rI   rJ   rK   Ú__doc__Ú_DEFAULT_SMOOTHINGrU   r0   r:   ÚpropertyrC   rL   r9   r"   r    r   r   \   s7   † ÙAàÐàÐð
 %Ø,ô	&ô'ð" ñ#ó ó#r"   r   )ÚloggingrR   r,   Úbotocore.retriesr   r   r   Ú	getLoggerrH   r?   r!   r   r   r9   r"   r    Ú<module>ri      s>   ðÛ Û Û ç 9Ñ 9à	×	Ò	˜8Ó	$€ò÷83ñ 3÷l(#ò (#r"   