U
    ^g%i(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!   S/var/www/html/api-medvista/venv/lib/python3.8/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t|| _|| _|| _|| _|| _d | _d S )Nr   )lenAssertionError_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kr&dS |jtkr<| j jr<dS |j| j jkrNdS | j j	d kr^dS | j 	|I d H S )NTF)
rB   attemptsr-   uppermethodsstatus_MIN_SERVER_ERROR_STATUSZretry_all_server_errorsZstatusesZevaluate_response_callback)r#   rG   rH   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k
r^   | jd }Y nX | j|j|jf|j	d|i|j
pi d|jpi I d H }d|j }| ||I d H }|r| jr|  || _| jW S | jj||d	}W np tk
rZ   zP|| jjkr t fd
d| jjD }|s0 d }| jj|d d	}W 5 d   X Y nX | j | t|I d H  qd S )Nr   zAttempt r   z out of rG   )r0   r1   zRetrying after response code: )attemptrH   c                 3  s   | ]}t  |V  qd S r    )
isinstance).0excer!   r$   	<genexpr>   s     z._RequestContext._do_request.<locals>.<genexpr>zRetrying after exception: )rA   r%   rB   rI   r@   
IndexErrorr?   r-   r/   r0   r1   r   rL   rN   rC   r<   rD   Zget_timeout	Exceptionany
exceptionsasynciosleep)r#   rG   paramsrH   Zdebug_messageZ
skip_retryZ
retry_waitZis_exc_validr!   rU   r$   _do_requestj   sN      
"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 k	r| j js| j   d S r    )rD   closedcloser#   rg   rh   ri   r!   r!   r$   	__aexit__   s    z_RequestContext.__aexit__N)F)	r(   r)   r*   rE   rN   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)rR   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  sR   |d k	r|}d }nt ||}d}|| _|| _|p8td| _|pDt | _|| _d S )NFZaiohttp_retry)	r   _client_closedlogging	getLoggerrA   r   rB   rC   )	r#   rv   r:   r;   r<   r   r   clientrj   r!   r!   r$   rE      s    	
zRetryClient.__init__r   rO   c                 C  s   | j S r    )rB   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)rS   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 kr| j }|d kr| j}t| jj|| j||dS )N)r8   r9   r:   r;   r<   )rB   rC   r3   rw   r   rA   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 krd S | js&| jd d S )Nrx   z#Aiohttp retry client was not closed)getattrrx   rA   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*   rE   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   rM   typesr   version_infor   Ztyping_extensionsr   r.   rn   Loggerr6   r4   r,   r3   rt   ru   r!   r!   r!   r$   <module>   s4   (
e