U
    n/e                     @   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)Zretry_checkerZretry_backoff)Zretry_policyZretry_event_adapterretry_quotazretry-config-%szneeds-retry.%s)	unique_id)r
   r   Z
RetryQuotametaZservice_model
service_idZ	hyphenizeeventsregisterZrelease_retry_quotaAioRetryHandlerAioRetryPolicyAioStandardRetryConditionsr   r   needs_retry)clientr   r   r   Zservice_event_namehandlerr    r#   @/tmp/pip-unpacked-wheel-8mnez3y6/aiobotocore/retries/standard.pyregister_retry_handler   s0    
 r%   c                   @   s   e Zd Zdd ZdS )r   c                    sp   d}| j jf |}| j|I dH rV| j|rJ| j|}td| q`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.)
Z_retry_event_adapterZcreate_retry_contextZ_retry_policyshould_retryZ_retry_quotaZacquire_retry_quotaZcompute_retry_delayr   debugZ!adapt_retry_response_from_context)selfkwargsZretry_delaycontextr#   r#   r$   r    5   s    
zAioRetryHandler.needs_retryN)__name__
__module____qualname__r    r#   r#   r#   r$   r   4   s   r   c                   @   s   e Zd Zdd ZdS )r   c                    s   t | j|I d H S N)r   Z_retry_checkeris_retryabler(   r*   r#   r#   r$   r&   N   s    
zAioRetryPolicy.should_retryN)r+   r,   r-   r&   r#   r#   r#   r$   r   M   s   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 r.   )
r   _max_attempts_checkerAioOrRetryCheckerr   r   r   r   ZRetryIDPCommunicationErrorr   _additional_checkers)r(   r   r#   r#   r$   __init__U   s    
z#AioStandardRetryConditions.__init__c                    s"   | j |o t| j|I d H S r.   )r1   r/   r   r3   r0   r#   r#   r$   r/   i   s    
z'AioStandardRetryConditions.is_retryableN)r+   r,   r-   r   r4   r/   r#   r#   r#   r$   r   T   s   
r   c                   @   s   e Zd Zdd ZdS )r2   c                    s   t  fdd| jD I d H S )Nc                 3   s   | ]}|  V  qd S r.   )r/   ).0checkerr*   r#   r$   	<genexpr>s   s    z1AioOrRetryChecker.is_retryable.<locals>.<genexpr>)r   Z	_checkersr0   r#   r7   r$   r/   r   s    zAioOrRetryChecker.is_retryableN)r+   r,   r-   r/   r#   r#   r#   r$   r2   q   s   r2   N)Zbotocore.retries.standardr   r   r   r   r   r   r   r	   r
   r   r   r   r   r   r   Z_helpersr   r   r   r%   r   r   r   r2   r#   r#   r#   r$   <module>   s   D