o
    5˜Žjw  ã                   @   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   úR/var/www/kodo/Anonymous/send/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    