§
    9xÅ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dS )é    N)ÚbucketÚstandardÚ
throttlingc                 óÎ  — t          j        ¦   «         }t          j        d|                     ¦   «         ¬¦  «        }t          j        d|¬¦  «        }t          |¦  «        }t          j        t          j	        ¦   «         ¬¦  «        }t          |||||¬¦  «        }| j        j                             d|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          úJC:\Projects\Historical\venv\Lib\site-packages\botocore/retries/adaptive.pyÚregister_retry_handlerr!   
   sù   € ÝŒL‰NŒN€EÝÔ.Ø¨×(:Ò(:Ñ(<Ô(<ðñ ô €Mõ Ô%¨q¸Ð>Ñ>Ô>€LÝ˜uÑ%Ô%€LÝ"Ô:Ý$Ô6Ñ8Ô8ðñ ô Ðõ  Ø#Ø!Ø!Ø/Øðñ ô €Gð „KÔ×ÒØØÔ"ñô ð ð „KÔ×ÒØØÔ%ñô ð ð €Nó    c                   ó$   — e Zd ZdZd„ Zd„ Zd„ ZdS )r   g       @c                 óŠ   — || _         || _        || _        || _        || _        d| _        t          j        ¦   «         | _        d S )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__)   sE   € ð ,ˆÔØ)ˆÔØ)ˆÔØ$7ˆÔ!ØˆŒØˆŒÝ”^Ñ%Ô%ˆŒ
ˆ
ˆ
r"   c                 óJ   — | j         r| j                             ¦   «          d S d S ©N)r*   r'   Úacquire)r.   ÚrequestÚkwargss      r    r   z$ClientRateLimiter.on_sending_request9   s1   € ØŒ=ð 	)ØÔ×&Ò&Ñ(Ô(Ð(Ð(Ð(ð	)ð 	)r"   c                 ó"  — | j                              ¦   «         }| j                             ¦   «         }| j        5   | j        j        di |¤Žs| j                             |¦  «        }nm| j	        s|}nt          || j        j        ¦  «        }| j                             ||¦  «        }t                               d||| j        j        ¦  «         d| _	        t          || j        |z  ¦  «        | j        _        d d d ¦  «         d S # 1 swxY w Y   d S )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>   sn  € ØÔ*×1Ò1Ñ3Ô3ˆØ”K×,Ò,Ñ.Ô.ˆ	ØŒZð 	ð 	Ø@�4Ô,Ô@ÐJÐJÀ6ÐJÐJð %ØÔ.×?Ò?À	ÑJÔJ��à”}ð Ø"/�K�Kå"%Ø% tÔ'9Ô'Bñ#ô #�Kð  Ô.×=Ò=Ø ñô �õ —’ð$ð Ø!ØÔ&Ô9ñô ð ð !%�”Ý*-Ø˜$Ô5¸ÑEñ+ô +ˆDÔÔ'ð-	ð 	ð 	ñ 	ô 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	øøøð 	ð 	ð 	ð 	ð 	ð 	s   ºB=DÄDÄDN)Ú__name__Ú
__module__Ú__qualname__r?   r/   r   r   r6   r"   r    r   r   &   sG   € € € € € Ø Ðð&ð &ð &ð )ð )ð )ð
ð ð ð ð r"   r   c                   óD   — e Zd ZdZdZdZeefd„Zd	d„Zed„ ¦   «         Z	dS )
r   z7Tracks the rate at which a client is sending a request.gš™™™™™é?g      à?c                 óì   — || _         d| _        || _        t          j        | j                              ¦   «         ¦  «        | _        d| j        z  | _        d| _	        t          j        ¦   «         | _        d S )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   sd   € ð ˆŒØˆÔØ#ˆŒÝ œJ t¤{×'?Ò'?Ñ'AÔ'AÑBÔBˆÔØ"# dÔ&=Ñ"=ˆÔØˆŒÝ”^Ñ%Ô%ˆŒ
ˆ
ˆ
r"   r	   c                 ó   — | j         5  | j                             ¦   «         }t          j        || j        z  ¦  «        | j        z  }| xj        |z  c_        || j        k    rO| j        t          || j        z
  ¦  «        z  }|| j	        z  | j
        d| j	        z
  z  z   | _
        d| _        || _        | j
        cd d d ¦  «         S # 1 swxY w Y   d S )Nr	   r   )r-   r)   r   rK   rL   rO   rP   rM   ÚfloatrJ   rI   )r.   ÚamountÚtr   Úcurrent_rates        r    r7   zRateClocker.recordq   s  € ØŒZð 	'ð 	'Ø”×(Ò(Ñ*Ô*ˆAå”
˜1˜tÔ6Ñ6Ñ7Ô7ØÔ)ñ*ð ð ˆKŒK˜6Ñ!ˆKŒKØ˜Ô)Ò)Ð)Ø#œ{­U°6¸DÔ<MÑ3MÑ-NÔ-NÑN�Ø'3°d´oÑ'EØÔ'¨1¨t¬Ñ+>Ñ?ñ'�Ô#ð  �”Ø$*�Ô!ØÔ&ð	'ð 	'ð 	'ð 	'ñ 	'ô 	'ð 	'ð 	'ð 	'ð 	'ð 	'ð 	'øøøð 	'ð 	'ð 	'ð 	'ð 	'ð 	's   ˆB.CÃCÃ
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   \   sq   € € € € € ØAÐAàÐàÐð
 %Ø,ð	&ð &ð &ð &ð'ð 'ð 'ð 'ð" ð#ð #ñ „Xð#ð #ð #r"   r   )ÚloggingrK   r+   Úbotocore.retriesr   r   r   Ú	getLoggerrD   r<   r!   r   r   r6   r"   r    ú<module>r_      s½   ðØ €€€Ø €€€Ø Ð Ð Ð à 9Ð 9Ð 9Ð 9Ð 9Ð 9Ð 9Ð 9Ð 9Ð 9à	ˆÔ	˜8Ñ	$Ô	$€ðð ð ð83ð 3ð 3ð 3ð 3ñ 3ô 3ð 3ðl(#ð (#ð (#ð (#ð (#ñ (#ô (#ð (#ð (#ð (#r"   