a
    !fw                     @   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 d S )Nc                     s    | i |S )N )argskwargscoro_or_funcr   O/var/www/html/python-backend/venv/lib/python3.9/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>       z&_ensure_coroutines.<locals>.<listcomp>r   )Zcoros_or_funcsr   r   r   _ensure_coroutines   s    r   c          	         s6   |||||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 r4J tsBJ t 	f
dd}
|
S )Nc                     s\  t }t }d}tj }t	}|d7 }ttj | }| |||d}| i |I d H }	|	r4||k}
|d uo||k}|
s|rtfi |d|	iI d H  qXzt||	 ||}W n6 ty   tfi |d|	iI d H  Y qXY n0 tfi ||	|dI d H  t	
|I d H  q(q(tfi |d|	iI d H  qXq(|	S )Nr      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   sJ    



zretry_predicate.<locals>.retry)r   r   r   r   r   )r   r8   r7   r3   r2   r1   r6   r4   r5   r9   r:   r   r0   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  yt }
 z|
I d H }||k}|d uo||k}|s|s|rtfi |d|
iI d H  rւ W Y d }
~
d S zt||
||}W n6 ty.   tfi |d|
iI d H  |
Y n0 tfi |||
dI d H  t	
|I d H  W Y d }
~
q(d }
~
0 0 tfi |I d H  |	S q(d S )Nr   r    r   	exception)r"   r<   r#   )r   r   r)   r*   r   r+   r"   r   r   r,   eZgiveup_resultr-   r.   r/   r<   giveupr1   r2   r3   r4   r5   r6   raise_on_giveupr   r8   r9   r   r   r:      sN    



&zretry_exception.<locals>.retry)r   r   r   r   r   r   )r   r8   r<   r3   r2   r1   r?   r6   r4   r5   r@   r9   r:   r   r>   r   retry_exceptiont   s    $9rA   )r$   r   r   r   Zbackoff._commonr   r   r   r   r   r   r;   rA   r   r   r   r   <module>   s   
L