U
    d                     @   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 |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 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
r } zhrdt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 )N)ZfactorretriesmaximumZfull_jitterZ	countdownZoverride_max_retriesmax_retriesexc)r   r   r   r   requestr   hasattrgetattrr   retrydelattr)argskwargsr   retr   r	   r
   r   r   taskr   8/tmp/pip-unpacked-wheel-mu1yl971/celery/app/autoretry.pyrun   s0    


z$add_autoretry_behaviour.<locals>.runN)tuplegetr   intr   r   r   r   )r   optionsr   r   r   r   add_autoretry_behaviour   s6    
 


 
r!   N)	__doc__Z
vine.utilsr   Zcelery.exceptionsr   r   Zcelery.utils.timer   r!   r   r   r   r   <module>   s   