o
    zqf–  ã                   @   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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   úL/root/parts/websockify/install/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    