o
    4g(0                     @  sh  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
rZd dlm Z  ej!dkrfd 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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                   @  s:   e Zd ZdZedd	d
ZedddZedddZdS )_Loggerz8_Logger defines which methods logger object should have.msgstrargsr   kwargsreturnNonec                 O     d S N selfr   r   r   r"   r"   `/var/www/html/Testing_prj/Navya-Bakers/venv/lib/python3.10/site-packages/aiohttp_retry/client.pydebug'      z_Logger.debugc                 O  r    r!   r"   r#   r"   r"   r%   warning+   r'   z_Logger.warningc                 O  r    r!   r"   r#   r"   r"   r%   	exception/   r'   z_Logger.exceptionN)r   r   r   r   r   r   r   r   )__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__r2   r3   r   r"   r"   r"   r%   r.   <   s   
 r.   c                   @  sL   e Zd Z	d&d'ddZd(ddZd)ddZd*ddZd)ddZd+d#d$Zd%S ),_RequestContextFrequest_funcRequestFuncparams_listlist[RequestParams]logger_LoggerTyperetry_optionsr   raise_for_statusboolr   r   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$   r6   r8   r:   r<   r=   r"   r"   r%   __init__F   s   
z_RequestContext.__init__current_attemptintresponser   c                   sr   || 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 r(dS | j j	d u r0dS | j 	|I d H S )NTF)
rC   attemptsr/   uppermethodsstatus_MIN_SERVER_ERROR_STATUSretry_all_server_errorsstatusesevaluate_response_callback)r$   rG   rI   r"   r"   r%   _is_skip_retryX   s   z_RequestContext._is_skip_retryc              
     sx  d}	 | j d|d  d| jj  |d7 }z^z	| j|d  }W n ty0   | jd }Y nw | j|j|jf|j	d|i|j
pAi d|jpHi I d H }d	|j }| ||I d H }|rm| jrf|  || _| jW S | jj||d
}W n6 ty   z*|| jjkr t fdd| jjD }|s d }| jj|d d
}W Y d   nd   ww | j | t|I d H  q)Nr   TzAttempt r   z out of rG   )r2   r3   zRetrying after response code: )attemptrI   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: )rB   r&   rC   rJ   rA   
IndexErrorr@   r/   r1   r2   r3   r   rM   rR   rD   r=   rE   get_timeout	Exceptionany
exceptionsasynciosleep)r$   rG   paramsrI   debug_message
skip_retry
retry_waitis_exc_validr"   rX   r%   _do_requestj   sX    
z_RequestContext._do_request$Generator[Any, None, ClientResponse]c                 C  s   |    S r!   )
__aenter__	__await__r$   r"   r"   r%   rj      s   z_RequestContext.__await__c                   s   |   I d H S r!   )rg   rk   r"   r"   r%   ri      s   z_RequestContext.__aenter__exc_typetype[BaseException] | Noneexc_valBaseException | Noneexc_tbTracebackType | Nonec                   s*   | j d ur| j js| j   d S d S d S r!   )rE   closedcloser$   rl   rn   rp   r"   r"   r%   	__aexit__   s   z_RequestContext.__aexit__N)F)r6   r7   r8   r9   r:   r;   r<   r   r=   r>   r   r   )rG   rH   rI   r   r   r>   )r   r   )r   rh   rl   rm   rn   ro   rp   rq   r   r   )	r*   r+   r,   rF   rR   rg   rj   ri   ru   r"   r"   r"   r%   r5   E   s    


0
r5   r1   	_URL_TYPEr   tuple[StrOrURL, ...]c                 C  s`   t | ttfr
| fS t | trt| }nt | tr| }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)rU   r   YARL_URLlisttuple
ValueErrorr?   )r1   urlsr   r"   r"   r%   _url_to_urls   s   


