a
    Nb                     @   sJ   d dl Z d dlZd dlmZ eeZG dd deZG dd deZ	dS )    N)MaximumRetriesExceededc                   @   s*   e Zd ZdZdd fddZd	ddZdS )
Sleepersa  
    A class that allows for the creation of multiple `Sleeper` objects with shared
    arguments.
    Examples:
        Firstly a `Sleepers` object containing the shared attributes has to be created.
        >>> max_retries, retry_timeout = 5, 5
        >>> sleepers = Sleepers(max_retries, retry_timeout)
        From this `Sleepers` object multiple individual `Sleeper` objects can be created
        using the `make` method.
        >>> sleeper = sleepers.make()
    Args:
        max_retries (int): The maximum number of retries to perform.
        retry_timeout (int): The time to sleep for each past retry.
        callback (Callable[[int, Any], None]): A callable to be called on each retry.
    Attributes:
        max_retries (int): The maximum number of retries to perform.
        retry_timeout (int): The time to sleep for each past retry.
        callback (callable): A callable to be called on each retry.
    c                  G   s   d S N )xr   r   K/var/www/html/diaryflask/venv/lib/python3.9/site-packages/mwclient/sleep.py<lambda>       zSleepers.<lambda>c                 C   s   || _ || _|| _d S r   )max_retriesretry_timeoutcallback)selfr
   r   r   r   r   r   __init__   s    zSleepers.__init__Nc                 C   s   t || j| j| jS )z
        Creates a new `Sleeper` object.
        Args:
            args (Any): Arguments to be passed to the `callback` callable.
        Returns:
            Sleeper: A `Sleeper` object.
        )Sleeperr
   r   r   )r   argsr   r   r   make!   s    zSleepers.make)N)__name__
__module____qualname____doc__r   r   r   r   r   r   r      s   r   c                   @   s"   e Zd ZdZdd ZdddZdS )	r   a  
    For any given operation, a `Sleeper` object keeps count of the number of retries.
    For each retry, the sleep time increases until the max number of retries is reached
    and a `MaximumRetriesExceeded` is raised. The sleeper object should be discarded
    once the operation is successful.
    Args:
        args (Any): Arguments to be passed to the `callback` callable.
        max_retries (int): The maximum number of retries to perform.
        retry_timeout (int): The time to sleep for each past retry.
        callback (callable, None]): A callable to be called on each retry.
    Attributes:
        args (Any): Arguments to be passed to the `callback` callable.
        retries (int): The number of retries that have been performed.
        max_retries (int): The maximum number of retries to perform.
        retry_timeout (int): The time to sleep for each past retry.
        callback (callable): A callable to be called on each retry.
    c                 C   s"   || _ d| _|| _|| _|| _d S )Nr   )r   retriesr
   r   r   )r   r   r
   r   r   r   r   r   r   >   s
    zSleeper.__init__r   c                 C   sn   |  j d7  _ | j | jkr&t| | j| | | j | j | j| j d  }||k rT|}td| t	| dS )a/  
        Sleeps for a minimum of `min_time` seconds. The actual sleeping time will increase
        with the number of retries.
        Args:
            min_time (int): The minimum sleeping time.
        Raises:
            MaximumRetriesExceeded: If the number of retries exceeds the maximum.
           zSleeping for %d secondsN)
r   r
   r   r   r   r   logdebugtimesleep)r   Zmin_timetimeoutr   r   r   r   E   s    	zSleeper.sleepN)r   )r   r   r   r   r   r   r   r   r   r   r   ,   s   r   )
r   loggingZmwclient.errorsr   	getLoggerr   r   objectr   r   r   r   r   r   <module>   s
   
$