o
    `®fi  ã                   @   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Úabstractmethodgü©ñÒMbà?gü©ñÒMb€?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   úF/home/ubuntu/webapp/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                   @   s4   e Zd ZdZdedd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__r   c                 C   s   | j S ©Nr   r   r   r   r	   r   "   ó   zConstantBackoff.compute)r   r   r   r   r   r   r   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   )   s   zNoBackoff.__init__©r   N)r   r   r   r   r   Ú__classcell__r   r   r   r	   r   &   s    r   c                   @   s:   e Zd ZdZeefde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   0   ó   
zExponentialBackoff.__init__r   r   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	   r#   -   s    r#   c                   @   ó>   e Zd ZdZeefdededd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&   r'   r)   r,   r   r   r	   r   ?   r-   zFullJitterBackoff.__init__r   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.computer0   r   r   r   r	   r4   <   ó    r4   c                   @   r3   )ÚEqualJitterBackoffz!Equal jitter backoff upon failurer$   r%   r   Nc                 C   r&   r'   r)   r,   r   r   r	   r   N   r-   zEqualJitterBackoff.__init__r   c                 C   s*   t | j| jd|  ƒd }|t d|¡ S )Nr.   r   )r/   r*   r+   r5   r6   )r   r   Útempr   r   r	   r   V   s   zEqualJitterBackoff.computer0   r   r   r   r	   r8   K   r7   r8   c                   @   sH   e Zd ZdZeefdededd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 )r(   r   N)r*   r+   Ú_previous_backoffr,   r   r   r	   r   ^   s   
z"DecorrelatedJitterBackoff.__init__c                 C   s
   d| _ d S r   )r;   r   r   r   r	   r
   g   s   
zDecorrelatedJitterBackoff.resetr   c                 C   s4   t | j| jd ƒ}t | j|¡}t| j|ƒ| _| jS )Né   )Úmaxr+   r;   r5   r6   r/   r*   )r   r   Úmax_backoffr9   r   r   r	   r   j   s   z!DecorrelatedJitterBackoff.computer!   )r   r   r   r   r1   r2   r   r   r
   r   r   r   r   r   r	   r:   [   s
    
	r:   c                   C   s   t ƒ S r   )r8   r   r   r   r	   Údefault_backoffq   r   r?   )r5   Úabcr   r   r1   r2   r   r   r   r#   r4   r8   r:   r?   r   r   r   r	   Ú<module>   s    