o
    iw                     @   sd   d dl Z d dlZd dlZd dl mZ d dlmZmZmZ dd Zdd Z	dd	 Z
d
d Zdd ZdS )    N)	timedelta)_init_wait_gen_maybe_call
_next_waitc                    s(   t  r S t  fdd}|S )Nc                     s    | i |S )N )argskwargscoro_or_funcr   E/home/app/Keep/.python/lib/python3.10/site-packages/backoff/_async.pyf   s   z_ensure_coroutine.<locals>.f)asyncioiscoroutinefunction	functoolswraps)r
   r   r   r	   r   _ensure_coroutine
   s
   
r   c                 C   s   dd | D S )Nc                 S   s   g | ]}t |qS r   )r   ).0r   r   r   r   
<listcomp>   s    z&_ensure_coroutines.<locals>.<listcomp>r   )Zcoros_or_funcsr   r   r   _ensure_coroutines   s   r   c          	         s8   |||||d}| | | D ]	}||I d H  qd S )Ntargetr   r   trieselapsed)update)	handlersr   r   r   r   r   extradetailshandlerr   r   r   _call_handlers   s   
r   c                   sn   t t t trJ t rJ ts!J t 	f
dd}
|
S )Nc                     sV  t }t }d}tj }t	}	 |d7 }ttj | }| |||d}| i |I d H }	|	r||k}
|d uoE||k}|
sJ|r\tfi |d|	iI d H  	 |	S z
t||	 ||}W n ty   tfi |d|	iI d H  Y |	S w tfi ||	|dI d H  t	
|I d H  qtfi |d|	iI d H  	 |	S )Nr   T   r   value)r    waitr   datetimenowr   r   total_secondsr   r   StopIterationr   sleep)r   r   max_tries_valuemax_time_valuer   startr!   r   r   retmax_tries_exceededmax_time_exceededseconds
jittermax_time	max_tries
on_backoff	on_giveup
on_success	predicater   wait_genwait_gen_kwargsr   r   retry7   sT   


zretry_predicate.<locals>.retry)r   r   r   r   r   )r   r7   r6   r2   r1   r0   r5   r3   r4   r8   r9   r   r/   r   retry_predicate(   s    9r:   c       	            sl   t t t ttrJ trJ t	 	
fdd}|S )Nc                     s  t }t }d}tj }t
}	 |d7 }ttj | }	| |||d}z	| i |I d H }	W n  y }
 zs|
I d H }||k}|d uoR||k}|sY|sY|rrtfi |d|
iI d H  rk W Y d }
~
d S z
t||
||}W n ty   tfi |d|
iI d H  |
w tfi |||
dI d H  t	
|I d H  W Y d }
~
nd }
~
ww tfi |I d H  |	S q)Nr   Tr   r   	exception)r!   r;   r"   )r   r   r(   r)   r   r*   r!   r   r   r+   eZgiveup_resultr,   r-   r.   r;   giveupr0   r1   r2   r3   r4   r5   raise_on_giveupr   r7   r8   r   r   r9      sZ   


!zretry_exception.<locals>.retry)r   r   r   r   r   r   )r   r7   r;   r2   r1   r0   r>   r5   r3   r4   r?   r8   r9   r   r=   r   retry_exceptiont   s   $9r@   )r#   r   r   r   Zbackoff._commonr   r   r   r   r   r   r:   r@   r   r   r   r   <module>   s   
L