o
    Rhw                     @   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   P/home/air/sanwanet/backup_V2/venv/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   )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   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  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,   egiveup_resultr-   r.   r/   r<   giveupr1   r2   r3   r4   r5   r6   raise_on_giveupr   r8   r9   r   r   r:      sZ   


!zretry_exception.<locals>.retry)r   r   r   r   r   r   )r   r8   r<   r3   r2   r1   r@   r6   r4   r5   rA   r9   r:   r   r?   r   retry_exceptiont   s   $9rB   )r$   r   r   r   backoff._commonr   r   r   r   r   r   r;   rB   r   r   r   r   <module>   s   
L