o
    ›¨ÊhÊ	  ã                   @   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
ƒ¡‰ˆ rftˆdƒshtˆjƒ‡ ‡‡‡‡‡‡fdd„ƒ}ˆj|ˆ_ˆ_dS dS 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 | i |¤ŽW S  ty   ‚  ty   ‚  ˆy   ‚  ˆ ya } z7ˆr9tttdˆƒƒˆjjˆˆd�ˆd< tˆdƒrGt	ˆdˆj
ƒˆd< ˆjdd|iˆ¤Ž}tˆdƒr[tˆdƒ |‚d }~ww )Ng      ð?)ÚfactorÚretriesÚmaximumÚfull_jitterÚ	countdownÚoverride_max_retriesÚmax_retriesÚexcr   )r   r   r   r   ÚintÚmaxÚrequestr   ÚhasattrÚgetattrr   ÚretryÚdelattr)ÚargsÚkwargsr   Úret©r   r   r
   r   r   r	   Útaskr   úF/var/www/html/env/lib/python3.10/site-packages/celery/app/autoretry.pyÚrun#   s8   üÿ
þ

€ï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__Ú
vine.utilsr   Úcelery.exceptionsr   r   Úcelery.utils.timer   r(   r   r   r   r"   Ú<module>   s
    