
    pge                         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 ddlmZ ddZddZd Zd Z G d	 d
e          Z G d de          Z G d de          Z G d de          ZdS )    )ChecksumErrorCRC32CheckerExceptionRaiserHTTPStatusCodeCheckerMaxAttemptsDecoratorMultiCheckerRetryHandlerServiceErrorCodeChecker_extract_retryable_exceptioncrc32create_retry_action_from_configlogger   )resolve_awaitableNc                 h    t          | |          }t          | |          }t          ||          S )N)operation_name)checkeraction) create_checker_from_retry_configr   AioRetryHandler)configr   r   r   s       8lib/python3.11/site-packages/aiobotocore/retryhandler.pycreate_retry_handlerr      sK    .~  G -~  F 76::::    c                    g }d }g }d| v r| d                              dg           }| d         d         }|D ]R}||         }|                    t          |                     t          |          }||                    |           S|||                      |          g| |         d         }	|	D ]V}|                    t          |	|                              t          |	|                   }||                    |           Wt          |          dk    rt          |d         |          S t          |          }
t          |
|t          |                    S )N__default__policiesmax_attemptsr   r   )r   )r   retryable_exceptions)	getappend_create_single_checkerr   extendlenAioMaxAttemptsDecoratorAioMultiCheckertuple)r   r   checkersr   r   r   keycurrent_configretry_exceptionoperation_policiesmulti_checkers              r   r   r      s   HL-(,,Z<<m,^< 	= 	=C%c]NOO2>BBCCC:>JJO*$++O<<<!fjj&@&@&L#N3J?% 	= 	=COO23Ec3JKKLLL:"3' O *$++O<<<
8}}&x{NNNN'11&%!&';!<!<
 
 
 	
r   c                     d| d         v rt          | d         d                   S d| d         v rt                      S d S )Nresponseapplies_whensocket_errors)_create_single_response_checkerr   )r   s    r   r"   r"   ?   sW    VN+++.>":.
 
 	
 
F>2	2	2    
3	2r   c                     d| v rt          | d         | d                   }nEd| v rt          | d                   }n*d| v rt          | d                   }nt          d          |S )Nservice_error_codehttp_status_code)status_code
error_code)r6   	crc32body)headerzUnknown retry policy)r
   r   AioCRC32Checker
ValueError)r/   r   s     r   r2   r2   H   s    x'') !34 45
 
 
 
x	'	'' !34
 
 
 
	 	 !+)>??? /000Nr   c                       e Zd Zd Zd ZdS )r   c                 |  K   |||d}t          | j        t                    r8|d         d                             d          }|                    d|i           t           | j        d
i |           d{V r-|                     |          }t          j        d|           |S t          j        d	           dS )zHandler for a retry.

        Intended to be hooked up to an event handler (hence the **kwargs),
        this will process retries appropriately.

        )attempt_numberr/   caught_exceptionrequest_dictcontextretriesretries_contextN)attemptszRetry needed, action of: %szNo retry needed. )	
isinstance_checkerr   r    updater   _actionr   debug)selfrD   r/   r?   kwargschecker_kwargsrC   results           r   _callzAioRetryHandler._call[   s       '  0
 

 dm%9:: 	H$^4Y?CCINNO!!#4o"FGGG"=4=#B#B>#B#BCCCCCCCC 	\\8\44FL6???M'(((((r   c                      | j         |i |S NrO   rK   argsrL   s      r   __call__zAioRetryHandler.__call__q       tz4*6***r   N__name__
__module____qualname__rO   rU   rE   r   r   r   r   Z   s2        ) ) ),+ + + + +r   r   c                        e Zd Zd Zd Zd ZdS )r%   c                 &  K   |r,t          |                    dd          | j                  |d<   |                     |||           d {V }|rA|| j        k    r4|d|d         v rd|d         d         d<   t	          j        d|           dS |S dS )	Nmaxr   ResponseMetadatar   TMaxAttemptsReachedz0Reached the maximum number of retry attempts: %sF)r]   r    _max_attempts_should_retryr   rJ   )rK   r>   r/   r?   rC   should_retrys         r   rO   zAioMaxAttemptsDecorator._callv   s        	%(##E1--t/A& &OE" "//H&6
 
 
 
 
 
 
 
  	!333',>(1+,M,M  QK 23, F"   u##5r   c                      | j         |i |S rQ   rR   rS   s      r   rU   z AioMaxAttemptsDecorator.__call__   rV   r   c                 2  K   | j         re|| j        k     rZ	 t          |                     |||                     d {V S # | j         $ r"}t	          j        d|d           Y d }~dS d }~ww xY wt          |                     |||                     d {V S )Nz,retry needed, retryable exception caught: %sT)exc_info)_retryable_exceptionsr`   r   rG   r   rJ   )rK   r>   r/   r?   es        r   ra   z%AioMaxAttemptsDecorator._should_retry   s     % 	.4;M*M*M
.MM.(<LMM         -   B!   
 ttttt +nh8HII        s   )A   
A,
A''A,N)rX   rY   rZ   rO   rU   ra   rE   r   r   r%   r%   u   sA          8+ + +    r   r%   c                       e Zd Zd Zd ZdS )r&   c                 j   K   | j         D ](}t           ||||                     d {V }|r|c S )dS )NF)	_checkersr   )rK   r>   r/   r?   r   checker_responses         r   rO   zAioMultiChecker._call   sw      ~ 	( 	(G%62BCC& &               (''''(ur   c                      | j         |i |S rQ   rR   rS   s      r   rU   zAioMultiChecker.__call__   rV   r   NrW   rE   r   r   r&   r&      s2          + + + + +r   r&   c                        e Zd Zd Zd Zd ZdS )r:   c                    K   ||                      ||           d {V S ||                     ||          S t          d          )Nz,Both response and caught_exception are None.)_check_response_check_caught_exceptionr;   )rK   r>   r/   r?   s       r   rO   zAioCRC32Checker._call   si      --nhGGGGGGGGG)// 0   KLLLr   c                      | j         |i |S rQ   rR   rS   s      r   rU   zAioCRC32Checker.__call__   rV   r   c                   K   |d         }|j                             | j                  }|t          j        d| j                   d S t          |d         j         d {V           dz  }|t          |          k    sBt          j        dt          |          |           t          dt          |          |          d S )Nr   z?crc32 check skipped, the %s header is not in the http response.l    z>retry needed: crc32 check failed, expected != actual: %s != %sr   )checksum_typeexpected_checksumactual_checksum)	headersr    _header_namer   rJ   r   contentintr   )rK   r>   r/   http_responseexpected_crcactual_crc32s         r   ro   zAioCRC32Checker._check_response   s       $,001BCCL(!     !x{':!:!:!:!:!:!:;;jHL3|#4#444%% 	   $")&),&7&7$0    54r   N)rX   rY   rZ   rO   rU   ro   rE   r   r   r:   r:      sD        M M M+ + +    r   r:   rQ   )botocore.retryhandlerr   r   r   r   r   r   r	   r
   r   r   r   r   _helpersr   r   r   r"   r2   r   r%   r&   r:   rE   r   r   <module>r      s                              ( ' ' ' ' '; ; ; ;
 
 
 
D! ! !  $+ + + + +l + + +62 2 2 2 22 2 2 2j+ + + + +l + + +$ $ $ $ $l $ $ $ $ $r   