
    ʆh7                    "   S r SSKJr  SSKrSSKrSSKrSSKrSSKrSSKJ	r	  SSK
rSSKJrJrJrJrJrJrJrJrJrJr  SSKJrJrJrJr  SSKJr  \	(       a  SSKJrJr  SS	KJ r J!r!  \RD                  " S
5      r# " S S\5      r$ " S S\5      r%g)u   :module: watchdog.observers.fsevents
:synopsis: FSEvents based emitter implementation.
:author: yesudeep@google.com (Yesudeep Mangalapilly)
:author: contact@tiger-222.fr (Mickaël Schoentgen)
:platforms: macOS
    )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)DirectorySnapshot)FileSystemEventFileSystemEventHandler)
EventQueueObservedWatchfseventsc                     ^  \ rS rSrSr\SSS.           SU 4S jjjrSS jrSS jrSS	 jr	SS
 jr
SS jrSS jr            SS jrSS jr\SS j5       rSS jrSS jrSS jrSS jrSS jrSrU =r$ ) FSEventsEmitter*   aL  macOS FSEvents Emitter class.

:param event_queue:
    The event queue to fill with events.
:param watch:
    A watch object representing the directory to monitor.
:type watch:
    :class:`watchdog.observers.api.ObservedWatch`
:param timeout:
    Read events blocking timeout (in seconds).
:param event_filter:
    Collection of event types to emit, or None for no filtering (default).
:param suppress_history:
    The FSEvents API may emit historic events up to 30 sec before the watch was
    started. When ``suppress_history`` is ``True``, those events will be suppressed
    by creating a directory snapshot of the watched path before starting the stream
    as a reference to suppress old events. Warning: This may result in significant
    memory usage in case of a large number of items in the watched path.
:type timeout:
    ``float``
