K i7dZddlmZddlZddlZddlZddlZddlZddlm Z ddl Z ddl m Z mZmZmZmZmZmZmZmZmZddlmZmZmZmZddlmZe rddl mZmZdd lm Z m!Z!ejDd Z#Gd d eZ$Gd deZ%y)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) DirCreatedEventDirDeletedEventDirModifiedEvent DirMovedEventFileCreatedEventFileDeletedEventFileModifiedEventFileMovedEventgenerate_sub_created_eventsgenerate_sub_moved_events)DEFAULT_EMITTER_TIMEOUTDEFAULT_OBSERVER_TIMEOUT BaseObserver EventEmitter)DirectorySnapshot)FileSystemEventFileSystemEventHandler) EventQueue ObservedWatchfseventsceZdZdZeddd dfdZddZddZddZdd Z dd Z dd Z dd Z dd Z eddZddZddZddZddZddZxZS)FSEventsEmitteramacOS 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_filtersuppress_historyct|||||t|_||_d|_d|_tj|_ tjjtjjtjj|jj|_y)N)rrg)super__init__set_fs_viewr _start_time_starting_state threadingLock_lockospathrealpathabspath expanduserwatch_absolute_watch_path)self event_queuer-rrr __class__s a/mnt/ssd/data/python-lab/Trading/venv/lib/python3.12/site-packages/watchdog/observers/fsevents.pyr zFSEventsEmitter.__init__As eW<X"%% 09=^^% $&GG$4$4RWW__RWWEWEWX\XbXbXgXgEh5i$j!cltj|jtj|yN) _fsevents remove_watchr-stopr/s r2on_thread_stopzFSEventsEmitter.on_thread_stopRs tzz*tr3c|jjs|j|s-tj d|t j ||ytj d|y)Nzqueue_event %sz drop event %s)_watch is_recursive_is_recursive_eventloggerdebugr queue_event)r/events r2rAzFSEventsEmitter.queue_eventVsK ;; # #4+C+CE+J LL)5 1  $ $T5 1 LL% 0r3cD|jr |jn(tjj |j}||j k(ryt |ttfr9tjj |j}||j k(ryy)NFT) is_directorysrc_pathr(r)dirnamer. isinstancer r dest_path)r/rBrErHs r2r>z#FSEventsEmitter._is_recursive_event_sr%*%7%75>>RWW__U^^=\ t00 0 enm< =8ID555r3c|jrtnt}|j|||jt |yr5)rDrr rArr/rBrErFclss r2_queue_created_eventz$FSEventsEmitter._queue_created_eventm8!&!3!3o9I X' )'23r3c|jrtnt}|j|||jt |yr5)rDrr rArrJs r2_queue_deleted_eventz$FSEventsEmitter._queue_deleted_eventrrMr3cb|jrtnt}|j||yr5)rDrr rArJs r2_queue_modified_eventz%FSEventsEmitter._queue_modified_eventws%"'"4"4:K X'r3c|jrtnt}|j|}|j ||||j t ||j t |yr5)rDrr _encode_pathrAr)r/ src_eventrEdst_path src_dirname dst_dirnamerKs r2_queue_renamed_eventz$FSEventsEmitter._queue_renamed_event{s` )55m>$$X. Xx01 )+67 )+67r3c|j|jv}|jr9 |jj|jd}||jk(}nd}|xs|S#t$rd}YwxYw)NrF)inoder"r$r)KeyError)r/rB in_history old_inode before_starts r2_is_historic_created_eventz*FSEventsEmitter._is_historic_created_eventsy[[DMM1    % 0066uzzB1E (EKK7 !L)\)  %$  %s7A&& A43A4cR|jxs|jxs |jS)z9Returns True if the event indicates a change in metadata.)is_inode_meta_mod is_xattr_modis_owner_change)rBs r2 _is_meta_modzFSEventsEmitter._is_meta_mods&&&U%*<*<U@U@UUr3c^ tjtjkrA|D]< dj fdt D}tj d |>tj|jz dkDrd|_ |r|jd |j j}tjj|} tj |}|xr|j$ j&k(} j(r j*r|j- s|j/ |||j0j3 j& j4s|j7 r|j9 |||j; |||j0j= j&n j(r$|j- s|j/ |||j0j3 j& j4s|j7 r|j9 || j>rtAtC fd|Dd}|r2tj d||j|j} tjj| } |jE || || |j0j3 j&tG|| D]} |jI| |jK||j4s|j7|r|j9|| | |j*r|j;|| | |j0j=|j&n|rZ|j/ |||j0j3 j&tM|D]} |jI| n:|j; |||j0j= j&lj j*r8|j; |||j0j= j& jNrm|jItQ|jRjtj d|jU|j0jW|ryy#t"$rd}Y4wxYw) Nz, c3@K|]}t|dus|yw)TN)getattr).0attrrBs r2 z/FSEventsEmitter.queue_events..s!!^4PTAUY]A]$!^sz%s: %s<rc3pK|]-}|js|jjk(s*|/ywr5) is_renamedrZ)rherBs r2rjz/FSEventsEmitter.queue_events..s&Z1!,,177ekkCYQZs 666z"Destination event for rename is %sz&Stopping because root path was changed),r?getEffectiveLevelloggingDEBUGjoindirr@time monotonicr#r$poprSr)r(rFstatOSErrorst_inorZ is_created is_removedr_rLr"add is_modifiedrdrQrOdiscardrmnextiterrXrrAremover is_root_changedrr-r8clear)r/reventsflagsrErVrwexists dst_eventrUrWsub_moved_eventsub_created_eventrBs @r2 queue_eventszFSEventsEmitter.queue_eventss   # # % 6 5 !^3u:!^^ Xue4 5 >> d.. . 3#'D JJqME((4H''//(3K wwx(8dkkU[[8F(E$4$4 66u=--eX{K !!%++.$$(9(9%(@..uh L))%;G %%ekk2##D,K,KE,R--eX{K !!%++.$$(9(9%(@..uh L## $ZZZ!I ! %I9U#'#4#4Y^^#D&(ggooh&? 11%8[Zef ))%++6/HS[/\>O ,,_=>  i0$00D4E4Ei4P 66y(KX$// 55i;W MM11)//B11%;O ))%++61LX1V@- ,,->?@ 11%;O --ekk:!##--eX{KMM))%++6$$  !AB EF  ##%k  s"T T,+T,c Vtj} t||||D cgc]\}}}} ||||| } }}}} |j5|j |j | dddycc} }}}w#1swYyxYw#t $rtjdYywxYw)zhCallback passed to FSEventStreamCreate(), it will receive all FS events and queue them. Nz(Unhandled exception in fsevents callback) r6 NativeEventzipr'rr Exceptionr? exception) r/pathsinodesridsrKr)rZ event_flagsevent_idrs r2events_callbackzFSEventsEmitter.events_callback s## I;>eVUTW:X6D%hD%h7F 8!!$,,7 8 8  8 8 I   G H Is?BA3 B A;*B3B;BBBB('B(cN|jjg|_tj|_ t j||j|j|jt j|y#t$rtjdYywxYw)Nz&Unhandled exception in FSEventsEmitter) r-r) pathnamesrtrur#r6 add_watchr read_eventsrr?rr9s r2runzFSEventsEmitter.run/sy**//*>>+ G   djj$2F2F W  ! !$ ' G   E F GsA BB$#B$c|jrtt|jjtr)t j |jjn|jj}t||_yyr5) rrGr-r)bytesr(fsdecoderr$)r/ watch_paths r2on_thread_startzFSEventsEmitter.on_thread_start8sT  9CDJJOOUZ9[TZZ__5aeakakapapJ#4Z#@D  !r3cxt|jjtrt j |S|S)z6Encode path only if bytes were passed to this emitter.)rGr-r)rr(fsencode)r/r)s r2rSzFSEventsEmitter._encode_path=s'$.tzz$Fr{{4 PDPr3) r0rr-rrfloatr"list[type[FileSystemEvent]] | NonerboolreturnNone)rr)rBrrr)rBrrr)rBrrE bytes | strrFrrr) rTrrErrUrrVrrWrrr)rBz_fsevents.NativeEventrr)rrrzlist[_fsevents.NativeEvent]rr) rz list[bytes]r list[int]rrrrrr)r)rrr)__name__ __module__ __qualname____doc__rr r:rAr>rLrOrQrXr_ staticmethodrdrrrrrS __classcell__r1s@r2rr*s61;?!&kkk  k 9 kk k"1 4 4 ( 8" 8 8 8 ! 8 ! 8  8*"VV&B IGA Qr3rcLeZdZeddfdZddd dfdZxZS) FSEventsObserverrc0t|t|y)Nr)rr r)r/rr1s r2r zFSEventsObserver.__init__Cs ':r3FN recursivercvt|trtjd|}t|||||S)NNFCr)rGstr unicodedata normalizerschedule)r/ event_handlerr)rrr1s r2rzFSEventsObserver.scheduleFs; dC ((5Dw tyWcddr3)rrrr) rrr)rrrrrrr)rrrrr rrrs@r2rrBsT+C; ;? e- e e  e 9 e  e er3r)&r __future__rrpr(r%rtrtypingr_watchdog_fseventsr6watchdog.eventsrrrrr r r r r rwatchdog.observers.apirrrrwatchdog.utils.dirsnapshotrrrrr getLoggerr?rrr3r2rs{#   &   qp8G@   : &UQlUQpe|er3