o
    rPf                     @   s   d dl Z d dlmZmZ dZdZG dd deZG dd deZG d	d
 d
eZG dd deZ	G dd deZ
G dd deZG dd deZdd ZdS )    N)ABCabstractmethodgMb?gMb?c                   @   s$   e Zd ZdZdd Zedd ZdS )AbstractBackoffzBackoff interfacec                 C      dS )z
        Reset internal state before an operation.
        `reset` is called once at the beginning of
        every call to `Retry.call_with_retry`
        N selfr   r   N/var/www/html/humari/django-venv/lib/python3.10/site-packages/redis/backoff.pyreset   s   zAbstractBackoff.resetc                 C   r   )z'Compute backoff in seconds upon failureNr   r   failuresr   r   r	   compute   s   zAbstractBackoff.computeN)__name__
__module____qualname____doc__r
   r   r   r   r   r   r	   r   
   s
    r   c                   @   s    e Zd ZdZdd Zdd ZdS )ConstantBackoffzConstant backoff upon failurec                 C   s
   || _ dS )z"`backoff`: backoff time in secondsN_backoff)r   backoffr   r   r	   __init__   s   
zConstantBackoff.__init__c                 C   s   | j S Nr   r   r   r   r	   r   "      zConstantBackoff.computeN)r   r   r   r   r   r   r   r   r   r	   r      s    r   c                       s    e Zd ZdZ fddZ  ZS )	NoBackoffzNo backoff upon failurec                    s   t  d d S Nr   )superr   r   	__class__r   r	   r   )   s   zNoBackoff.__init__)r   r   r   r   r   __classcell__r   r   r   r	   r   &   s    r   c                   @   &   e Zd ZdZeefddZdd ZdS )ExponentialBackoffz Exponential backoff upon failurec                 C      || _ || _dS e
        `cap`: maximum backoff time in seconds
        `base`: base backoff time in seconds
        N_cap_baser   capbaser   r   r	   r   0      
zExponentialBackoff.__init__c                 C   s   t | j| jd|  S )N   )minr%   r&   r   r   r   r	   r   8   s   zExponentialBackoff.computeNr   r   r   r   DEFAULT_CAPDEFAULT_BASEr   r   r   r   r   r	   r    -       r    c                   @   r   )FullJitterBackoffz Full jitter backoff upon failurec                 C   r!   r"   r$   r'   r   r   r	   r   ?   r*   zFullJitterBackoff.__init__c                 C   s   t dt| j| jd|  S )Nr   r+   )randomuniformr,   r%   r&   r   r   r   r	   r   G   s   zFullJitterBackoff.computeNr-   r   r   r   r	   r1   <   r0   r1   c                   @   r   )EqualJitterBackoffz!Equal jitter backoff upon failurec                 C   r!   r"   r$   r'   r   r   r	   r   N   r*   zEqualJitterBackoff.__init__c                 C   s*   t | j| jd|  d }|td| S )Nr+   r   )r,   r%   r&   r2   r3   )r   r   tempr   r   r	   r   V   s   zEqualJitterBackoff.computeNr-   r   r   r   r	   r4   K   r0   r4   c                   @   s.   e Zd ZdZeefddZdd Zdd ZdS )	DecorrelatedJitterBackoffz(Decorrelated jitter backoff upon failurec                 C   s   || _ || _d| _dS )r#   r   N)r%   r&   _previous_backoffr'   r   r   r	   r   ^   s   
z"DecorrelatedJitterBackoff.__init__c                 C   s
   d| _ d S r   )r7   r   r   r   r	   r
   g   s   
zDecorrelatedJitterBackoff.resetc                 C   s4   t | j| jd }t| j|}t| j|| _| jS )N   )maxr&   r7   r2   r3   r,   r%   )r   r   max_backoffr5   r   r   r	   r   j   s   z!DecorrelatedJitterBackoff.computeN)	r   r   r   r   r.   r/   r   r
   r   r   r   r   r	   r6   [   s
    	r6   c                   C   s   t  S r   )r4   r   r   r   r	   default_backoffq   r   r;   )r2   abcr   r   r.   r/   r   r   r   r    r1   r4   r6   r;   r   r   r   r	   <module>   s    