a
    La(                     @   s.   d dl Z d dlZd dlmZ G dd dZdS )    N)dequec                   @   s6   e Zd Zdd ZdddZdd Zdd	 Zd
d ZdS )DelayedQueuec                 C   s0   || _ t | _t| j| _t | _d| _d S )NF)		delay_sec	threadingZLock_lockZ	Condition
_not_emptyr   _queue_closed)selfdelay r   ;lib/python3.9/site-packages/watchdog/utils/delayed_queue.py__init__   s
    
zDelayedQueue.__init__Fc                 C   s8   | j   | j|t |f | j  | j   dS )zAdd element to queue.N)r   acquirer   appendtimer   notifyrelease)r
   elementr   r   r   r   put   s    

zDelayedQueue.putc                 C   s(   d| _ | j  | j  | j  dS )z4Close queue, indicating no more items will be added.TN)r	   r   r   r   r   )r
   r   r   r   close&   s    

zDelayedQueue.closec                 C   s   | j   t| jdkr*| js*| j   q
| jr>| j   dS | jd \}}}| j   |r|| j t  }|dkrt	| || j t  }qn| j
L t| jdkr| jd d |u r| j  |W  d   S W d   q 1 s0    Y  q dS )zwRemove and return an element from the queue, or this queue has been
        closed raise the Closed exception.
        r   N)r   r   lenr   r	   waitr   r   r   sleepr   popleft)r
   headZinsert_timer   Z	time_leftr   r   r   get.   s"    



 
zDelayedQueue.getc                 C   sj   | j P t| jD ]4\}\}}}||r| j|= |  W  d   S qW d   n1 s\0    Y  dS )zVRemove and return the first items for which predicate is True,
        ignoring delay.N)r   	enumerater   )r
   Z	predicateielemtr   r   r   r   removeK   s    6zDelayedQueue.removeN)F)__name__
__module____qualname__r   r   r   r   r!   r   r   r   r   r      s
   
r   )r   r   collectionsr   r   r   r   r   r   <module>   s   