
    gG                        d dl mZ d dlZd dlZd dlZd dlmZ d dlm	Z	m
Z
mZmZmZmZmZmZmZmZ d dlmZmZmZmZ d dlmZmZmZ erd dlmZ d dlmZ d d	lmZm Z  d d
lm!Z!  G d de      Z" G d de      Z#y)    )annotationsN)TYPE_CHECKING)
DirCreatedEventDirDeletedEventDirModifiedEventDirMovedEventFileCreatedEventFileDeletedEventFileModifiedEventFileMovedEventgenerate_sub_created_eventsgenerate_sub_moved_events)DEFAULT_EMITTER_TIMEOUTDEFAULT_OBSERVER_TIMEOUTBaseObserverEventEmitter)close_directory_handleget_directory_handleread_events)HANDLE)FileSystemEvent)
EventQueueObservedWatch)WinAPINativeEventc                       e Zd ZdZedd	 	 	 	 	 	 	 	 	 d fdZddZ ej                         dk(  rd fdZ	ddZ
dd	Zdd
Z xZS )WindowsApiEmitterzmWindows API-based emitter that uses ReadDirectoryChangesW
    to detect file system changes for a watch.
    Ntimeoutevent_filterc               l    t         |   ||||       t        j                         | _        d | _        y )Nr   )super__init__	threadingLock_lock_whandle)selfevent_queuewatchr   r   	__class__s        ^/var/www/openai/venv/lib/python3.12/site-packages/watchdog/observers/read_directory_changes.pyr"   zWindowsApiEmitter.__init__$   s0     	eW<X^^%
'+    c                L    t        | j                  j                        | _        y N)r   r)   pathr&   r'   s    r+   on_thread_startz!WindowsApiEmitter.on_thread_start0   s    ,TZZ__=r,   PyPyc                >    ddl m} t        |            |d       y)z7PyPy needs some time before receiving events, see #792.r   )sleepg{Gz?N)timer4   r!   start)r'   r4   r*   s     r+   r6   zWindowsApiEmitter.start5   s    "GMO$Kr,   c                H    | j                   rt        | j                          y y r.   )r&   r   r0   s    r+   on_thread_stopz WindowsApiEmitter.on_thread_stop<   s    =="4==1 r,   c                    | j                   sg S t        | j                   | j                  j                  | j                  j                        S )N)	recursive)r&   r   r)   r/   is_recursiver0   s    r+   _read_eventszWindowsApiEmitter._read_events@   s3    }}I4==$**//TZZE\E\]]r,   c                   | j                         }| j                  5  d}|D ]>  }t        j                  j	                  | j
                  j                  |j                        }|j                  r|}Q|j                  r|}|}t        j                  j                  |      rU| j                  t        ||             | j
                  j                  st        ||      D ]  }| j                  |        | j                  t        ||             |j                  rA| j                  t        j                  j                  |      rt         nt"        |             >|j$                  rt        j                  j                  |      }| j                   |rt&        nt(        |             |s| j
                  j                  st+        |      D ]  }	| j                  |	        |j,                  r| j                  t/        |             |j0                  s| j                  t3        | j
                  j                               | j5                          A 	 d d d        y # 1 sw Y   y xY w)N )r<   r%   osr/   joinr)   src_pathis_renamed_oldis_renamed_newisdirqueue_eventr   r;   r   r   is_modifiedr   r   is_addedr   r	   r   
is_removedr
   is_removed_selfr   stop)
r'   r   winapi_eventslast_renamed_src_pathwinapi_eventrA   	dest_pathsub_moved_eventrD   sub_created_events
             r+   queue_eventszWindowsApiEmitter.queue_eventsE   s   ))+ZZ$&! -77<<

9N9NO..,4)!00 (I4Hww}}Y/((x)KL::223LXW`3a $ 0 0 A 4b (())LM!--$$"''--:Q&6Whjr%st!**GGMM(3E$$&ToDTV^%_`!8!81LX1V- ,,->? 2W!,,$$%5h%?@!11$$_TZZ__%EFIIK7 !. ZZs'   B6I.CI.2I.
AI.#AI..I7)
r(   r   r)   r   r   floatr   z"list[type[FileSystemEvent]] | NonereturnNone)rS   rT   )rS   zlist[WinAPINativeEvent]r   rR   rS   rT   )__name__
__module____qualname____doc__r   r"   r1   platformpython_implementationr6   r8   r<   rQ   __classcell__r*   s   @r+   r   r      st     1;?
,
, 
,
 
, 9
, 

,> &x%%'61	2^
 r,   r   c                  *     e Zd ZdZedd fdZ xZS )WindowsApiObserverzdObserver thread that schedules watching directories and dispatches
    calls to event handlers.
    r   c               0    t         |   t        |       y )Nr`   )r!   r"   r   )r'   r   r*   s     r+   r"   zWindowsApiObserver.__init__l   s    *G<r,   rU   )rV   rW   rX   rY   r   r"   r\   r]   s   @r+   r_   r_   g   s     ,D = =r,   r_   )$
__future__r   os.pathr?   rZ   r#   typingr   watchdog.eventsr   r   r   r   r	   r
   r   r   r   r   watchdog.observers.apir   r   r   r   watchdog.observers.winapir   r   r   ctypes.wintypesr   r   r   r   r   r   r_    r,   r+   <module>rj      s\    "        q p _ _&/@;E  E P= =r,   