
    zc#                     |   d Z ddl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 ddlmZmZmZm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 ddlm Z m!Z!m"Z"m#Z#m$Z$m%Z%m&Z&m'Z'm(Z(m)Z)m*Z*m+Z+m,Z,m-Z-m.Z.  ej/        e0          Z1 G d d	e          Z2 G d
 d          Z3 G d de          Z4 G d de          Z5dS )zk
:module: watchdog.observers.fsevents2
:synopsis: FSEvents based emitter implementation.
:platforms: macOS
    N)Thread)FileDeletedEventFileModifiedEventFileCreatedEventFileMovedEventDirDeletedEventDirModifiedEventDirCreatedEventDirMovedEvent)BaseObserverEventEmitterDEFAULT_EMITTER_TIMEOUTDEFAULT_OBSERVER_TIMEOUT)	FSEventStreamCreateCFRunLoopGetCurrent FSEventStreamScheduleWithRunLoopFSEventStreamStartCFRunLoopRunCFRunLoopStopFSEventStreamStopFSEventStreamInvalidateFSEventStreamRelease)kCFAllocatorDefaultkCFRunLoopDefaultModekFSEventStreamEventIdSinceNowkFSEventStreamCreateFlagNoDefer"kFSEventStreamCreateFlagFileEvents"kFSEventStreamEventFlagItemCreated"kFSEventStreamEventFlagItemRemoved'kFSEventStreamEventFlagItemInodeMetaMod"kFSEventStreamEventFlagItemRenamed#kFSEventStreamEventFlagItemModified(kFSEventStreamEventFlagItemFinderInfoMod&kFSEventStreamEventFlagItemChangeOwner#kFSEventStreamEventFlagItemXattrMod kFSEventStreamEventFlagItemIsDir$kFSEventStreamEventFlagItemIsSymlinkc                   0    e Zd ZdZd Zd Zd Zd Zd ZdS )FSEventsQueuez Low level FSEvents client. c           
         t          j        |            t          j                    | _        d | _        t          |t                    rt          j	        |          }t          j        d|          | _        d }d}t          t          | j        || j        gt           |t"          t$          z            | _        | j        t)          d          d S )NNFCg      ?z"FSEvents. Could not create stream.)r   __init__queueQueue_queue	_run_loop
