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Ú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   úm/var/www/vedio/testing/chatpythonscript.ninositsolution.com/env/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    