
    g7
                    p    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e	e         Zy)	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                  :    e Zd Zd	dZddd
dZddZddZddZy)DelayedQueuec                    || _         t        j                         | _        t        j                  | j                        | _        t               | _        d| _        y )NF)		delay_sec	threadingLock_lock	Condition
_not_emptyr   _queue_closed)selfdelays     Q/var/www/openai/venv/lib/python3.12/site-packages/watchdog/utils/delayed_queue.py__init__zDelayedQueue.__init__   s=    ^^%
#--djj949G    F)r   c                   | j                   j                          | j                  j                  |t	        j                         |f       | j
                  j                          | j                   j                          y)zAdd element to queue.N)r   acquirer   appendtimer   notifyrelease)r   elementr   s      r   putzDelayedQueue.put   sQ    

GTYY[%89 

r   c                    d| _         | j                  j                          | j                  j                          | j                  j	                          y)z4Close queue, indicating no more items will be added.TN)r   r   r   r   r   )r   s    r   closezDelayedQueue.close   s9    ! !r   c                b   	 | j                   j                          t        | j                        dk(  rK| j                  s?| j                   j                          t        | j                        dk(  r| j                  s?| j                  r| j                   j                          y| j                  d   \  }}}| j                   j                          |rh|| j                  z   t        j                         z
  }|dkD  r?t        j                  |       || j                  z   t        j                         z
  }|dkD  r?| j                  5  t        | j                        dkD  r9| j                  d   d   |u r%| j                  j                          |cddd       S ddd       # 1 sw Y   xY w)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   headinsert_timer   	time_lefts        r   getzDelayedQueue.get'   sA    OO##%dkk"a'$$& dkk"a' ||'')'+{{1~$D+uOO##% '$..8499;F	!mJJy) +dnn <tyy{ JI  !m
 t{{#a'DKKN1,=,EKK'') ) ( s   	AF%%F.c                    | j                   5  t        | j                        D ])  \  }^}} ||      s| j                  |= |c cddd       S  	 ddd       y# 1 sw Y   yxY w)z_Remove and return the first items for which predicate is True,
        ignoring delay.
        N)r   	enumerater   )r   	predicateielem_s        r   removezDelayedQueue.removeD   sW     ZZ!*4;;!7:D1T?AK	 Z!7 
  
 s   &AAAA"N)r   floatreturnNone)r   r   r   boolr4   r5   )r4   r5   )r4   T | None)r.   zCallable[[T], bool]r4   r7   )__name__
__module____qualname__r   r    r"   r+   r2    r   r   r
   r
      s      05 " :	r   r
   )__doc__
__future__r   r   r   collectionsr   typingr   r   r   r   r
   r;   r   r   <module>r@      s7   
 #    - -CL=71: =r   