
    G˝iw                     l    d dl Z d dlZd dlmZ d dlmZ  ed       G d d             Z G d d	      Zy)
    N)	dataclass)normalvariateT)frozenc                   >    e Zd ZU eed<   eed<   eed<   eed<   ddZy)BackoffConfig	min_delay	max_delayfactorjitterNc                     | j                   | j                  k  rd}t        |      | j                  dk  rd}t        |      y )Nz.`max_delay` should be greater than `min_delay`   z!`factor` should be greater than 1)r	   r   
ValueErrorr
   )selfmsgs     N/home/leshdev/mybot/venv/lib/python3.12/site-packages/aiogram/utils/backoff.py__post_init__zBackoffConfig.__post_init__   sA    >>T^^+BCS/!;;!5CS/!     returnN)__name__
__module____qualname__float__annotations__r    r   r   r   r      s    MM"r   r   c                       e Zd ZdeddfdZddZedefd       Zedefd       Z	edefd       Z
edefd	       Zedefd
       Zedefd       Zedefd       ZddZddZdedefdZdefdZddZdefdZy)Backoffconfigr   Nc                 P    || _         |j                  | _        d| _        d| _        y Ng        r   )r   r   _next_delay_current_delay_counter)r   r   s     r   __init__zBackoff.__init__   s&    !++!r   c                     | S Nr   r   s    r   __iter__zBackoff.__iter__   s    r   c                 .    | j                   j                  S r&   )r   r   r'   s    r   r   zBackoff.min_delay!       {{$$$r   c                 .    | j                   j                  S r&   )r   r	   r'   s    r   r	   zBackoff.max_delay%   r*   r   c                 .    | j                   j                  S r&   )r   r
   r'   s    r   r
   zBackoff.factor)       {{!!!r   c                 .    | j                   j                  S r&   )r   r   r'   s    r   r   zBackoff.jitter-   r-   r   c                     | j                   S r&   )r!   r'   s    r   
next_delayzBackoff.next_delay1   s    r   c                     | j                   S r&   )r"   r'   s    r   current_delayzBackoff.current_delay5   s    """r   c                     | j                   S r&   )r#   r'   s    r   counterzBackoff.counter9   s    }}r   c                 @    t        j                  t        |              y r&   )timesleepnextr'   s    r   r7   zBackoff.sleep=   s    

4:r   c                 \   K   t        j                  t        |              d {    y 7 wr&   )asyncior7   r8   r'   s    r   asleepzBackoff.asleep@   s     mmDJ'''s   ",*,valuec                 p    t        t        || j                  z  | j                        | j                        S r&   )r   minr
   r	   r   )r   r<   s     r   _calculate_nextzBackoff._calculate_nextC   s'    S!4dnnEt{{SSr   c                     | j                   | _        | j                  | j                         | _         | xj                  dz  c_        | j                  S )Nr   )r!   r"   r?   r#   r'   s    r   __next__zBackoff.__next__F   sC    "..//0@0@A"""r   c                 B    d| _         d| _        | j                  | _        y r    )r"   r#   r   r!   r'   s    r   resetzBackoff.resetL   s    !>>r   c                 V    d| j                    d| j                   d| j                   dS )NzBackoff(tryings=z, current_delay=z, next_delay=))r#   r"   r!   r'   s    r   __str__zBackoff.__str__Q   s9    t}}o-=d>Q>Q=R S**+1.	
r   )r   r   r   )r   r   r   r   r$   r(   propertyr   r   r	   r
   r   r0   r2   intr4   r7   r;   r?   rA   rC   strrF   r   r   r   r   r      s   }   %5 % % %5 % % " " " " " "  E     #u # #   (TU Tu T#% #*

 
r   r   )r:   r6   dataclassesr   randomr   r   r   r   r   r   <module>rL      s9      !   $" " ">
 >
r   