
    gs-                    P   d Z ddlmZ ddlZddlZddlmZmZmZm	Z	m
Z
mZ ddlmZ ddlmZ ddlmZ erddlm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
Z0dZ1dZ2dZ3dZ4dZ5 G d dejl                        Z7d3dZ8d3dZ9d3d Z: ejv                  d!      Z<e<jz                  Z=ee=_>        e8e=_?        ee
eee ej                  e       ej                  e7      e
fe=_A        e<j                  ZBeeB_>        e9eB_?        e	eee
eeefeB_A        e<j                  ZCeeC_>        efeC_A        e<j                  ZDeeD_>        e8eD_?        e ej                  e7      feD_A        e<j                  ZFeeF_>        e9eF_?        e
eee	feF_A        e<j                  ZGeeG_>        e8eG_?        efeG_A        e<j                  ZHeeH_>        e:eH_?        eeefeH_A        e<j                  ZIeeI_>        e9eI_?        eee
efeI_A        e<j                  ZJeeJ_>        e8eJ_?        ee
e
 ej                  e7      efeJ_A        e<j                  ZKeeK_>        e8eK_?        eee ej                  e7      feK_A        e<j                  ZLeeL_>        e:eL_?        eeeefeL_A         G d" d#ejl                        ZM ej                  eM      ZNeZO ed$ e!e"e#g      ZP ed% eeeeeeeeg      ZQd&ZRd'ZSd4d(ZTd5d)ZUd6d*ZVd7d+ZWd8d,ZXd9d-ZY ed./       G d0 d1             ZZd:d2Z[y);u  :module: watchdog.observers.winapi
:synopsis: Windows API-Python interface (removes dependency on ``pywin32``).
:author: theller@ctypes.org (Thomas Heller)
:author: will@willmcgugan.com (Will McGugan)
:author: ryan@rfk.id.au (Ryan Kelly)
:author: yesudeep@gmail.com (Yesudeep Mangalapilly)
:author: thomas.amland@gmail.com (Thomas Amland)
:author: contact@tiger-222.fr (Mickaël Schoentgen)
:platforms: windows
    )annotationsN)BOOLDWORDHANDLELPCWSTRLPVOIDLPWSTR)	dataclass)reduce)TYPE_CHECKING)Any                   @      i   i   @      i  i        i  i  c                  4    e Zd ZdefdefdefdefdefdeffZy)
OVERLAPPEDInternalInternalHighOffset
OffsetHighPointerhEventN)__name__
__module____qualname__r   r   r   _fields_     N/var/www/openai/venv/lib/python3.12/site-packages/watchdog/observers/winapi.pyr   r   I   s9    	V	 	5	u	F	6Hr(   r   c                2    | st        j                         |S NctypesWinErrorvaluefuncargss      r)   _errcheck_boolr3   T   s    ooKr(   c                l    | st        j                         | t        k(  rt        j                         |S r+   )r-   r.   INVALID_HANDLE_VALUEr/   s      r)   _errcheck_handler6   Z   s-    oo$$ooKr(   c                8    | dk(  rt        j                         |S )Nl    r,   r/   s      r)   _errcheck_dwordr8   b   s    
ooKr(   kernel32c                  B    e Zd Zdefdefdefdej
                  dz  ffZy)FileNotifyInformationNextEntryOffsetActionFileNameLengthFileNamer   N)r#   r$   r%   r   r-   c_charr&   r'   r(   r)   r;   r;      s2    	E"	5	5!	fmma')	Hr(   r;   c                    | |z  S r+   r'   xys     r)   <lambda>rE          Qr(   c                    | |z  S r+   r'   rB   s     r)   rE   rE      rF   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	addressofr;   r?   offset	string_atr>   appendr=   decoder<   )read_buffern_bytesresultsfniptrfilenamenum_to_skips          r)   _parse_event_bufferrW     s    G
A+kk+u-a0s#&;&D&D&K&KK##C););<

HOOH$=>?))! N "+,/; A+ Nr(   c                ~    t        j                  t              }t        | |t        t               |j
                  |k7  S r+   )r-   create_unicode_bufferPATH_BUFFER_SIZEGetFinalPathNameByHandleWVOLUME_NAME_NTr0   )handlepathbuffs      r)   _is_observed_path_deletedr`     s3     ''(89Dfd,<nM::r(   c                 `   t        j                  d      } t        dt        t	        |       | j
                  j                  d            }t        j                  |      }t        j                  t              }t        j                  |t        j                  |      |       |j                  |fS )N.r   zutf-8)r-   rY   r;   FILE_ACTION_DELETED_SELFlenr0   encodesizeofcreate_string_bufferrZ   memmoverK   raw)r^   event
