
    h                         d dl Z d dlmZmZ dZdZ G d de      Z G d de      Z G d	 d
e      Z G d de      Z	 G d de      Z
 G d de      Z G d de      Z G d de      Zd Zy)    N)ABCabstractmethodgMb?gMb?c                   0    e Zd ZdZd Zededefd       Zy)AbstractBackoffzBackoff interfacec                      y)z
        Reset internal state before an operation.
        `reset` is called once at the beginning of
        every call to `Retry.call_with_retry`
        N selfs    o/var/www/fastuser/data/www/generator.snapmosaic.io/flask_app/venv/lib/python3.12/site-packages/redis/backoff.pyresetzAbstractBackoff.reset   s     	    failuresreturnc                      y)z'Compute backoff in seconds upon failureNr   r
   r   s     r   computezAbstractBackoff.compute   s     	r   N)	__name__
__module____qualname____doc__r   r   intfloatr   r   r   r   r   r   
   s,        r   r   c                   H    e Zd ZdZdeddfdZdefdZdefdZ	dedefd	Z
y)
ConstantBackoffzConstant backoff upon failurebackoffr   Nc                     || _         y)z"`backoff`: backoff time in secondsN_backoff)r
   r   s     r   __init__zConstantBackoff.__init__   s	    r   c                 .    t        | j                  f      S N)hashr   r	   s    r   __hash__zConstantBackoff.__hash__"   s    T]]$%%r   c                 `    t        |t              st        S | j                  |j                  k(  S r!   )
isinstancer   NotImplementedr   r
   others     r   __eq__zConstantBackoff.__eq__%   s%    %1!!}}..r   r   c                     | j                   S r!   r   r   s     r   r   zConstantBackoff.compute+   s    }}r   )r   r   r   r   r   r   r   r#   boolr)   r   r   r   r   r   r      sC    '   $  &# &/t /  r   r   c                   $     e Zd ZdZd fdZ xZS )	NoBackoffzNo backoff upon failurec                 $    t         |   d       y Nr   )superr   )r
   	__class__s    r   r   zNoBackoff.__init__2   s    r   r   N)r   r   r   r   r   __classcell__)r1   s   @r   r-   r-   /   s    ! r   r-   c                   N    e Zd ZdZeefdedefdZdefdZ	de
fdZdedefd	Zy
)ExponentialBackoffz Exponential backoff upon failurecapbasec                      || _         || _        ye
        `cap`: maximum backoff time in seconds
        `base`: base backoff time in seconds
        N_cap_baser
   r6   r7   s      r   r   zExponentialBackoff.__init__9       
 	
r   r   c                 D    t        | j                  | j                  f      S r!   r"   r=   r<   r	   s    r   r#   zExponentialBackoff.__hash__A       TZZ+,,r   c                     t        |t              st        S | j                  |j                  k(  xr | j                  |j                  k(  S r!   )r%   r5   r&   r=   r<   r'   s     r   r)   zExponentialBackoff.__eq__D   8    %!34!!zzU[[(DTYY%**-DDr   r   c                 N    t        | j                  | j                  d|z  z        S N   )minr<   r=   r   s     r   r   zExponentialBackoff.computeJ   s     499djj1h;677r   Nr   r   r   r   DEFAULT_CAPDEFAULT_BASEr   r   r   r#   r+   r)   r   r   r   r   r5   r5   6   sJ    *$/| E u -# -Et E8 8 8r   r5   c                   R    e Zd ZdZeefdededdfdZdefdZ	de
fdZd	edefd
Zy)FullJitterBackoffz Full jitter backoff upon failurer6   r7   r   Nc                      || _         || _        yr9   r;   r>   s      r   r   zFullJitterBackoff.__init__Q   r?   r   c                 D    t        | j                  | j                  f      S r!   rA   r	   s    r   r#   zFullJitterBackoff.__hash__Y   rB   r   c                     t        |t              st        S | j                  |j                  k(  xr | j                  |j                  k(  S r!   )r%   rM   r&   r=   r<   r'   s     r   r)   zFullJitterBackoff.__eq__\   s8    %!23!!zzU[[(DTYY%**-DDr   r   c           	      v    t        j                  dt        | j                  | j                  d|z  z              S )Nr   rG   )randomuniformrH   r<   r=   r   s     r   r   zFullJitterBackoff.computeb   s+    ~~aTYY

