o
    *ήc(                     @   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	threadingLock_lock	Condition
_not_emptyr   _queue_closed)selfdelay r   C/tmp/pip-target-vg8gfxp4/lib/python/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   t| jdkr| jr| jr)| j   dS | jd \}}}| j   |rW|| j t  }|dkrWt	| || j t  }|dksE| j
& t| jdkry| jd d |u ry| j  |W  d   S W d   n1 sw   Y  q)zwRemove and return an element from the queue, or this queue has been
        closed raise the Closed exception.
        Tr   N)r	   r   lenr
   r   waitr   r   r   sleepr   popleft)r   headinsert_timer   	time_leftr   r   r   get.   s0   




 
 zDelayedQueue.getc                 C   sl   | j ) t| jD ]\}\}}}||r#| j|= |  W  d   S q	W d   dS 1 s/w   Y  dS )zVRemove and return the first items for which predicate is True,
        ignoring delay.N)r   	enumerater
   )r   	predicateielemtr   r   r   r   removeK   s   
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   