a
    mJh(0                     @  sn  d dl mZ d dlZd dlZd dlZd dlmZ d dlmZ d dl	m
Z
mZmZmZmZmZmZmZ d dlmZmZmZ d dlmZ d dlmZ d	d
lmZmZ dZe
rd dlm Z  ej!dkrd dl	m"Z" nd dl#m"Z" G dd de"Z$eeef Z%ee%ee% ee%df f Z&ee$ej'f Z(edee f Z)eG dd dZ*G dd dZ+dddddZ,G dd dZ-dS )    )annotationsN)abstractmethod)	dataclass)TYPE_CHECKINGAny	AwaitableCallable	GeneratorListTupleUnion)ClientResponseClientSessionhdrs)StrOrURL)URL   )ExponentialRetryRetryOptionsBasei  )TracebackType)      )Protocolc                   @  sX   e Zd ZdZedddddddZeddddddd	Zedddddd
dZdS )_Loggerz8_Logger defines which methods logger object should have.strr   None)msgargskwargsreturnc                 O  s   d S N selfr   r   r   r!   r!   F/var/www/shaz/venv/lib/python3.9/site-packages/aiohttp_retry/client.pydebug'   s    z_Logger.debugc                 O  s   d S r    r!   r"   r!   r!   r$   warning+   s    z_Logger.warningc                 O  s   d S r    r!   r"   r!   r!   r$   	exception/   s    z_Logger.exceptionN)__name__
__module____qualname____doc__r   r%   r&   r'   r!   r!   r!   r$   r   $   s   r   .c                   @  sB   e Zd ZU ded< ded< dZded< dZded< dZded	< dS )
RequestParamsr   method_RAW_URL_TYPEurlNzdict[str, Any] | Noneheaderstrace_request_ctxr   )r(   r)   r*   __annotations__r0   r1   r   r!   r!   r!   r$   r,   <   s
   
r,   c                   @  sv   e Zd Zddddddddd	d
ZddddddZddddZddddZddddZdddddddZdS ) _RequestContextFRequestFunclist[RequestParams]_LoggerTyper   boolr   )request_funcparams_listloggerretry_optionsraise_for_statusr   c                 C  s8   t |dksJ || _|| _|| _|| _|| _d | _d S )Nr   )len_request_func_params_list_logger_retry_options_raise_for_status	_response)r#   r8   r9   r:   r;   r<   r!   r!   r$   __init__F   s    z_RequestContext.__init__intr   )current_attemptresponser   c                   sp   || j jkrdS |j | j jvr&dS |jtkr<| j jr<dS |j| j jv rNdS | j j	d u r^dS | j 	|I d H S )NTF)
rA   attemptsr-   uppermethodsstatus_MIN_SERVER_ERROR_STATUSZretry_all_server_errorsZstatusesZevaluate_response_callback)r#   rF   rG   r!   r!   r$   _is_skip_retryX   s    z_RequestContext._is_skip_retryr   c              
     s~  d}| j d|d  d| jj  |d7 }zz| j|d  }W n ty\   | jd }Y n0 | j|j|jf|j	d|i|j
p~i d|jpi I d H }d|j }| ||I d H }|r| jr|  || _| jW S | jj||d	}W nr tyZ   zX|| jjkr
 t fd
d| jjD }|s, d }| jj|d d	}W Y d   n
d   0 0 | j | t|I d H  qd S )Nr   zAttempt r   z out of rF   )r0   r1   zRetrying after response code: )attemptrG   c                 3  s   | ]}t  |V  qd S r    )
isinstance).0excer!   r$   	<genexpr>       z._RequestContext._do_request.<locals>.<genexpr>zRetrying after exception: )r@   r%   rA   rH   r?   
IndexErrorr>   r-   r/   r0   r1   r   rK   rM   rB   r<   rC   Zget_timeout	Exceptionany
exceptionsasynciosleep)r#   rF   paramsrG   Zdebug_messageZ
skip_retryZ
retry_waitZis_exc_validr!   rT   r$   _do_requestj   sL     
&z_RequestContext._do_requestz$Generator[Any, None, ClientResponse]c                 C  s   |    S r    )
__aenter__	__await__r#   r!   r!   r$   ra      s    z_RequestContext.__await__c                   s   |   I d H S r    )r_   rb   r!   r!   r$   r`      s    z_RequestContext.__aenter__type[BaseException] | NoneBaseException | NoneTracebackType | Noneexc_typeexc_valexc_tbr   c                   s    | j d ur| j js| j   d S r    )rC   closedcloser#   rg   rh   ri   r!   r!   r$   	__aexit__   s    z_RequestContext.__aexit__N)F)	r(   r)   r*   rD   rM   r_   ra   r`   rm   r!   r!   r!   r$   r3   E   s    0r3   	_URL_TYPEztuple[StrOrURL, ...])r/   r   c                 C  s`   t | ttfr| fS t | tr(t| }nt | tr8| }nd}t|t|dkr\d}t||S )Nz*you can pass url only by str or list/tupler   z>you can pass url by str or list/tuple with attempts count size)rQ   r   YARL_URLlisttuple
ValueErrorr=   )r/   urlsr   r!   r!   r$   _url_to_urls   s    


