
    $g                       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        i/var/www/html/netbox-4.1.3/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 ]3}t          j                            | j        j        |j                  }|j        r|}<|j        r|}|}t          j        	                    |          rX| 
                    t          ||                     | j        j        r(t          ||          D ]}| 
                    |           | 
                    t          ||                     |j        rMt          j        	                    |          rt           nt"          }| 
                     ||                     6|j        rt          j        	                    |          }	|	rt&          nt(          }| 
                     ||                     |	r3| j        j        r't+          |          D ]}
| 
                    |
           |j        r$| 
                    t/          |                     |j        r@| 
                    t3          | j        j                             |                                  5	 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_eventclsrI   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!-  .0gmmH.E.E\**K\C$$SS]]3333!*  GMM(33E-2H//8HC$$SS]]333 @!8 @1LX1V1V @ @- ,,->????!,  $$%5h%?%?@@@@!1  $$_TZ_%E%EFFFIIKKK; 	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	 s   H:I$$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   rW   __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 )Nrc   )r'   r(   r   )r-   r   r.   s     r/   r(   zWindowsApiObserver.__init__n   s'    *G<<<<<r0   rX   )rY   rZ   r[   r\   r   r(   r_   r`   s   @r/   rb   rb   i   sW          ,D = = = = = = = = = = = =r0   rb   )$
__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   rb    r0   r/   <module>rm      s   " " " " " "                                          q p p p p p p p p p p p _ _ _ _ _ _ _ _ _ _ <&&&&&&//////@@@@@@@@;;;;;;G  G  G  G  G  G  G  G T= = = = = = = = = =r0   