o
    h                     @   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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edef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   O/var/www/html/optinet_system/venv/lib/python3.10/site-packages/redis/backoff.pyreset   s   zAbstractBackoff.resetfailuresreturnc                 C   r   )z'Compute backoff in seconds upon failureNr   r   r   r   r   r	   compute   s   zAbstractBackoff.computeN)	__name__
__module____qualname____doc__r
   r   intfloatr   r   r   r   r	   r   
   s
    r   c                   @   sP   e Zd ZdZdeddfddZdefddZdefd	d
Z	dedefddZ
dS )ConstantBackoffzConstant backoff upon failurebackoffr   Nc                 C   s
   || _ dS )z"`backoff`: backoff time in secondsN_backoff)r   r   r   r   r	   __init__   s   
zConstantBackoff.__init__c                 C   s   t | jfS N)hashr   r   r   r   r	   __hash__"   s   zConstantBackoff.__hash__c                 C   s   t |tstS | j|jkS r   )
isinstancer   NotImplementedr   r   otherr   r   r	   __eq__%   s   
zConstantBackoff.__eq__r   c                 C   s   | j S r   r   r   r   r   r	   r   +      zConstantBackoff.compute)r   r   r   r   r   r   r   r   boolr!   r   r   r   r   r	   r      s    r   c                       s"   e Zd ZdZd fddZ  ZS )	NoBackoffzNo backoff upon failurer   Nc                    s   t  d d S Nr   )superr   r   	__class__r   r	   r   2      zNoBackoff.__init__r   N)r   r   r   r   r   __classcell__r   r   r'   r	   r$   /   s    r$   c                   @   sV   e Zd ZdZeefdedefddZdefddZ	de
fd	d
ZdedefddZdS )ExponentialBackoffz Exponential backoff upon failurecapbasec                 C      || _ || _dS e
        `cap`: maximum backoff time in seconds
        `base`: base backoff time in seconds
        N_cap_baser   r-   r.   r   r   r	   r   9      
zExponentialBackoff.__init__r   c                 C      t | j| jfS r   r   r4   r3   r   r   r   r	   r   A   r)   zExponentialBackoff.__hash__c                 C   &   t |tstS | j|jko| j|jkS r   )r   r,   r   r4   r3   r   r   r   r	   r!   D      
zExponentialBackoff.__eq__r   c                 C   s   t | j| jd|  S N   )minr3   r4   r   r   r   r	   r   J   s   zExponentialBackoff.computeNr   r   r   r   DEFAULT_CAPDEFAULT_BASEr   r   r   r   r#   r!   r   r   r   r   r	   r,   6   s    r,   c                   @   Z   e Zd ZdZeefdededdfddZdefdd	Z	de
fd
dZdedefddZdS )FullJitterBackoffz Full jitter backoff upon failurer-   r.   r   Nc                 C   r/   r0   r2   r5   r   r   r	   r   Q   r6   zFullJitterBackoff.__init__c                 C   r7   r   r8   r   r   r   r	   r   Y   r)   zFullJitterBackoff.__hash__c                 C   r9   r   )r   rB   r   r4   r3   r   r   r   r	   r!   \   r:   zFullJitterBackoff.__eq__r   c                 C   s   t dt| j| jd|  S )Nr   r<   )randomuniformr=   r3   r4   r   r   r   r	   r   b      zFullJitterBackoff.computer>   r   r   r   r	   rB   N       rB   c                   @   rA   )EqualJitterBackoffz!Equal jitter backoff upon failurer-   r.   r   Nc                 C   r/   r0   r2   r5   r   r   r	   r   i   r6   zEqualJitterBackoff.__init__c                 C   r7   r   r8   r   r   r   r	   r   q   r)   zEqualJitterBackoff.__hash__c                 C   r9   r   r   rG   r   r4   r3   r   r   r   r	   r!   t   r:   zEqualJitterBackoff.__eq__r   c                 C   s*   t | j| jd|  d }|td| S )Nr<   r   )r=   r3   r4   rC   rD   )r   r   tempr   r   r	   r   z   s   zEqualJitterBackoff.computer>   r   r   r   r	   rG   f   rF   rG   c                   @   sd   e Zd ZdZeefdededdfddZdefdd	Z	de
fd
dZdddZdedefddZdS )DecorrelatedJitterBackoffz(Decorrelated jitter backoff upon failurer-   r.   r   Nc                 C   s   || _ || _d| _dS )r1   r   N)r3   r4   _previous_backoffr5   r   r   r	   r      s   
z"DecorrelatedJitterBackoff.__init__c                 C   r7   r   r8   r   r   r   r	   r      r)   z"DecorrelatedJitterBackoff.__hash__c                 C   r9   r   )r   rJ   r   r4   r3   r   r   r   r	   r!      r:   z DecorrelatedJitterBackoff.__eq__c                 C   s
   d| _ d S r%   )rK   r   r   r   r	   r
      s   
zDecorrelatedJitterBackoff.resetr   c                 C   s4   t | j| jd }t| j|}t| j|| _| jS )N   )maxr4   rK   rC   rD   r=   r3   )r   r   max_backoffrI   r   r   r	   r      s   z!DecorrelatedJitterBackoff.computer*   )r   r   r   r   r?   r@   r   r   r   r   r#   r!   r
   r   r   r   r   r	   rJ      s    	
rJ   c                   @   rA   )ExponentialWithJitterBackoffz-Exponential backoff upon failure, with jitterr-   r.   r   Nc                 C   r/   r0   r2   r5   r   r   r	   r      r6   z%ExponentialWithJitterBackoff.__init__c                 C   r7   r   r8   r   r   r   r	   r      r)   z%ExponentialWithJitterBackoff.__hash__c                 C   r9   r   rH   r   r   r   r	   r!      r:   z#ExponentialWithJitterBackoff.__eq__r   c                 C   s   t | jt | j d|  S r;   )r=   r3   rC   r4   r   r   r   r	   r      rE   z$ExponentialWithJitterBackoff.computer>   r   r   r   r	   rO      rF   rO   c                   C   s   t  S r   )rG   r   r   r   r	   default_backoff   r"   rP   )rC   abcr   r   r?   r@   r   r   r$   r,   rB   rG   rJ   rO   rP   r   r   r   r	   <module>   s    