a
    |f0                     @   sj  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 d dl	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mZ d dlmZ d dlmZ d	d
lmZ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*e%eedf dddZ+G dd dZ,dS )    N)abstractmethod)	dataclass)TracebackType)
Any	AwaitableCallableDict	GeneratorListOptionalTupleTypeUnion)ClientResponseClientSessionhdrs)StrOrURL)URL   )ExponentialRetryRetryOptionsBase)      )Protocolc                   @   sX   e Zd ZdZeeeeddddZeeeeddddZeeeedddd	Z	dS )
_LoggerzA
    _Logger defines which methods logger object should have
    N)msgargskwargsreturnc                 O   s   d S N selfr   r   r   r    r    ND:\Projects\storyit_web\backend\venv\Lib\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.exception)
__name__
__module____qualname____doc__r   strr   r$   r%   r&   r    r    r    r#   r       s   r   .c                   @   sf   e Zd ZU eed< eed< dZeeee	f  ed< dZ
eeee	f  ed< dZeeee	f  ed< dS )RequestParamsmethodurlNheaderstrace_request_ctxr   )r'   r(   r)   r+   __annotations___RAW_URL_TYPEr/   r   r   r   r0   r   r    r    r    r#   r,   7   s
   
r,   c                   @   s   e Zd Zdeee eeeddddZ	e
edddZed	d
dZeedef d	ddZed	ddZeee  ee ee ddddZdS )_RequestContextFN)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"   r4   r5   r6   r7   r8   r    r    r#   __init__A   s    z_RequestContext.__init__)coder   c                 C   s    |dkr| j jrdS || j jvS )Ni  F)r=   Zretry_all_server_errorsZstatuses)r"   rA   r    r    r#   _is_status_code_okS   s    z"_RequestContext._is_status_code_okr   c              
      s   d}| j d|d  d| jj  |d7 }z8z| j|d  }W n ty^   | jd }Y n0 | j|j|jf|j	d|i|j
pi d|jpi I d H }| |js|| jjkr@| jr|  | jjd urz| j|I d H }W n$ ty
   | j d d	}Y n0 nd
}|s&|| jjkr2|| _|W S | j d n| j d|j  | jj||d}W n ty   zh|| jjkr t fdd| jjD }|s | j dt   | jj|d d}W Y d   n
d   0 0 t|I d H  qd S )Nr   zAttempt r   z out of current_attempt)r/   r0   z/while evaluating response an exception occurredFTz/Retrying after evaluate response callback checkzRetrying after response code: )attemptresponsec                    s   g | ]}t  |qS r    )
isinstance).0excer    r#   
<listcomp>       z/_RequestContext._do_request.<locals>.<listcomp>zRetrying after exception: )r<   r$   r=   Zattemptsr;   
IndexErrorr:   r-   r.   r/   r0   r   rB   statusr>   r8   Zevaluate_response_callback	Exceptionr&   r?   Zget_timeoutany
exceptionsreprasynciosleep)r"   rE   paramsrG   Zis_response_correctZ
retry_waitZis_exc_validr    rK   r#   _do_requestX   sZ     &z_RequestContext._do_requestc                 C   s   |    S r   )
__aenter__	__await__r"   r    r    r#   rZ      s    z_RequestContext.__await__c                    s   |   I d H S r   )rX   r[   r    r    r#   rY      s    z_RequestContext.__aenter__exc_typeexc_valexc_tbr   c                    s    | j d ur| j js| j   d S r   )r?   closedcloser"   r]   r^   r_   r    r    r#   	__aexit__   s    
z_RequestContext.__aexit__)F)r'   r(   r)   RequestFuncr
   r,   _LoggerTyper   boolr@   intrB   r   rX   r	   r   rZ   rY   r   r   BaseExceptionr   rc   r    r    r    r#   r3   @   s$    9
r3   )r.   r   c                 C   s^   t | tst | tr| fS t | tr.t| }nt | tr>| }ntdt|dkrZtd|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)rH   r+   YARL_URLlisttuple
ValueErrorr9   )r.   urlsr    r    r#   _url_to_urls   s    


