
    Ki                        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        u/home/jay/workspace/scripts/.codegraph-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 ]C  }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                  rDt        j                  j                  |      rt         nt"        }| j                   ||             A|j$                  rt        j                  j                  |      }	|	rt&        nt(        }| j                   ||             |	s| j
                  j                  st+        |      D ]  }
| j                  |
        |j,                  r| j                  t/        |             |j0                  s| j                  t3        | j
                  j                               | j5                          F 	 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_eventclsrD   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 B $ 0 0 AB (())LM!--.0ggmmH.E*K\C$$S]3!**GGMM(3E-2/8HC$$S]3!8!81LX1V @- ,,->?@!,,$$%5h%?@!11$$_TZZ__%EFIIK; 	  	  	 s'   B6I3C!I37I3AI3(AI33I<)
r(   r   r)   r   r   floatr   z"list[type[FileSystemEvent]] | NonereturnNone)rT   rU   )rT   zlist[WinAPINativeEvent]r   rS   rT   rU   )__name__
__module____qualname____doc__r   r"   r1   platformpython_implementationr6   r8   r<   rR   __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 )Nra   )r!   r"   r   )r'   r   r*   s     r+   r"   zWindowsApiObserver.__init__n   s    *G<r,   rV   )rW   rX   rY   rZ   r   r"   r]   r^   s   @r+   r`   r`   i   s     ,D = =r,   r`   )$
__future__r   os.pathr?   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   r`    r,   r+   <module>rk      s\    "        q p _ _&/@;G  G T= =r,   