rt   c                	   @  s  e Zd Zd;dddddddd	d
dZeddddZd<dddddddZd=dddddddddZd>ddddddddZd?dddddddd Z	d@ddddddd!d"Z
dAddddddd#d$ZdBddddddd%d&ZdCddddddd'd(ZdDddddddd)d*Zddd+d,ZdEdddddddd-d.ZdFdddddd/d0Zd dd1d2Zd3d4d5dd6d7d8Zddd9d:ZdS )GRetryClientNFzClientSession | Nonez_LoggerType | NonezRetryOptionsBase | Noner7   r   r   )client_sessionr:   r;   r<   r   r   r   c           	      O  sV   |d ur|}d }nt |i |}d}|| _|| _|p<td| _|pHt | _|| _d S )NFZaiohttp_retry)	r   _client_closedlogging	getLoggerr@   r   rA   rB   )	r#   rv   r:   r;   r<   r   r   clientrj   r!   r!   r$   rD      s    	zRetryClient.__init__r   rN   c                 C  s   | j S r    )rA   rb   r!   r!   r$   r;      s    zRetryClient.retry_optionsr5   zbool | Noner3   )r9   r;   r<   r   c                 C  s   | j |||dS )Nr9   r;   r<   )_make_requestsr#   r9   r;   r<   r!   r!   r$   requests   s
    zRetryClient.requestsr   r   )r-   r/   r;   r<   r   r   c                 K  s   | j f ||||d|S N)r-   r/   r;   r<   )_make_request)r#   r-   r/   r;   r<   r   r!   r!   r$   request   s    zRetryClient.requestrn   )r/   r;   r<   r   r   c                 K  s   | j f tj|||d|S r   )r   r   ZMETH_GETr#   r/   r;   r<   r   r!   r!   r$   get   s    zRetryClient.getc                 K  s   | j f tj|||d|S r   )r   r   ZMETH_OPTIONSr   r!   r!   r$   options  s    zRetryClient.optionsc                 K  s   | j f tj|||d|S r   )r   r   Z	METH_HEADr   r!   r!   r$   head  s    zRetryClient.headc                 K  s   | j f tj|||d|S r   )r   r   Z	METH_POSTr   r!   r!   r$   post"  s    zRetryClient.postc                 K  s   | j f tj|||d|S r   )r   r   ZMETH_PUTr   r!   r!   r$   put1  s    zRetryClient.putc                 K  s   | j f tj|||d|S r   )r   r   Z
METH_PATCHr   r!   r!   r$   patch@  s    zRetryClient.patchc                 K  s   | j f tj|||d|S r   )r   r   ZMETH_DELETEr   r!   r!   r$   deleteO  s    zRetryClient.deletec                   s   | j  I d H  d| _d S )NT)rw   rk   rx   rb   r!   r!   r$   rk   ^  s    zRetryClient.closec                   s,   t |} fdd|D }| j|||dS )Nc              
     s.   g | ]&}t | d i  dd dqS )r0   r1   N)r-   r/   r0   r1   r   )r,   pop)rR   r/   r   r-   r!   r$   
<listcomp>k  s   

z-RetryClient._make_request.<locals>.<listcomp>r|   )rt   r}   )r#   r-   r/   r;   r<   r   Zurl_listr9   r!   r   r$   r   b  s    zRetryClient._make_requestc                 C  s4   |d u r| j }|d u r| j}t| jj|| j||dS )N)r8   r9   r:   r;   r<   )rA   rB   r3   rw   r   r@   r~   r!   r!   r$   r}   |  s    zRetryClient._make_requestsc                   s   | S r    r!   rb   r!   r!   r$   r`     s    zRetryClient.__aenter__rc   rd   re   rf   c                   s   |   I d H  d S r    )rk   rl   r!   r!   r$   rm     s    zRetryClient.__aexit__c                 C  s*   t | dd d u rd S | js&| jd d S )Nrx   z#Aiohttp retry client was not closed)getattrrx   r@   r&   rb   r!   r!   r$   __del__  s    zRetryClient.__del__)NNNF)NN)NN)NN)NN)NN)NN)NN)NN)NN)NN)NN)r(   r)   r*   rD   propertyr;   r   r   r   r   r   r   r   r   r   rk   r   r}   r`   rm   r   r!   r!   r!   r$   ru      sX                             ru   ).
__future__r   r\   ry   sysabcr   dataclassesr   typingr   r   r   r   r	   r
   r   r   Zaiohttpr   r   r   Zaiohttp.typedefsr   Zyarlr   ro   r;   r   r   rL   typesr   version_infor   typing_extensionsr   r.   rn   Loggerr6   r4   r,   r3   rt   ru   r!   r!   r!   r$   <module>   s4   (
e