o
    iy                  	   @   s   d dl mZ d dlmZ d dlmZ d dlZd dlmZ d dl	Z
G dd deZdd	 d fd
e
jeee
je
jeef  f de
je
jgef dede
jfddZddd	 fddZdS )    )absolute_importwraps)repeatN)sleepc                   @   s   e Zd ZdS )
RetryErrorN)__name__
__module____qualname__ r   r   P/home/ubuntu/.local/lib/python3.10/site-packages/ddtrace/internal/utils/retry.pyr   
   s    r   c                 C      | d u S Nr   resultr   r   r   <lambda>       r   afteruntilinitial_waitreturnc                    s    fdd}|S )Nc                    s   t   fdd}|S )Nc                     s   t  t ttfrt n }d }|D ].}z	| i |}W n ty6 } z
|}|}W Y d }~nd }~ww |r?|  S t | qz	| i |}W n tyc } z
|}|}W Y d }~nd }~ww |rj|S |d urp|t|r   )r   
isinstanceintfloatr   	Exceptionr   )argskwargs
after_iter	exceptionsr   e)r   fr   r   r   r   retry_wrapped   s4   
z5retry.<locals>.retry_decorator.<locals>.retry_wrappedr   )r!   r"   r   r   r   )r!   r   retry_decorator   s    zretry.<locals>.retry_decoratorr   )r   r   r   r$   r   r#   r   retry   s   $r%   g      ?c                 C   r   r   r   r   r   r   r   r   :   r   c                    s"   t  fddt| d D |dS )Nc                    s    g | ]}t d  d|  qS )r   gS?)randomuniform).0ir   r   r   
<listcomp>=   s     z1fibonacci_backoff_with_jitter.<locals>.<listcomp>   )r   r   )r%   range)attemptsr   r   r   r*   r   fibonacci_backoff_with_jitter:   s   r/   )
__future__r   	functoolsr   	itertoolsr   r&   timer   typingtr   r   Unionr   r   IterableCallableAnyboolr%   r/   r   r   r   r   <module>   s&    
,