rn   c                	   @   s  e Zd Zd+ee ee ee eeeddddZ	e
edddZd,ee ee ee ed	d
dZd-eeee ee eedddZd.eee ee eedddZd/eee ee eedddZd0eee ee eedddZd1eee ee eedddZd2eee ee eedddZd3eee ee eedddZd4eee ee eedddZddddZd5eeee ee eedd d!Zd6ee ee ee ed	d"d#Zd dd$d%Zeee   ee  ee! dd&d'd(Z"ddd)d*Z#dS )7RetryClientNF)client_sessionr6   r7   r8   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   r=   r>   )	r"   rp   r6   r7   r8   r   r   clientr`   r    r    r#   r@      s    	zRetryClient.__init__rC   c                 C   s   | j S r   )r=   r[   r    r    r#   r7      s    zRetryClient.retry_options)r5   r7   r8   r   c                 C   s   | j |||dS )Nr5   r7   r8   )_make_requestsr"   r5   r7   r8   r    r    r#   requests   s
    zRetryClient.requests)r-   r.   r7   r8   r   r   c                 K   s   | j f ||||d|S N)r-   r.   r7   r8   )_make_request)r"   r-   r.   r7   r8   r   r    r    r#   request   s    zRetryClient.request)r.   r7   r8   r   r   c                 K   s   | j f tj|||d|S rz   )r{   r   ZMETH_GETr"   r.   r7   r8   r   r    r    r#   get   s    zRetryClient.getc                 K   s   | j f tj|||d|S rz   )r{   r   ZMETH_OPTIONSr}   r    r    r#   options   s    zRetryClient.optionsc                 K   s   | j f tj|||d|S rz   )r{   r   Z	METH_HEADr}   r    r    r#   head	  s    zRetryClient.headc                 K   s   | j f tj|||d|S rz   )r{   r   Z	METH_POSTr}   r    r    r#   post  s    zRetryClient.postc                 K   s   | j f tj|||d|S rz   )r{   r   ZMETH_PUTr}   r    r    r#   put&  s    zRetryClient.putc                 K   s   | j f tj|||d|S rz   )r{   r   Z
METH_PATCHr}   r    r    r#   patch5  s    zRetryClient.patchc                 K   s   | j f tj|||d|S rz   )r{   r   ZMETH_DELETEr}   r    r    r#   deleteD  s    zRetryClient.deletec                    s   | j  I d H  d| _d S )NT)rq   ra   rr   r[   r    r    r#   ra   S  s    zRetryClient.closec                    s,   t |} fdd|D }| j|||dS )Nc              
      s.   g | ]&}t | d i  dd dqS )r/   r0   N)r-   r.   r/   r0   r   )r,   pop)rI   r.   r   r-   r    r#   rM   `  s   

z-RetryClient._make_request.<locals>.<listcomp>rv   )rn   rw   )r"   r-   r.   r7   r8   r   Zurl_listr5   r    r   r#   r{   W  s    zRetryClient._make_requestc                 C   s4   |d u r| j }|d u r| j}t| jj|| j||dS )N)r4   r5   r6   r7   r8   )r=   r>   r3   rq   r|   r<   rx   r    r    r#   rw   n  s    zRetryClient._make_requestsc                    s   | S r   r    r[   r    r    r#   rY     s    zRetryClient.__aenter__r\   c                    s   |   I d H  d S r   )ra   rb   r    r    r#   rc     s    zRetryClient.__aexit__c                 C   s*   t | dd d u rd S | js&| jd d S )Nrr   z#Aiohttp retry client was not closed)getattrrr   r<   r%   r[   r    r    r#   __del__  s    zRetryClient.__del__)NNNF)NN)NN)NN)NN)NN)NN)NN)NN)NN)NN)NN)$r'   r(   r)   r   r   re   r   rf   r   r@   propertyr7   r
   r,   r3   ry   r+   r   r|   	_URL_TYPEr~   r   r   r   r   r   r   ra   r{   rw   rY   r   rh   r   rc   r   r    r    r    r#   ro      s                             
ro   )-rU   rs   sysabcr   dataclassesr   typesr   typingr   r   r   r   r	   r
   r   r   r   r   Zaiohttpr   r   r   Zaiohttp.typedefsr   Zyarlr   ri   r7   r   r   version_infor   typing_extensionsr   r2   r   Loggerre   rd   r,   r3   rn   ro   r    r    r    r#   <module>   s.   0
b