U
    .e	                     @   s8   d Z ddlmZ ddlmZmZ ddlmZ dd ZdS )zTasks auto-retry functionality.    )wraps)IgnoreRetry) get_exponential_backoff_intervalc                    s   t |dtdd t |dtdd|dtdi t|dtddt|dtdd|d	td	d
 rtdstj fdd}j| __dS )z7Wrap task's `run` method with auto-retry functionality.autoretry_for dont_autoretry_forretry_kwargsretry_backoffFretry_backoff_maxiX  retry_jitterT	_orig_runc               
      s   zj | |W S  tk
r$    Y n tk
r8    Y n k
rL    Y n  k
r } zrrtttdjjdd< tdrt	dj
d< jf d|i}tdrtd |W 5 d }~X Y nX d S )Ng      ?)ZfactorretriesmaximumZfull_jitterZ	countdownZoverride_max_retriesmax_retriesexc)r   r   r   r   intmaxrequestr   hasattrgetattrr   retrydelattr)argskwargsr   retr   r   r
   r   r   r	   taskr   8/tmp/pip-unpacked-wheel-f4liivr4/celery/app/autoretry.pyrun#   s4    


z$add_autoretry_behaviour.<locals>.runN)	tuplegetr   floatr   r   r   r   r   )r   optionsr   r   r   r   add_autoretry_behaviour   s@    

 


 
r$   N)	__doc__Z
vine.utilsr   Zcelery.exceptionsr   r   Zcelery.utils.timer   r$   r   r   r   r   <module>   s   