NF)timeoutevent_filtersuppress_historyc                 > [         TU ]  XX4S9  [        5       U l        XPl        SU l        S U l        [        R                  " 5       U l	        [        R                  R                  [        R                  R                  [        R                  R                  U R                  R                  5      5      5      U l        g )N)r   r   g        )super__init__set_fs_viewr   _start_time_starting_state	threadingLock_lockospathrealpathabspath
expanduserwatch_absolute_watch_path)selfevent_queuer.   r   r   r   	__class__s         S/opt/services/DDDS/venv/lib/python3.13/site-packages/watchdog/observers/fsevents.pyr!   FSEventsEmitter.__init__A   s     	WX"%% 09=^^%
$&GG$4$4RWW__RWWEWEWX\XbXbXgXgEh5i$j!    c                p    [         R                  " U R                  5        [         R                  " U 5        g N)	_fseventsremove_watchr.   stopr0   s    r3   on_thread_stopFSEventsEmitter.on_thread_stopR   s     tzz*tr5   c                    U R                   R                  (       d  U R                  U5      (       d-  [        R	                  SU5        [
        R                  " X5        g [        R	                  SU5        g )Nzqueue_event %szdrop event %s)_watchis_recursive_is_recursive_eventloggerdebugr   queue_event)r0   events     r3   rD   FSEventsEmitter.queue_eventV   sL     ;;##4+C+CE+J+JLL)51$$T1LL%0r5   c                X   UR                   (       a  UR                  O([        R                  R	                  UR                  5      nX R
                  :X  a  g[        U[        [        45      (       a9  [        R                  R	                  UR                  5      nX0R
                  :X  a  gg)NFT)
is_directorysrc_pathr)   r*   dirnamer/   
isinstancer   r   	dest_path)r0   rE   rI   rL   s       r3   rA   #FSEventsEmitter._is_recursive_event_   sq    %*%7%75>>RWW__U^^=\000enm<== 8I555r5   c                    UR                   (       a  [        O[        nU R                  U" U5      5        U R                  [	        U5      5        g r7   )rH   r   r	   rD   r   r0   rE   rI   rJ   clss        r3   _queue_created_event$FSEventsEmitter._queue_created_eventm   8    !&!3!3o9IX')'23r5   c                    UR                   (       a  [        O[        nU R                  U" U5      5        U R                  [	        U5      5        g r7   )rH   r   r
   rD   r   rO   s        r3   _queue_deleted_event$FSEventsEmitter._queue_deleted_eventr   rS   r5   c                l    UR                   (       a  [        O[        nU R                  U" U5      5        g r7   )rH   r   r   rD   rO   s        r3   _queue_modified_event%FSEventsEmitter._queue_modified_eventw   s%    "'"4"4:KX'r5   c                    UR                   (       a  [        O[        nU R                  U5      nU R	                  U" X#5      5        U R	                  [        U5      5        U R	                  [        U5      5        g r7   )rH   r   r   _encode_pathrD   r   )r0   	src_eventrI   dst_pathsrc_dirnamedst_dirnamerP   s          r3   _queue_renamed_event$FSEventsEmitter._queue_renamed_event{   s^      )55m>$$X.X01)+67)+67r5   c                   UR                   U R                  ;   nU R                  (       a8   U R                  R                  UR                  5      S   nX1R                   :H  nOSnU=(       d    U$ ! [         a    Sn Nf = f)Nr   F)inoder#   r%   r*   KeyError)r0   rE   
in_history	old_inodebefore_starts        r3   _is_historic_created_event*FSEventsEmitter._is_historic_created_event   sw     [[DMM1
% 0066uzzB1E	(KK7 !L)\)  %$%s   6A0 0A?>A?c                f    U R                   =(       d    U R                  =(       d    U R                  $ )z9Returns True if the event indicates a change in metadata.)is_inode_meta_modis_xattr_modis_owner_change)rE   s    r3   _is_meta_modFSEventsEmitter._is_meta_mod   s&     &&U%*<*<U@U@UUr5   c                *  ^ [         R                  5       [        R                  ::  aD  U H>  mSR	                  U4S j[        T5       5       5      n[         R                  STU5        M@     [        R                  " 5       U R                  -
  S:  a  S U l
        U(       Ga  UR                  S5      mU R                  TR                  5      n[        R                  R                  U5      n [        R                   " U5      nU=(       a    UR$                  TR&                  :H  nTR(                  (       a  TR*                  (       a  U R-                  T5      (       d  U R/                  TXE5        U R0                  R3                  TR&                  5        TR4                  (       d  U R7                  T5      (       a  U R9                  TXE5        U R;                  TXE5        U R0                  R=                  TR&                  5        GOTR(                  (       a(  U R-                  T5      (       d  U R/                  TXE5        U R0                  R3                  TR&                  5        TR4                  (       d  U R7                  T5      (       a  U R9                  TXE5        TR>                  (       Ga  [A        [C        U4S jU 5       5      S 5      nU(       Ga>  [         R                  SU5        U R                  UR                  5      n	[        R                  R                  U	5      n
U RE                  TXIXZ5        U R0                  R3                  TR&                  5        [G        XI5       H  nU RI                  U5        M     URK                  U5        UR4                  (       d  U R7                  U5      (       a  U R9                  XU
5        UR*                  (       a7  U R;                  XU
5        U R0                  R=                  UR&                  5        OU(       a[  U R/                  TXE5        U R0                  R3                  TR&                  5        [M        U5       H  nU RI                  U5        M     O:U R;                  TXE5        U R0                  R=                  TR&                  5        GM  TR*                  (       a7  U R;                  TXE5        U R0                  R=                  TR&                  5        TRN                  (       am  U RI                  [Q        U RR                  R                  5      5        [         R                  S5        U RU                  5         U R0                  RW                  5         U(       a  GM  g g ! ["         a    S n GNf = f)	Nz, c              3  J   >#    U  H  n[        TU5      S L d  M  Uv   M     g7f)TN)getattr).0attrrE   s     r3   	<genexpr>/FSEventsEmitter.queue_events.<locals>.<genexpr>   s#     !^:4PTAUY]A]$$:s   #	#z%s: %s<   r   c              3     >#    U  H5  oR                   (       d  M  UR                  TR                  :X  d  M1  Uv   M7     g 7fr7   )
is_renamedrc   )rs   erE   s     r3   ru   rv      s(     Z1,,Q177ekkCYQQs   A A 	A z"Destination event for rename is %sz&Stopping because root path was changed),rB   getEffectiveLevelloggingDEBUGjoindirrC   time	monotonicr$   r%   popr[   r*   r)   rJ   statOSErrorst_inorc   
is_created
is_removedrh   rQ   r#   addis_modifiedrn   rX   rU   discardry   nextiterr`   r   rD   remover   is_root_changedr   r.   r:   clear)r0   r   eventsflagsrI   r^   r   exists	dst_eventr]   r_   sub_moved_eventsub_created_eventrE   s                @r3   queue_eventsFSEventsEmitter.queue_events   s   ##%6		!^3u:!^^Xue4   >>d...3#'D JJqME((4H''//(3Kwwx( 8dkkU[[8F( E$4$4
 66u==--eXK!!%++.$$(9(9%(@(@..uhL))%G%%ekk2 ##D,K,KE,R,R--eXK!!%++.$$(9(9%(@(@..uhL### $ZZZ!I
 !%I9U#'#4#4Y^^#D&(ggooh&?11%[f))%++6/H/\O ,,_= 0]
 i0$00D4E4Ei4P4P 66yKX$// 55i;W MM11)//B 11%O))%++61LX1V- ,,->? 2W 11%O--ekk: !##--eXKMM))%++6$$   !ABEF		##%k f  s   -V VVc                \   [         R                  n [        XX45       VVVV	s/ s H  u  pgpU" XgX5      PM     n
nnnn	U R                     U R	                  U R
                  U
5        SSS5        gs  sn	nnnf ! , (       d  f       g= f! [         a    [        R                  S5         gf = f)zXCallback passed to FSEventStreamCreate(), it will receive all
FS events and queue them.
Nz(Unhandled exception in fsevents callback)	r8   NativeEventzipr(   r   r   	ExceptionrB   	exception)r0   pathsinodesr   idsrP   r*   rc   event_flagsevent_idr   s              r3   events_callbackFSEventsEmitter.events_callback   s     ##	I ;>eU:X:X6D D7:X   !!$,,7 	  	IGH	Is?   B	 A0
B	 
A8'B	 0B	 8
BB	 B	 	B+*B+c                T   U R                   R                  /U l        [        R                  " 5       U l         [        R                  " X R                   U R                  U R                  5        [        R                  " U 5        g ! [         a    [        R                  S5         g f = f)Nz&Unhandled exception in FSEventsEmitter)r.   r*   	pathnamesr   r   r$   r8   	add_watchr   read_eventsr   rB   r   r;   s    r3   runFSEventsEmitter.run/  sw    **//*>>+	Gjj$2F2FW!!$' 	GEF	Gs   AB B'&B'c                   U R                   (       az  [        U R                  R                  [        5      (       a*  [
        R                  " U R                  R                  5      OU R                  R                  n[        U5      U l        g g r7   )	r   rK   r.   r*   bytesr)   fsdecoder   r%   )r0   
watch_paths     r3   on_thread_startFSEventsEmitter.on_thread_start8  sW      9CDJJOOUZ9[9[TZZ__5aeakakapapJ#4Z#@D  !r5   c                    [        U R                  R                  [        5      (       a  [        R
                  " U5      $ U$ )z6Encode path only if bytes were passed to this emitter.)rK   r.   r*   r   r)   fsencode)r0   r*   s     r3   r[   FSEventsEmitter._encode_path=  s*    $.tzz$F$Fr{{4 PDPr5   )r/   r#   r(   r$   r%   r   r   )r1   r   r.   r   r   floatr   "list[type[FileSystemEvent]] | Noner   boolreturnNone)r   r   )rE   r   r   r   )rE   r   r   r   )rE   r   rI   bytes | strrJ   r   r   r   )r\   r   rI   r   r]   r   r^   r   r_   r   r   r   )rE   z_fsevents.NativeEventr   r   )r   r   r   zlist[_fsevents.NativeEvent]r   r   )
r   zlist[bytes]r   	list[int]r   r   r   r   r   r   )r*   r   r   r   )__name__
__module____qualname____firstlineno____doc__r   r!   r<   rD   rA   rQ   rU   rX   r`   rh   staticmethodrn   r   r   r   r   r[   __static_attributes____classcell__r2   s   @r3   r   r   *   s    6 1;?!&kk k
 k 9k k 
k k"14
4
(8"8 8 	8
 !8 !8 
8*" V V&BIGA
Q Qr5   r   c                  `   ^  \ rS rSr\S.S	U 4S jjjrSSS.         S
U 4S jjjrSrU =r$ )FSEventsObserveriB  r   c               *   > [         TU ]  [        US9  g )Nr   )r    r!   r   )r0   r   r2   s     r3   r!   FSEventsObserver.__init__C  s    ':r5   FN	recursiver   c               x   > [        U[        5      (       a  [        R                  " SU5      n[        TU ]  XX4S9$ )NNFCr   )rK   strunicodedata	normalizer    schedule)r0   event_handlerr*   r   r   r2   s        r3   r   FSEventsObserver.scheduleF  s9     dC  ((5Dwyddr5    )r   r   r   r   )
r   r   r*   r   r   r   r   r   r   r   )	r   r   r   r   r   r!   r   r   r   r   s   @r3   r   r   B  sY    +C ; ;  ;?e-e e
 e 9e 
e er5   r   )&r   
__future__r   r|   r)   r&   r   r   typingr   _watchdog_fseventsr8   watchdog.eventsr   r   r   r   r	   r
   r   r   r   r   watchdog.observers.apir   r   r   r   watchdog.utils.dirsnapshotr   r   r   r   r   	getLoggerrB   r   r   r   r5   r3   <module>r      sy    #  	      &   q p 8G@ 
		:	&UQl UQpe| er5   