o
    LDiw                     @   sR   d dl Z d dlZd dlmZ d dlmZ eddG dd dZG dd	 d	ZdS )
    N)	dataclass)normalvariateT)frozenc                   @   s8   e Zd ZU eed< eed< eed< eed< d	ddZdS )
BackoffConfig	min_delay	max_delayfactorjitterreturnNc                 C   s2   | j | jkrd}t|| jdkrd}t|d S )Nz.`max_delay` should be greater than `min_delay`   z!`factor` should be greater than 1)r   r   
ValueErrorr   )selfmsg r   a/var/www/www-root/data/www/77.83.87.30/venv/lib/python3.10/site-packages/aiogram/utils/backoff.py__post_init__   s   
zBackoffConfig.__post_init__r
   N)__name__
__module____qualname__float__annotations__r   r   r   r   r   r      s   
 r   c                   @   s   e Zd ZdeddfddZd#ddZedefdd	Zedefd
dZ	edefddZ
edefddZedefddZedefddZedefddZd$ddZd$ddZdedefddZdefddZd$dd Zdefd!d"ZdS )%Backoffconfigr
   Nc                 C   s   || _ |j| _d| _d| _d S Ng        r   )r   r   _next_delay_current_delay_counter)r   r   r   r   r   __init__   s   
zBackoff.__init__c                 C   s   | S Nr   r   r   r   r   __iter__   s   zBackoff.__iter__c                 C      | j jS r   )r   r   r    r   r   r   r   !      zBackoff.min_delayc                 C   r"   r   )r   r   r    r   r   r   r   %   r#   zBackoff.max_delayc                 C   r"   r   )r   r   r    r   r   r   r   )   r#   zBackoff.factorc                 C   r"   r   )r   r	   r    r   r   r   r	   -   r#   zBackoff.jitterc                 C      | j S r   )r   r    r   r   r   
next_delay1      zBackoff.next_delayc                 C   r$   r   )r   r    r   r   r   current_delay5   r&   zBackoff.current_delayc                 C   r$   r   )r   r    r   r   r   counter9   r&   zBackoff.counterc                 C   s   t t|  d S r   )timesleepnextr    r   r   r   r*   =   s   zBackoff.sleepc                    s   t t| I d H  d S r   )asyncior*   r+   r    r   r   r   asleep@   s   zBackoff.asleepvaluec                 C   s   t t|| j | j| jS r   )r   minr   r   r	   )r   r.   r   r   r   _calculate_nextC   s   zBackoff._calculate_nextc                 C   s*   | j | _| | j | _ |  jd7  _| jS )Nr   )r   r   r0   r   r    r   r   r   __next__F   s   zBackoff.__next__c                 C   s   d| _ d| _| j| _d S r   )r   r   r   r   r    r   r   r   resetL   s   zBackoff.resetc                 C   s   d| j  d| j d| j dS )NzBackoff(tryings=z, current_delay=z, next_delay=))r   r   r   r    r   r   r   __str__Q   s   zBackoff.__str__)r
   r   r   )r   r   r   r   r   r!   propertyr   r   r   r   r	   r%   r'   intr(   r*   r-   r0   r1   r2   strr4   r   r   r   r   r      s.    



r   )r,   r)   dataclassesr   randomr   r   r   r   r   r   r   <module>   s    