a
    y{JhK                     @   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                   @   s<   e Zd ZU eed< eed< eed< eed< ddddZdS )	BackoffConfig	min_delay	max_delayfactorjitterNreturnc                 C   s*   | j | jkrtd| jdkr&tdd S )Nz.`max_delay` should be greater than `min_delay`   z!`factor` should be greater than 1)r   r   
ValueErrorr   self r   G/var/www/shaz/venv/lib/python3.9/site-packages/aiogram/utils/backoff.py__post_init__   s    
zBackoffConfig.__post_init__)__name__
__module____qualname__float__annotations__r   r   r   r   r   r      s
   
r   c                   @   s   e Zd ZeddddZd dddZeeddd	Zeedd
dZ	eedddZ
eedddZeedddZeedddZeedddZddddZddddZeedddZedddZdddd Zedd!d"ZdS )#BackoffN)configr   c                 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__r
   c                 C   s   | S Nr   r   r   r   r   __iter__   s    zBackoff.__iter__c                 C   s   | j jS r   )r   r   r   r   r   r   r      s    zBackoff.min_delayc                 C   s   | j jS r   )r   r   r   r   r   r   r   #   s    zBackoff.max_delayc                 C   s   | j jS r   )r   r   r   r   r   r   r   '   s    zBackoff.factorc                 C   s   | j jS r   )r   r	   r   r   r   r   r	   +   s    zBackoff.jitterc                 C   s   | j S r   )r   r   r   r   r   
next_delay/   s    zBackoff.next_delayc                 C   s   | j S r   )r   r   r   r   r   current_delay3   s    zBackoff.current_delayc                 C   s   | j S r   )r   r   r   r   r   counter7   s    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)valuer   c                 C   s   t t|| j | j| jS r   )r   minr   r   r	   )r   r)   r   r   r   _calculate_nextA   s    zBackoff._calculate_nextc                 C   s*   | j | _| | j | _ |  jd7  _| jS )Nr   )r   r   r+   r   r   r   r   r   __next__D   s    zBackoff.__next__c                 C   s   d| _ d| _| j| _d S r   )r   r   r   r   r   r   r   r   resetJ   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__O   s    zBackoff.__str__)r   r   r   r   r   r    propertyr   r   r   r   r	   r!   r"   intr#   r%   r(   r+   r,   r-   strr/   r   r   r   r   r      s,   r   )r'   r$   dataclassesr   randomr   r   r   r   r   r   r   <module>   s   