
    tniG                       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#dS )    )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_filterevent_queuer   watchr   r   floatr   "list[type[FileSystemEvent]] | NonereturnNonec                   t                                          ||||           t          j                    | _        d | _        d S )Nr   )super__init__	threadingLock_lock_whandle)selfr    r!   r   r   	__class__s        f/var/www/html/gpu-tools/venv/lib/python3.11/site-packages/watchdog/observers/read_directory_changes.pyr(   zWindowsApiEmitter.__init__$   s@     	eW<XXX^%%
'+    c                B    t          | j        j                  | _        d S N)r   r!   pathr,   r-   s    r/   on_thread_startz!WindowsApiEmitter.on_thread_start0   s    ,TZ_==r0   PyPyc                j    ddl m} t                                                        |d           dS )z7PyPy needs some time before receiving events, see #792.r   )sleepg{Gz?N)timer8   r'   start)r-   r8   r.   s     r/   r:   zWindowsApiEmitter.start5   s7    """"""GGMMOOOE$KKKKKr0   c                @    | j         rt          | j                    d S d S r2   )r,   r   r4   s    r/   on_thread_stopz WindowsApiEmitter.on_thread_stop<   s,    = 	2"4=11111	2 	2r0   list[WinAPINativeEvent]c                j    | j         sg S t          | j         | j        j        | j        j                  S )N)	recursive)r,   r   r!   r3   is_recursiver4   s    r/   _read_eventszWindowsApiEmitter._read_events@   s1    } 	I4=$*/TZE\]]]]r0   c                   |                                  }| j        5  d}|D ].}t          j                            | j        j        |j                  }|j        r|}<|j        r|}|}t          j        	                    |          rX| 
                    t          ||                     | j        j        r(t          ||          D ]}| 
                    |           | 
                    t          ||                     |j        rJ| 
                    t          j        	                    |          rt           nt"          |                     3|j        rt          j        	                    |          }| 
                     |rt&          nt(          |                     |r3| j        j        r't+          |          D ]}	| 
                    |	           |j        r$| 
                    t/          |                     |j        r@| 
                    t3          | j        j                             |                                  0	 d d d            d S # 1 swxY w Y   d S )N )rA   r+   osr3   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_eventrF   	dest_pathsub_moved_eventrI   sub_created_events
             r/   queue_eventszWindowsApiEmitter.queue_eventsE   s   ))++Z 	  	 $&! -    7<<
9NOO.  ,4))!0   (I4Hw}}Y// N((x)K)KLLL:2 B3LXW`3a3a B B $ 0 0 A A A A(())L)LMMMM!-  $$"'--:Q:Q&h&6&6Whjr%s%stttt!* 
 GMM(33E$$&T&TooDTV^%_%_``` @!8 @1LX1V1V @ @- ,,->????!,  $$%5h%?%?@@@@!1  $$_TZ_%E%EFFFIIKKK7 	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	 s   H5II#&I#)
r    r   r!   r   r   r"   r   r#   r$   r%   )r$   r%   )r$   r=   r   r"   r$   r%   )__name__
__module____qualname____doc__r   r(   r5   platformpython_implementationr:   r<   rA   rV   __classcell__r.   s   @r/   r   r      s          1;?
, 
, 
, 
, 
, 
, 
, 
,> > > > &x%''611	 	 	 	 	 	2 2 2 2^ ^ ^ ^
               r0   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   r   r"   r$   r%   c               X    t                                          t          |           d S )Nrb   )r'   r(   r   )r-   r   r.   s     r/   r(   zWindowsApiObserver.__init__l   s'    *G<<<<<r0   rW   )rX   rY   rZ   r[   r   r(   r^   r_   s   @r/   ra   ra   g   sW          ,D = = = = = = = = = = = =r0   ra   )$
__future__r   os.pathrD   r\   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   ra    r0   r/   <module>rl      s   " " " " " "                                          q p p p p p p p p p p p _ _ _ _ _ _ _ _ _ _ <&&&&&&//////@@@@@@@@;;;;;;E  E  E  E  E  E  E  E P= = = = = = = = = =r0   