
    "dr5                       d dl mZ d dlZd dlmZ ej
                  j                  d      s
J e d       d dlZ	e	j                  j                  Z e	j                  d      j                  ZdZdZd	Zd
ZdZdZdZdZdZdZdZdZdZd	ZdZdZdZdZ dZ!d	Z"dZ#dZ$dZ%eZ&e Z'e$Z(dZ)dZ*dZ+d Z,dZ-dZ. G d de	j^                        Z0d Z1d Z2d Z3 e	jh                  d      Z5e5jl                  Z6e	j                  jn                  e6_8        e1e6_9        e	j                  jt                  ee	j                  jv                  e	j                  jn                  e	j                  jv                   e	jx                  e	j                  jv                         e	jx                  e0      efe6_=        e5j|                  Z>e	j                  jt                  e>_8        e2e>_9        e	j                  j~                  e	j                  jv                  e	j                  jv                  ee	j                  jv                  e	j                  jv                  e	j                  jt                  fe>_=        e5j                  Z@e	j                  jn                  e@_8        e	j                  jt                  fe@_=        e5j                  ZAe	j                  jn                  eA_8        e1eA_9        e	j                  jt                   e	jx                  e0      feA_=        e5j                  ZCe	j                  jt                  eC_8        e2eC_9        ee	j                  jn                  e	j                  jn                  e	j                  j~                  feC_=        e5j                  ZDe	j                  jn                  eD_8        e1eD_9        e	j                  jt                  feD_=        e5j                  ZEe	j                  jv                  eE_8        e3eE_9        e	j                  jt                  e	j                  jv                  e	j                  jn                  feE_=        e5j                  ZFe	j                  jt                  eF_8        e2eF_9        e	j                  jt                  e	j                  jt                  ee	j                  jv                  feF_=        e5j                  ZGe	j                  jn                  eG_8        e1eG_9        e	j                  jt                  ee e	jx                  e0      e	j                  jv                  feG_=        e5j                  ZHe	j                  jn                  eH_8        e1eH_9        e	j                  jt                  e	j                  jv                  e	j                  jv                   e	jx                  e0      feH_=        e5j                  ZIe	j                  jv                  eI_8        e3eI_9        e	j                  jt                  e	j                  j                  e	j                  jv                  e	j                  jv                  feI_=         G d d e	j^                        ZK e	jx                  eK      ZLeZM ed! eeeg      ZN ed" eeeeeeeeg      ZOd#ZPd$ZQd% ZRd& ZSd' ZTd( ZUd) ZVd* ZW G d+ d,      ZXd- ZYy).    )annotationsN)reducewinz requires Windows                   @      i   i   @      i  i        i  i  c                      e Zd Zdefdefdej
                  j                  fdej
                  j                  fdefdej
                  j                  fgZy)