isinstancebytesosfsdecodeunicodedata	normalize_pathr   r   	_callbackr   r   r   _stream_refOSError)selfpathcontextlatencys       <lib/python3.11/site-packages/watchdog/observers/fsevents2.pyr,   zFSEventsQueue.__init__T   s    kmmdE"" 	%;t$$D *5$77
.4:,)7+.PPR R  	@>???	@ 	@    c                 ,   t           j                                                                        }t	                      | _        t          | j        | j        t                     t          | j                  s7t          | j                   t          | j                   t          d          t                       t          | j                   t          | j                   t          | j                   ~| j                            d            d S )Nz!FSEvents. Could not start stream.)AppKitNSAutoreleasePoolallocinitr   r0   r   r9   r   r   r   r   r:   r   r   r/   put)r;   pools     r?   runzFSEventsQueue.runf   s    '--//4466,..(dn.C	E 	E 	E!$"233 	?#D$4555 !1222=>>>$*+++ 0111T-...r@   c                 @    | j         t          | j                    d S d S N)r0   r   r;   s    r?   stopzFSEventsQueue.stopx   s,    > 	*$.)))))	* 	*r@   c                     d t          |||          D             }t                              d|z             |D ]}t                              |           | j                            |           d S )Nc                 8    g | ]\  }}}t          |||          S  )NativeEvent).0r<   flags_ids       r?   
<listcomp>z+FSEventsQueue._callback.<locals>.<listcomp>}   s7     9 9 94DD%+dE3// 9 9 9r@   z!FSEvents callback. Got %d events:)ziploggerdebugr/   rF   )	r;   	streamRefclientCallBackInfo	numEvents
eventPaths
eventFlagseventIDseventses	            r?   r8   zFSEventsQueue._callback|   s~    9 9j*h779 9 989DEEE 	 	ALLOOOOr@   c                 `    |                                  sdS | j                                        S )zo
        Returns a list or one or more events, or None if there are no more
        events to be read.
        N)is_aliver/   getrK   s    r?   read_eventszFSEventsQueue.read_events   s+    
 }} 	4{   r@   N)	__name__
__module____qualname____doc__r,   rH   rL   r8   rc   rO   r@   r?   r)   r)   Q   sh        &&@ @ @$  $* * *     ! ! ! ! !r@   r)   c                   0    e Zd Zd Zed             Zd ZdS )rP   c                 `   || _         || _        || _        t          |t          z            | _        t          |t          z            | _        t          |t          z            | _	        t          |t          z            | _        t          |t          z            | _        t          |t          z            | _        t          |t           z            | _        t          |t$          z            | _        t          |t(          z            | _        t          |t,          z            | _        d S rJ   )r<   rR   event_idboolr   
is_createdr   
is_removedr!   
is_renamedr"   is_modifiedr$   is_change_ownerr    is_inode_meta_modr#   is_finder_info_modr%   is_xattr_modr'   
is_symlinkr&   is_directory)r;   r<   rR   rj   s       r?   r,   zNativeEvent.__init__   s    	
 u'IIJJu'IIJJu'IIJJ(K KLL#E,R$RSS!%e.U&U!V!V"&u/W'W"X"X )L!LMMu'KKLL )I!IJJr@   c                 r    | j         rdS | j        rdS | j        rdS | j        rdS | j        rdS | j        rdS dS )NCreatedRemovedRenamedModifiedInodeMetaModXattrModUnknown)rl   rm   rn   ro   rq   rs   rK   s    r?   _event_typezNativeEvent._event_type   sd    ? 	9? 	9? 	9 	:! 	"!> 	:yr@   c                     d}|t          |           j        t          | j                  | j        | j        t          | j                  | j        fz  S )Nz2<%s: path=%s, type=%s, is_dir=%s, flags=%s, id=%s>)	typerd   reprr<   r~   ru   hexrR   rj   )r;   ss     r?   __repr__zNativeEvent.__repr__   sJ    @DJJ'di$:J%s4:G G 	Gr@   N)rd   re   rf   r,   propertyr~   r   rO   r@   r?   rP   rP      sU        K K K   XG G G G Gr@   rP   c                   (    e Zd ZdZefdZd Zd ZdS )FSEventsEmitterzL
    FSEvents based event emitter. Handles conversion of native events.
    c                     t          j        | |||           t          |j                  | _        | j                                         d S rJ   )r   r,   r)   r<   	_fseventsstart)r;   event_queuewatchtimeouts       r?   r,   zFSEventsEmitter.__init__   sD    dK@@@&uz22r@   c                 8    | j                                          d S rJ   )r   rL   rK   s    r?   on_thread_stopzFSEventsEmitter.on_thread_stop   s    r@   c           	         | j                                         }|d S d}|t          |          k     r||         }|j        rB|dz   t          |          k     r||dz            j        r||dz            j        |j        dz   k    r|j        rt          nt          }|                      ||j	        ||dz            j	                             |                     t          t          j	                            |j	                                       |                     t          t          j	                            ||dz            j	                                       |dz  }nvt          j	                            |j	                  r~|j        rt          nt          }|                      ||j	                             |                     t          t          j	                            |j	                                       n|j        rt           nt"          }|                      ||j	                             |                     t          t          j	                            |j	                                       nV|j        s|j        s|j        r:|j        rt          nt*          }|                      ||j	                             n|j        r}|j        rt          nt          }|                      ||j	                             |                     t          t          j	                            |j	                                       n|j        r||j        rt           nt"          }|                      ||j	                             |                     t          t          j	                            |j	                                       |dz  }|t          |          k     d S d S )Nr      )r   rc   lenrn   rj   ru   r   r   queue_eventr<   r	   r3   dirnameexistsr
   r   r   r   ro   rq   rs   r   rl   rm   )r;   r   r^   ieventclss         r?   queue_eventszFSEventsEmitter.queue_events   s   ++-- 	F#f++o +	1IE
  $P ECKK' TF1q5M,D T"1q5M2enq6HHT+0+=Q-->C$$SSVAE]5G%H%HIII$$%5bgooej6Q6Q%R%RSSS$$%5bgoofQQRUmFX6Y6Y%Z%Z[[[FAAW^^EJ// T-2-?U//EUC$$SS__555$$%5bgooej6Q6Q%R%RSSSS-2-?U//EUC$$SS__555$$%5bgooej6Q6Q%R%RSSSS " Pe&= PAS P*/*<S&&BS  UZ1111! P).);QooAQ  UZ111  !1"'//%*2M2M!N!NOOOO! P).);QooAQ  UZ111  !1"'//%*2M2M!N!NOOOFAW #f++o +	 +	 +	 +	 +	r@   N)rd   re   rf   rg   r   r,   r   r   rO   r@   r?   r   r      sV          4K    
  0 0 0 0 0r@   r   c                       e Zd ZefdZdS )FSEventsObserver2c                 >    t          j        | t          |           d S )N)emitter_classr   )r   r,   r   )r;   r   s     r?   r,   zFSEventsObserver2.__init__   s     d/7SSSSSSr@   N)rd   re   rf   r   r,   rO   r@   r?   r   r      s1        7 T T T T T Tr@   r   )6rg   r3   loggingr-   r5   	threadingr   watchdog.eventsr   r   r   r   r   r	   r
   r   watchdog.observers.apir   r   r   r   rB   FSEventsr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r    r!   r"   r#   r$   r%   r&   r'   	getLoggerrd   rV   r)   rP   r   r   rO   r@   r?   <module>r      s  "  
			            	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	            
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
                                 $ 
	8	$	$:! :! :! :! :!F :! :! :!z#G #G #G #G #G #G #G #GL= = = = =l = = =@T T T T T T T T T Tr@   