
    "d                       d dl mZ d dlZd dlZd dlZd dlZd dl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 ej                  j1                  d      s
J e d       d dlmZmZmZ dZ G d	 d
e      Z G d de      Z y)    )annotationsN)
DirCreatedEventDirDeletedEventDirModifiedEventDirMovedEventFileCreatedEventFileDeletedEventFileModifiedEventFileMovedEventgenerate_sub_created_eventsgenerate_sub_moved_events)DEFAULT_EMITTER_TIMEOUTDEFAULT_OBSERVER_TIMEOUTBaseObserverEventEmitterwinz requires Windows)close_directory_handleget_directory_handleread_events   c                  p     e Zd ZdZef fd	Zd Z ej                         dk(  r fdZ	d Z
d Zd Z xZS )	WindowsApiEmitterzr
    Windows API-based emitter that uses ReadDirectoryChangesW
    to detect file system changes for a watch.
    c                h    t         |   |||       t        j                         | _        d | _        y N)super__init__	threadingLock_lock_handle)selfevent_queuewatchtimeout	__class__s       K/usr/lib/python3/dist-packages/watchdog/observers/read_directory_changes.pyr   zWindowsApiEmitter.__init__5   s)    eW5^^%
    c                L    t        | j                  j                        | _        y r   )r   r#   pathr    r!   s    r&   on_thread_startz!WindowsApiEmitter.on_thread_start:   s    +DJJOO<r'   PyPyc                L    t         |           t        j                  d       y)z7PyPy needs some time before receiving events, see #792.g{Gz?N)r   starttimesleep)r!   r%   s    r&   r.   zWindowsApiEmitter.start?   s    GMOJJtr'   c                H    | j                   rt        | j                          y y r   )r    r   r*   s    r&   on_thread_stopz WindowsApiEmitter.on_thread_stopD   s    <<"4<<0 r'   c                    t        | j                  | j                  j                  | j                  j                        S r   )r   r    r#   r)   is_recursiver*   s    r&   _read_eventszWindowsApiEmitter._read_eventsH   s'    4<<$**:Q:QRRr'   c                j   | j                         }| j                  5  d}|D ]y  }t        j                  j	                  | j
                  j                  |j                        }|j                  r|}Q|j                  r|}|}t        j                  j                  |      rot        ||      }| j
                  j                  r;t        j                  t               t        ||      D ]  }| j!                  |        | j!                  |       | j!                  t#        ||             |j$                  rDt        j                  j                  |      rt&        nt(        }	| j!                   |	|             \|j*                  rt        j                  j                  |      }
|
rt,        nt.        }	| j!                   |	|             |
s| j
                  j                  st        j                  t               t1        |      }|D ]  }| j!                  |        |j2                  r| j!                  t5        |             .|j6                  s<| j!                  t9        | j
                  j                               | j;                          | 	 d d d        y # 1 sw Y   y xY w)N )r5   r   osr)   joinr#   src_pathis_renamed_oldis_renamed_newisdirr   r4   r/   r0   !WATCHDOG_TRAVERSE_MOVED_DIR_DELAYr   queue_eventr   is_modifiedr   r
   is_addedr   r   r   
is_removedr	   is_removed_selfr   stop)r!   r$   winapi_eventslast_renamed_src_pathwinapi_eventr:   	dest_patheventsub_moved_eventclsr=   
sub_eventssub_created_events                r&   queue_eventszWindowsApiEmitter.queue_eventsK   s   ))+ZZ 7	 $&! - 5 77<<

9N9NO..,4)!00 (I4Hww}}Y/ -h	 B::22
 !JJ'HI 4M ()4 B !% 0 0 AB ((/(())LM!-- 77==2 ). 
 $$S]3!**GGMM(3E-2/8HC$$S]3!8!8 

#DE%@%J
1; @- ,,->?@!,,$$%5h%?@!11$$_TZZ__%EFIIKk5 7	  7	  7	 s    F3J)J)*A2J)AJ))J2)__name__
__module____qualname____doc__r   r   r+   platformpython_implementationr.   r2   r5   rN   __classcell__r%   s   @r&   r   r   /   sB    
 4K 
= &x%%'61	
1S9 r'   r   c                  &     e Zd ZdZef fd	Z xZS )WindowsApiObserverzi
    Observer thread that schedules watching directories and dispatches
    calls to event handlers.
    c                0    t         |   t        |       y )N)emitter_classr$   )r   r   r   )r!   r$   r%   s     r&   r   zWindowsApiObserver.__init__   s    '8'Jr'   )rO   rP   rQ   rR   r   r   rU   rV   s   @r&   rX   rX      s    
  8 K Kr'   rX   )!
__future__r   os.pathr8   rS   sysr   r/   watchdog.eventsr   r   r   r   r   r	   r
   r   r   r   watchdog.observers.apir   r   r   r   
startswithrO   watchdog.observers.winapir   r   r   r>   r   rX    r'   r&   <module>rc      s   " #   
     q p
||u% E(3D'E E% _ _ %& !U  U pK Kr'   