event_sizer_   s       r)   %_generate_observed_path_deleted_eventrl     s    '',D!!%=s4y$**J[J[\cJdeEu%J&&'78D
NN4))%0*=88Z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)r^   s    r)   get_directory_handlers   (  s$    ! r(   c                    	 t        | d        t        |        y # t        $ r= t        j                  t
              5  t        |        d d d        Y y # 1 sw Y   Y y xY ww xY wr+   )
CancelIoExCloseHandleOSError
contextlibsuppress	Exception)r]   s    r)   close_directory_handler{   5  sJ     64 F    + ,++ s&    "A AA A	A A c          
        t        j                  t              }t               }	 t	        | t        j
                  |      t        |      |t        t        j
                  |      dd       |j                  t        |j                        fS # t        $ rG}|j                  t        k(  r|j                  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.

    https://timgolden.me.uk/pywin32-docs/win32file__ReadDirectoryChangesW_meth.html
    Nr   )r-   rg   BUFFER_SIZEr   ReadDirectoryChangesWbyrefrd   WATCHDOG_FILE_NOTIFY_FLAGSrw   winerrorERROR_OPERATION_ABORTEDri   r`   rl   intr0   )r]   r^   	recursiveevent_buffernbyteses         r)   read_directory_changesr   >  s    
 ..{;LWFLL&&LL 		
( S...  ::00##Q&& %VT28::s0   AB 	C C4C:CCCCT)unsafe_hashc                      e Zd ZU ded<   ded<   edd       Zedd       Zedd       Zedd       Zedd	       Z	edd
       Z
y)WinAPINativeEventr   actionstrsrc_pathc                (    | j                   t        k(  S r+   )r   FILE_ACTION_CREATEDselfs    r)   is_addedzWinAPINativeEvent.is_addedb      {{111r(   c                (    | j                   t        k(  S r+   )r   FILE_ACTION_REMOVEDr   s    r)   
is_removedzWinAPINativeEvent.is_removedf  r   r(   c                (    | j                   t        k(  S r+   )r   FILE_ACTION_MODIFIEDr   s    r)   is_modifiedzWinAPINativeEvent.is_modifiedj  s    {{222r(   c                (    | j                   t        k(  S r+   )r   FILE_ACTION_RENAMED_OLD_NAMEr   s    r)   is_renamed_oldz WinAPINativeEvent.is_renamed_oldn      {{:::r(   c                (    | j                   t        k(  S r+   )r   FILE_ACTION_RENAMED_NEW_NAMEr   s    r)   is_renamed_newz WinAPINativeEvent.is_renamed_newr  r   r(   c                (    | j                   t        k(  S r+   )r   FILE_ACTION_REMOVED_SELFr   s    r)   is_removed_selfz!WinAPINativeEvent.is_removed_selfv  s    {{666r(   N)returnbool)r#   r$   r%   __annotations__propertyr   r   r   r   r   r   r'   r(   r)   r   r   ]  s    KM2 2 2 2 3 3 ; ; ; ; 7 7r(   r   c                   t        | ||      \  }}t        ||      }|D cg c]  \  }}t        ||       c}}S c c}}w )N)r   )r   rW   r   )r]   r^   r   bufr   eventsr   r   s           r)   read_eventsr   {  sE    (KKC f-FHNO4DFHfh/OOOs   =)r0   z
Any | Noner1   r   r2   r   r   r   )rP   bytesrQ   r   r   zlist[tuple[int, str]])r]   r   r^   r   r   r   )r   tuple[bytes, int])r^   r   r   r   )r]   r   r   None)r]   r   r^   r   r   r   r   r   )r]   r   r^   r   r   r   r   zlist[WinAPINativeEvent])\__doc__
__future__r   rx   r-   ctypes.wintypesr   r   r   r   r   r	   dataclassesr
   	functoolsr   typingr   r   c_void_pr0   r5   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_OVERLAPPEDro   FILE_SHARE_READFILE_SHARE_WRITEFILE_SHARE_DELETErq   r\   r   FILE_ACTION_DELETEDr   r   r   rc   FILE_ACTION_OVERFLOWFILE_ACTION_ADDEDr   r   THREAD_TERMINATEWAIT_ABANDONEDWAIT_IO_COMPLETIONWAIT_OBJECT_0WAIT_TIMEOUTr   	Structurer   r3   r6   r8   WinDLLr9   r~   restypeerrcheckPOINTERargtypesrn   rv   ru   CreateEventWCreateEventSetEventWaitForSingleObjectExCreateIoCompletionPortGetQueuedCompletionStatusPostQueuedCompletionStatusr[   r;   rJ   rr   rp   r   r}   rZ   rW   r`   rl   rs   r{   r   r   r   r'   r(   r)   <module>r      sj  	 #   H H !    'vr*00   $ "  $   % !& # $ ' !            !   ( ) 3      !!  6==$ 66  $  !/  

		FNN5FNN:
	"   "" ' 		
		
  "" y   

 $
 
FNN:
 
 ## ' 
	   " I  66  %  !0  
	"   "88 !'  "2  


		#   %>> $(  !%3  "


FNN:	&  " &@@ %)  "&4  #
		FNN:	'  # %>> $)  !%4  "

			&  "F,,  	,-
 1 "  $$#%%#&#	 (    
 /> t7 7 7:Pr(   