o
    di                     @   s   d dl mZmZmZmZmZmZmZmZm	Z	m
Z
mZmZmZmZmZ ddlmZmZ ddlmZ efddZG dd	 d	eZG d
d deZG dd de
ZG dd deZdS )    )DEFAULT_MAX_ATTEMPTSExponentialBackoffMaxAttemptsCheckerModeledRetryableCheckerOrRetryCheckerRetryEventAdapterRetryHandlerRetryPolicyRetryQuotaCheckerStandardRetryConditionsThrottledRetryableCheckerTransientRetryableCheckerloggerquotaspecial   )	async_anyresolve_awaitable   )AioRetryDDBChecksumErrorc                 C   s   t t }| jjj}| }| jjd| |j	 t
tt|dt dt |d}d| }| jjjd| |j|d |S )Nzafter-call.)max_attempts)retry_checkerretry_backoff)retry_policyretry_event_adapterretry_quotazretry-config-zneeds-retry.)	unique_id)r
   r   
RetryQuotametaservice_model
service_id	hyphenizeeventsregisterrelease_retry_quotaAioRetryHandlerAioRetryPolicyAioStandardRetryConditionsr   r   needs_retry)clientr   r   r    service_event_namehandlerr    r,   P/home/ubuntu/.local/lib/python3.10/site-packages/aiobotocore/retries/standard.pyregister_retry_handler   s.   

r.   c                   @      e Zd Zdd ZdS )r%   c                    sv   d}| j jdi |}| j|I dH r.| j|r(| j|}td| ntd ntd | j 	| |S )z.Connect as a handler to the needs-retry event.Nz1Retry needed, retrying request after delay of: %sz;Retry needed but retry quota reached, not retrying request.zNot retrying request.r,   )
_retry_event_adaptercreate_retry_context_retry_policyshould_retry_retry_quotaacquire_retry_quotacompute_retry_delayr   debug!adapt_retry_response_from_context)selfkwargsretry_delaycontextr,   r,   r-   r(   5   s    
zAioRetryHandler.needs_retryN)__name__
__module____qualname__r(   r,   r,   r,   r-   r%   4       r%   c                   @   r/   )r&   c                    s   t | j|I d H S N)r   _retry_checkeris_retryabler9   r<   r,   r,   r-   r3   N   s   

zAioRetryPolicy.should_retryN)r=   r>   r?   r3   r,   r,   r,   r-   r&   M   r@   r&   c                   @   s    e Zd ZefddZdd ZdS )r'   c                 C   s4   t || _tt t t tt t gg| _	d S rA   )
r   _max_attempts_checkerAioOrRetryCheckerr   r   r   r   RetryIDPCommunicationErrorr   _additional_checkers)r9   r   r,   r,   r-   __init__U   s   

z#AioStandardRetryConditions.__init__c                    s$   | j |ot| j|I d H S rA   )rE   rC   r   rH   rD   r,   r,   r-   rC   g   s   
z'AioStandardRetryConditions.is_retryableN)r=   r>   r?   r   rI   rC   r,   r,   r,   r-   r'   T   s    r'   c                   @   r/   )rF   c                    s    t  fdd| jD I d H S )Nc                 3   s    | ]}|  V  qd S rA   )rC   ).0checkerr<   r,   r-   	<genexpr>q   s    

z1AioOrRetryChecker.is_retryable.<locals>.<genexpr>)r   	_checkersrD   r,   rL   r-   rC   p   s   zAioOrRetryChecker.is_retryableN)r=   r>   r?   rC   r,   r,   r,   r-   rF   o   r@   rF   N)botocore.retries.standardr   r   r   r   r   r   r   r	   r
   r   r   r   r   r   r   _helpersr   r   r   r.   r%   r&   r'   rF   r,   r,   r,   r-   <module>   s   D 