OVERLAPPEDInternalInternalHighOffset
OffsetHighPointerhEventN)	__name__
__module____qualname__LPVOIDctypeswintypesDWORDHANDLE_fields_     ;/usr/lib/python3/dist-packages/watchdog/observers/winapi.pyr   r   `   sW    	V	 	6??(()	v,,-	F	6??))*Hr%   r   c                2    | st        j                         |S Nr   WinErrorvaluefuncargss      r&   _errcheck_boolr/   k   s    ooKr%   c                l    | st        j                         | t        k(  rt        j                         |S r(   )r   r*   INVALID_HANDLE_VALUEr+   s      r&   _errcheck_handler2   q   s-    oo$$ooKr%   c                8    | dk(  rt        j                         |S )Nl    r)   r+   s      r&   _errcheck_dwordr4   y   s    
ooKr%   kernel32c                      e Zd Zdej                  j
                  fdej                  j
                  fdej                  j
                  fdej                  dz  fgZy)FILE_NOTIFY_INFORMATIONNextEntryOffsetActionFileNameLengthFileNamer   N)r   r   r   r   r    r!   c_charr#   r$   r%   r&   r7   r7      sP    	FOO112	6??(()	6??001	fmma')Hr%   r7   c                    | |z  S r(   r$   xys     r&   <lambda>rA      
    Q r%   c                    | |z  S r(   r$   r>   s     r&   rA   rA     rB   r%   i   i   c                   g }|dkD  rt        j                  | t              d   }t        j                  |      t        j
                  j                  z   }t        j                  ||j                        }|j                  |j                  |j                  d      f       |j                  }|dk  r	 |S | |d  } ||z  }|dkD  r|S )Nr   zutf-16)r   castLPFNI	addressofr7   r;   offset	string_atr:   appendr9   decoder8   )
readBuffernBytesresultsfniptrfilename	numToSkips          r&   _parse_event_bufferrS     s    G
1*kk*e,Q/s#&=&F&F&M&MM##C););<

HOOH$=>?''	> N  	
+
) 1* Nr%   c                ~    t        j                  t              }t        | |t        t               |j
                  |k7  S r(   )r   create_unicode_bufferPATH_BUFFER_SIZEGetFinalPathNameByHandleWVOLUME_NAME_NTr,   )handlepathbuffs      r&   _is_observed_path_deletedr\   .  s3     ''(89Dfd,<nM::r%   c                 L   t        j                  d      } t        dt        t	        |       | j
                  j                  d            }t        j                  |      }t        j                  t              }t        j                  |t        j                  |      |       ||fS )N.r   zutf-8)r   rU   r7   FILE_ACTION_DELETED_SELFlenr,   encodesizeofcreate_string_bufferrV   memmoverG   )rZ   event
event_sizer[   s       r&   %_generate_observed_path_deleted_eventrg   7  s    '',D#	#SY

0A0A'0JE u%J&&'78D
NN4))%0*=r%   c           	     D    t        | t        t        dt        t        d      S )z9Returns a Windows handle to the specified directory path.N)CreateFileWFILE_LIST_DIRECTORYWATCHDOG_FILE_SHARE_FLAGSOPEN_EXISTINGWATCHDOG_FILE_FLAGS)rZ   s    r&   get_directory_handlern   C  s$    ! r%   c                    	 t        | d        t        |        y # t        $ r 	 t        |        Y y # t        $ r Y Y y w xY ww xY wr(   )
CancelIoExCloseHandleOSError	Exception)rY   s    r&   close_directory_handlert   P  sG    64 F 	 		s    	A1	>A>Ac           
        t        j                  t              }t         j                  j	                         }	 t        | t        j                  |      t        |      |t        t        j                  |      dd       |j                  t        |j                         fS # t        $ r>}|j                  t        k(  r	g dfcY d}~S t        | |      rt               cY d}~S |d}~ww xY w)zRead changes to the directory using the specified directory handle.

    http://timgolden.me.uk/pywin32-docs/win32file__ReadDirectoryChangesW_meth.html
    Nr   )r   rc   BUFFER_SIZEr    r!   ReadDirectoryChangesWbyrefr`   WATCHDOG_FILE_NOTIFY_FLAGSrr   winerrorERROR_OPERATION_ABORTEDr\   rg   rawintr,   )rY   rZ   	recursiveevent_buffernbyteses         r&   read_directory_changesr   [  s    
 ..{;L__""$FLL&&LL 		
( S...  ::00q5L %VT28::s0   AB 	C&(C!>C&C!C&C!!C&c                  x    e Zd Zd Zed        Zed        Zed        Zed        Zed        Z	ed        Z
d Zy	)
WinAPINativeEventc                     || _         || _        y r(   )actionsrc_path)selfr   r   s      r&   __init__zWinAPINativeEvent.__init__{  s     r%   c                (    | j                   t        k(  S r(   )r   FILE_ACTION_CREATEDr   s    r&   is_addedzWinAPINativeEvent.is_added      {{111r%   c                (    | j                   t        k(  S r(   )r   FILE_ACTION_REMOVEDr   s    r&   
is_removedzWinAPINativeEvent.is_removed  r   r%   c                (    | j                   t        k(  S r(   )r   FILE_ACTION_MODIFIEDr   s    r&   is_modifiedzWinAPINativeEvent.is_modified  s    {{222r%   c                (    | j                   t        k(  S r(   )r   FILE_ACTION_RENAMED_OLD_NAMEr   s    r&   is_renamed_oldz WinAPINativeEvent.is_renamed_old      {{:::r%   c                (    | j                   t        k(  S r(   )r   FILE_ACTION_RENAMED_NEW_NAMEr   s    r&   is_renamed_newz WinAPINativeEvent.is_renamed_new  r   r%   c                (    | j                   t        k(  S r(   )r   FILE_ACTION_REMOVED_SELFr   s    r&   is_removed_selfz!WinAPINativeEvent.is_removed_self  s    {{666r%   c                h    dt        |       j                   d| j                   d| j                  dS )N<z	: action=z, src_path=>)typer   r   r   r   s    r&   __repr__zWinAPINativeEvent.__repr__  s4    T
##$Idkk]+dmmEVVWX	
r%   N)r   r   r   r   propertyr   r   r   r   r   r   r   r$   r%   r&   r   r   z  s    ! 2 2 2 2 3 3 ; ; ; ; 7 7
r%   r   c                    t        | ||      \  }}t        ||      }|D cg c]  \  }}t        ||       c}}S c c}}w r(   )r   rS   r   )rY   rZ   r~   bufr   eventsr   r   s           r&   read_eventsr     sA    (yAKC f-FHNO4DFHfh/OOOs   <)Z
__future__r   sys	functoolsr   platform
startswithr   ctypes.wintypesr   r    r   c_void_pr,   r1   FILE_NOTIFY_CHANGE_FILE_NAMEFILE_NOTIFY_CHANGE_DIR_NAMEFILE_NOTIFY_CHANGE_ATTRIBUTESFILE_NOTIFY_CHANGE_SIZEFILE_NOTIFY_CHANGE_LAST_WRITEFILE_NOTIFY_CHANGE_LAST_ACCESSFILE_NOTIFY_CHANGE_CREATIONFILE_NOTIFY_CHANGE_SECURITYFILE_FLAG_BACKUP_SEMANTICSFILE_FLAG_OVERLAPPEDrj   FILE_SHARE_READFILE_SHARE_WRITEFILE_SHARE_DELETErl   rX   r   FILE_ACTION_DELETEDr   r   r   r_   FILE_ACTION_OVERFLOWFILE_ACTION_ADDEDr   r   THREAD_TERMINATEWAIT_ABANDONEDWAIT_IO_COMPLETIONWAIT_OBJECT_0WAIT_TIMEOUTr{   	Structurer   r/   r2   r4   WinDLLr5   rw   BOOLrestypeerrcheckr"   r!   POINTERargtypesri   LPCWSTRrq   rp   CreateEventWCreateEventSetEventWaitForSingleObjectExCreateIoCompletionPortGetQueuedCompletionStatusPostQueuedCompletionStatusrW   LPWSTRr7   rF   rm   rk   ry   rv   rV   rS   r\   rg   rn   rt   r   r   r   r$   r%   r&   <module>r      s%  J # 
 
||u% E(3D'E E% 			 'vr*00   $ "  $   % !& # $ ' !            !   ( ) 3      !!  6==$ 66  & 4 4  !/  
OO

OO
OO
OOFNN6??(()FNN:
	"   ""oo,, ' 
OO
OO
OO

OO
OO
OO  ""oo** ..0   
__))
 $
 
OOFNN:
 
 ##oo,, ' 

OO
OO
OO	  ??'' " __++-  66  & 5 5  !0  
OO
OO
OO"   "88 !'!7!7  "2  
OO
OO

OO	#   %>> $*OO$8$8  !%3  "
OO

FNN:
OO&  " &@@ %+__%9%9  "&4  #
OO
OO
OOFNN:	'  # %>> $*OO$9$9  !%4  "
OO
OO
OO
OO	&  "f..  	./
 1 "  $$#%%#&#	 (    	
/> 
  
FPr%   