Q[0H!IJJr   rI   r   r   r   rM   rM   N   sU    *$/| E u PT -# -Et EK K Kr   rM   c                   R    e Zd ZdZeefdededdfdZdefdZ	de
fdZd	edefd
Zy)EqualJitterBackoffz!Equal jitter backoff upon failurer6   r7   r   Nc                      || _         || _        yr9   r;   r>   s      r   r   zEqualJitterBackoff.__init__i   r?   r   c                 D    t        | j                  | j                  f      S r!   rA   r	   s    r   r#   zEqualJitterBackoff.__hash__q   rB   r   c                     t        |t              st        S | j                  |j                  k(  xr | j                  |j                  k(  S r!   )r%   rU   r&   r=   r<   r'   s     r   r)   zEqualJitterBackoff.__eq__t   rD   r   r   c                     t        | j                  | j                  d|z  z        dz  }|t        j                  d|      z   S )NrG   r   )rH   r<   r=   rR   rS   )r
   r   temps      r   r   zEqualJitterBackoff.computez   s:    499djj1h;67!;fnnQ---r   rI   r   r   r   rU   rU   f   sR    +$/| E u PT -# -Et E. . .r   rU   c                   Z    e Zd ZdZeefdededdfdZdefdZ	de
fdZdd	Zd
edefdZy)DecorrelatedJitterBackoffz(Decorrelated jitter backoff upon failurer6   r7   r   Nc                 .    || _         || _        d| _        y)r:   r   N)r<   r=   _previous_backoffr>   s      r   r   z"DecorrelatedJitterBackoff.__init__   s    
 	
!"r   c                 D    t        | j                  | j                  f      S r!   rA   r	   s    r   r#   z"DecorrelatedJitterBackoff.__hash__   rB   r   c                     t        |t              st        S | j                  |j                  k(  xr | j                  |j                  k(  S r!   )r%   r\   r&   r=   r<   r'   s     r   r)   z DecorrelatedJitterBackoff.__eq__   s8    %!:;!!zzU[[(DTYY%**-DDr   c                     d| _         y r/   )r^   r	   s    r   r   zDecorrelatedJitterBackoff.reset   s
    !"r   r   c                     t        | j                  | j                  dz        }t        j                  | j                  |      }t        | j                  |      | _        | j                  S )N   )maxr=   r^   rR   rS   rH   r<   )r
   r   max_backoffrZ   s       r   r   z!DecorrelatedJitterBackoff.compute   sP    $**d&<&<q&@A~~djj+6!$TYY!5%%%r   r2   )r   r   r   r   rJ   rK   r   r   r   r#   r+   r)   r   r   r   r   r   r\   r\      sW    2$/| #E #u #PT #-# -Et E#& & &r   r\   c                   R    e Zd ZdZeefdededdfdZdefdZ	de
fdZd	edefd
Zy)ExponentialWithJitterBackoffz-Exponential backoff upon failure, with jitterr6   r7   r   Nc                      || _         || _        yr9   r;   r>   s      r   r   z%ExponentialWithJitterBackoff.__init__   r?   r   c                 D    t        | j                  | j                  f      S r!   rA   r	   s    r   r#   z%ExponentialWithJitterBackoff.__hash__   rB   r   c                     t        |t              st        S | j                  |j                  k(  xr | j                  |j                  k(  S r!   )r%   rg   r&   r=   r<   r'   s     r   r)   z#ExponentialWithJitterBackoff.__eq__   s8    %!=>!!zzU[[(DTYY%**-DDr   r   c                 x    t        | j                  t        j                         | j                  z  d|z  z        S rF   )rH   r<   rR   r=   r   s     r   r   z$ExponentialWithJitterBackoff.compute   s+    499fmmo

:Q[HIIr   rI   r   r   r   rg   rg      sU    7$/| E u PT -# -Et EJ J Jr   rg   c                      t               S r!   )rU   r   r   r   default_backoffrm      s    r   )rR   abcr   r   rJ   rK   r   r   r-   r5   rM   rU   r\   rg   rm   r   r   r   <module>ro      s     # c "o ( 8 80K K0. .2& &>J? J0 r   