r~   c                   @  s  e Zd Z				dBdCddZedDddZ		dEdFddZ		dEdGdd Z		dEdHd"d#Z		dEdHd$d%Z			dEdHd&d'Z
		dEdHd(d)Z		dEdHd*d+Z		dEdHd,d-Z		dEdHd.d/ZdId0d1Z		dEdJd2d3Z		dEdFd4d5ZdKd6d7ZdLd>d?ZdId@dAZdS )MRetryClientNFclient_sessionClientSession | Noner:   _LoggerType | Noner<   RetryOptionsBase | Noner=   r>   r   r   r   r   r   c           	      O  sV   |d ur	|}d }n	t |i |}d}|| _|| _|ptd| _|p$t | _|| _d S )NFaiohttp_retry)	r   _client_closedlogging	getLoggerrB   r   rC   rD   )	r$   r   r:   r<   r=   r   r   clientrr   r"   r"   r%   rF      s   	
zRetryClient.__init__r   c                 C  s   | j S r!   )rC   rk   r"   r"   r%   r<      s   zRetryClient.retry_optionsr8   r9   bool | Noner5   c                 C  s   | j |||dS )Nr8   r<   r=   )_make_requestsr$   r8   r<   r=   r"   r"   r%   requests   s
   zRetryClient.requestsr/   r   r1   r   c                 K  s   | j d||||d|S N)r/   r1   r<   r=   r"   )_make_request)r$   r/   r1   r<   r=   r   r"   r"   r%   request   s   zRetryClient.requestrw   c                 K     | j dtj|||d|S r   )r   r   METH_GETr$   r1   r<   r=   r   r"   r"   r%   get      zRetryClient.getc                 K  r   r   )r   r   METH_OPTIONSr   r"   r"   r%   options  r   zRetryClient.optionsc                 K  r   r   )r   r   	METH_HEADr   r"   r"   r%   head  r   zRetryClient.headc                 K  r   r   )r   r   	METH_POSTr   r"   r"   r%   post"  r   zRetryClient.postc                 K  r   r   )r   r   METH_PUTr   r"   r"   r%   put1  r   zRetryClient.putc                 K  r   r   )r   r   
METH_PATCHr   r"   r"   r%   patch@  r   zRetryClient.patchc                 K  r   r   )r   r   METH_DELETEr   r"   r"   r%   deleteO  r   zRetryClient.deletec                   s   | j  I d H  d| _d S )NT)r   rs   r   rk   r"   r"   r%   rs   ^  s   
zRetryClient.closec                   s,   t |} fdd|D }| j|||dS )Nc              
     s.   g | ]}t | d i  dd dqS )r2   r3   N)r/   r1   r2   r3   r   )r.   pop)rV   r1   r   r/   r"   r%   
<listcomp>k  s    

z-RetryClient._make_request.<locals>.<listcomp>r   )r~   r   )r$   r/   r1   r<   r=   r   url_listr8   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)r6   r8   r:   r<   r=   )rC   rD   r5   r   r   rB   r   r"   r"   r%   r   |  s   zRetryClient._make_requestsc                   s   | S r!   r"   rk   r"   r"   r%   ri     s   zRetryClient.__aenter__rl   rm   rn   ro   rp   rq   c                   s   |   I d H  d S r!   )rs   rt   r"   r"   r%   ru     s   zRetryClient.__aexit__c                 C  s.   t | dd d u r
d S | js| jd d S d S )Nr   z#Aiohttp retry client was not closed)getattrr   rB   r(   rk   r"   r"   r%   __del__  s
   zRetryClient.__del__)NNNF)r   r   r:   r   r<   r   r=   r>   r   r   r   r   r   r   )r   r   )NN)r8   r9   r<   r   r=   r   r   r5   )r/   r   r1   r   r<   r   r=   r   r   r   r   r5   )
r1   rw   r<   r   r=   r   r   r   r   r5   )r   r   )r/   r   r1   rw   r<   r   r=   r   r   r   r   r5   )r   r   rv   )r*   r+   r,   rF   propertyr<   r   r   r   r   r   r   r   r   r   rs   r   r   ri   ru   r   r"   r"   r"   r%   r      sZ    


r   )r1   rw   r   rx   ).
__future__r   r`   r   sysabcr   dataclassesr   typingr   r   r   r   r	   r
   r   r   aiohttpr   r   r   aiohttp.typedefsr   yarlr   ry   r<   r   r   rN   typesr   version_infor   typing_extensionsr   r0   rw   Loggerr;   r7   r.   r5   r~   r   r"   r"   r"   r%   <module>   s6    (

e