o
    FhK                     @   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   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   H/var/www/html/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_delay/      zBackoff.next_delayc                 C   r#   r   )r   r   r   r   r   current_delay3   r%   zBackoff.current_delayc                 C   r#   r   )r   r   r   r   r   counter7   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_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   r   r   r    propertyr   r   r   r   r	   r$   r&   intr'   r)   r,   r/   r0   r1   strr3   r   r   r   r   r      s.    



r   )r+   r(   dataclassesr   randomr   r   r   r   r   r   r   <module>   s    