Ë
    rPêjo  ã                   ó‚   — d dl Z d dlZd dlZd dlmZmZmZ  e j                  e«      Z	d„ Z
 G d„ d«      Z G d„ d«      Zy)é    N)ÚbucketÚstandardÚ
throttlingc                 óì  — t        j                  «       }t        j                  d|j	                  «       ¬«      }t        j
                  d|¬«      }t        |«      }t        j                  t        j                  «       ¬«      }t        |||||¬«      }| j                  j                  j                  d|j                  «       | j                  j                  j                  d|j                  «       |S )	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          ú^/home/oem/CyberBrain26-unified/.venv/lib/python3.12/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                   ó"   — e Zd ZdZd„ Zd„ Zd„ Zy)r   g       @c                 óŠ   — || _         || _        || _        || _        || _        d| _        t        j                  «       | _        y )NF)	Ú_rate_adjustorÚ_rate_clockerÚ_token_bucketÚ_throttling_detectorÚ_clockÚ_enabledÚ	threadingÚLockÚ_lock)Úselfr   r   r   r   r   s         r    Ú__init__zClientRateLimiter.__init__)   s@   € ð ,ˆÔØ)ˆÔØ)ˆÔØ$7ˆÔ!ØˆŒØˆŒÜ—^‘^Ó%ˆ�
r"   c                 óR   — | j                   r| j                  j                  «        y y ©N)r*   r'   Úacquire)r.   ÚrequestÚkwargss      r    r   z$ClientRateLimiter.on_sending_request9   s    € Ø�=Š=Ø×Ñ×&Ñ&Õ(ð r"   c                 ój  — | j                   j                  «       }| j                  j                  «       }| j                  5   | j
                  j                  di |¤Žs| j                  j                  |«      }n~| j                  s|}n t        || j                  j                  «      }| j                  j                  ||«      }t        j                  d||| j                  j                   «       d| _	        t        || j"                  |z  «      | j                  _        d d d «       y # 1 sw Y   y xY w)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.   r4   Úmeasured_rateÚ	timestampÚnew_rateÚrate_to_uses         r    r   z'ClientRateLimiter.on_receiving_response>   s  € Ø×*Ñ*×1Ñ1Ó3ˆØ—K‘K×,Ñ,Ó.ˆ	Ø�Z‰Zñ 	Ø@�4×,Ñ,×@Ñ@ÑJÀ6ÒJØ×.Ñ.×?Ñ?À	ÓJ‘à—}’}Ø"/‘Kä"%Ø% t×'9Ñ'9×'BÑ'Bó#�Kð  ×.Ñ.×=Ñ=Ø ó�ô —‘ð$ð Ø!Ø×&Ñ&×9Ñ9ôð !%�”Ü*-Ø˜$×5Ñ5¸ÑEó+ˆD×ÑÔ'÷-	÷ 	ñ 	ús   ÁCD)Ä)D2N)Ú__name__Ú
__module__Ú__qualname__r?   r/   r   r   r6   r"   r    r   r   &   s   „ Ø Ðò&ò )ó
r"   r   c                   ó<   — e Zd ZdZdZdZeefd„Zdd„Zed„ «       Z	y)	r   z7Tracks the rate at which a client is sending a request.gš™™™™™é?g      à?c                 óú   — || _         d| _        || _        t        j                  | j                   j                  «       «      | _        d| j                  z  | _        d| _	        t        j                  «       | _        y )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    r/   zRateClocker.__init__c   s`   € ð ˆŒØˆÔØ#ˆŒÜ ŸJ™J t§{¡{×'?Ñ'?Ó'AÓBˆÔØ"# d×&=Ñ&=Ñ"=ˆÔØˆŒÜ—^‘^Ó%ˆ�
r"   c                 ó   — | j                   5  | j                  j                  «       }t        j                  || j
                  z  «      | j
                  z  }| xj                  |z  c_        || j                  kD  rd| j                  t        || j                  z
  «      z  }|| j                  z  | j                  d| j                  z
  z  z   | _
        d| _        || _        | j                  cd d d «       S # 1 sw Y   y xY w)Nr	   r   )r-   r)   r   rK   rL   rO   rP   rM   ÚfloatrJ   rI   )r.   ÚamountÚtr   Úcurrent_rates        r    r7   zRateClocker.recordq   sÝ   € Ø�Z‰Zñ 	'Ø—‘×(Ñ(Ó*ˆAä—
‘
˜1˜t×6Ñ6Ñ6Ó7Ø×)Ñ)ñ*ð ð �KŠK˜6Ñ!�KØ˜×)Ñ)Ò)Ø#Ÿ{™{¬U°6¸D×<MÑ<MÑ3MÓ-NÑN�Ø'3°d·o±oÑ'EØ×'Ñ'¨1¨t¯©Ñ+>Ñ?ñ'�Ô#ð  �”Ø$*�Ô!Ø×&Ñ&÷	'÷ 	'ò 	'ús   �CC4Ã4C=c                 ó   — | j                   S r1   )rI   )r.   s    r    r@   zRateClocker.measured_rate‚   s   € à×"Ñ"Ð"r"   N)r	   )
rD   rE   rF   Ú__doc__Ú_DEFAULT_SMOOTHINGrN   r/   r7   Úpropertyr@   r6   r"   r    r   r   \   s7   „ ÙAàÐàÐð
 %Ø,ó	&ó'ð" ñ#ó ñ#r"   r   )ÚloggingrK   r+   Úbotocore.retriesr   r   r   Ú	getLoggerrD   r<   r!   r   r   r6   r"   r    ú<module>r_      s@   ðÛ Û Û ç 9Ñ 9à	ˆ×	Ñ	˜8Ó	$€ò÷83ñ 3÷l(#ò (#r"   