U
    @fq                     @   sJ   d dl Z d dlZd dlmZ d dlZdZG dd dZG dd deZ	dS )    N)	greenletsFc                   @   sP   e Zd Zdd Zedd Zdd Zdd Zd	d
 Zdd Z	dd Z
dd ZdS )Timerc                 O   s8   || _ |||f| _d| _tr4t | _tj| jd dS )a  Create a timer.
            seconds: The minimum number of seconds to wait before calling
            cb: The callback to call when the timer has expired
            *args: The arguments to pass to cb
            **kw: The keyword arguments to pass to cb

        This timer will not be run unless it is scheduled in a runloop by
        calling timer.schedule() or runloop.add_timer(timer).
        F)fileN)secondstplcalled_g_debugioStringIO	tracebackprint_stack)selfr   cbargskw r   M/var/www/html/chatgpt/venv/lib/python3.8/site-packages/eventlet/hubs/timer.py__init__   s    

zTimer.__init__c                 C   s   | j  S N)r   r   r   r   r   pending   s    zTimer.pendingc                 C   sR   t | dd }t | dd\}}}d||||f }trNt| drN|d| j  7 }|S )Nr   r   )NNNzTimer(%s, %s, *%s, **%s)r   
)getattrr   hasattrr   getvalue)r   Zsecsr   r   r   retvalr   r   r   __repr__"   s       zTimer.__repr__c                 C   s"   | j \}}}| j| j|f||S r   )r   	__class__r   )r   r   r   r   r   r   r   copy+   s    z
Timer.copyc                 C   s   d| _ tj | | _| S )z;Schedule this timer to run in the current runloop.
        F)r   eventlethubsget_hubZ	add_timerZscheduled_timer   r   r   r   schedule/   s    zTimer.schedulec                 G   sL   | j sHd| _ | j\}}}z||| W 5 z| `W n tk
rD   Y nX X d S NT)r   r   AttributeErrorr   r   r   r   r   r   r   __call__6   s    zTimer.__call__c                 C   s>   | j s:d| _ tj |  z| `W n tk
r8   Y nX dS )zwPrevent this timer from being called. If the timer has already
        been called or canceled, has no effect.
        TN)r   r   r    r!   Ztimer_canceledr   r$   r   r   r   r   cancelB   s    zTimer.cancelc                 C   s   t | t |k S r   )id)r   otherr   r   r   __lt__P   s    zTimer.__lt__N)__name__
__module____qualname__r   propertyr   r   r   r"   r&   r'   r*   r   r   r   r   r      s   
	r   c                   @   s0   e Zd Zdd Zedd Zdd Zdd Zd	S )

LocalTimerc                 O   s    t  | _ tj| f|| d S r   )greenletZ
getcurrentr   r   )r   r   kwargsr   r   r   r   V   s    
zLocalTimer.__init__c                 C   s   | j d ks| j jrdS | j S )NF)r0   deadr   r   r   r   r   r   Z   s    zLocalTimer.pendingc                 G   s<   | j s8d| _ | jd k	r"| jjr"d S | j\}}}||| d S r#   )r   r0   r2   r   r%   r   r   r   r&   `   s    zLocalTimer.__call__c                 C   s   d | _ t|  d S r   )r0   r   r'   r   r   r   r   r'   h   s    zLocalTimer.cancelN)r+   r,   r-   r   r.   r   r&   r'   r   r   r   r   r/   T   s
   
r/   )
r   Zeventlet.hubsr   Zeventlet.supportr   r0   r	   r   r   r/   r   r   r   r   <module>   s   H