o
    h7
                     @  s`   d Z ddlmZ ddlZddlZddlmZ ddlmZm	Z	m
Z
 e
dZG dd de	e ZdS )	u   :module: watchdog.utils.delayed_queue
:author: thomas.amland@gmail.com (Thomas Amland)
:author: contact@tiger-222.fr (Mickaël Schoentgen)
    )annotationsN)deque)CallableGenericTypeVarTc                   @  sD   e Zd ZdddZdddddZdddZdddZdddZdS )DelayedQueuedelayfloatreturnNonec                 C  s0   || _ t | _t| j| _t | _d| _d S )NF)		delay_sec	threadingLock_lock	Condition
_not_emptyr   _queue_closed)selfr	    r   P/var/www/vscode/kcb/lib/python3.10/site-packages/watchdog/utils/delayed_queue.py__init__   s
   

zDelayedQueue.__init__F)r	   elementr   boolc                C  s8   | j   | j|t |f | j  | j   dS )zAdd element to queue.N)r   acquirer   appendtimer   notifyrelease)r   r   r	   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.closeT | Nonec                 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.get	predicateCallable[[T], bool]c                 C  sj   | j ( t| jD ]\}^}}||r"| j|= |  W  d   S q	W d   dS 1 s.w   Y  dS )z_Remove and return the first items for which predicate is True,
        ignoring delay.
        N)r   	enumerater   )r   r+   ielem_r   r   r   removeD   s   
zDelayedQueue.removeN)r	   r
   r   r   )r   r   r	   r   r   r   )r   r   )r   r"   )r+   r,   r   r"   )__name__
__module____qualname__r   r    r!   r*   r1   r   r   r   r   r      s    


r   )__doc__
__future__r   r   r   collectionsr   typingr   r   r   r   r   r   r   r   r   <module>   s    