K i%dZddlmZddlZddlZddlZddlZddlZddlZddl Z ddl Z ddl m Z m Z mZmZddlmZmZddlmZddlmZej.eZej4ej"d ZGd d eZGd d eZGddeZGddeZej@rddZ!yddZ!y)u:module: watchdog.tricks :synopsis: Utility event handlers. :author: yesudeep@google.com (Yesudeep Mangalapilly) :author: contact@tiger-222.fr (Mickaël Schoentgen) Classes ------- .. autoclass:: Trick :members: :show-inheritance: .. autoclass:: LoggerTrick :members: :show-inheritance: .. autoclass:: ShellCommandTrick :members: :show-inheritance: .. autoclass:: AutoRestartTrick :members: :show-inheritance: ) annotationsN)EVENT_TYPE_CLOSED_NO_WRITEEVENT_TYPE_OPENEDFileSystemEventPatternMatchingEventHandler)echoplatform)EventDebouncer)ProcessWatcherc,tj|SN)loggerinfo)msgs ^/mnt/ssd/data/python-lab/Trading/venv/lib/python3.12/site-packages/watchdog/tricks/__init__.pyr+sV[[=M)writec*eZdZdZddZeddZy)Trickz'Your tricks should subclass this class.c4dt|jdS)N<>)type__name__selfs r__repr__zTrick.__repr__1s4:&&'q))rc<d|jd|jdS)Nz- .z: args: - argument1 - argument2 kwargs: patterns: - "*.py" - "*.js" ignore_patterns: - "version.py" ignore_directories: false ) __module__r)clss r generate_yamlzTrick.generate_yaml4s'cnn%Qs||n 5  rN)returnstr)rr! __qualname____doc__r classmethodr#rrrr.s1*  rrc"eZdZdZeddZy) LoggerTrickz*A simple trick that does only logs events.cyr r)revents r on_any_eventzLoggerTrick.on_any_eventGs rNr.rr$None)rr!r&r' echo_eventsr/r)rrr+r+Ds4  rr+cXeZdZdZdddddd dfdZd dZd dZxZS) ShellCommandTrickz6Executes shell commands in response to matched events.NF)patternsignore_patternsignore_directorieswait_for_processdrop_during_processct||||||_||_||_d|_t |_y)Nr5r6r7)super__init__ shell_commandr8r9processset_process_watchers)rr>r5r6r7r8r9 __class__s rr=zShellCommandTrick.__init__OsK +1  + 0#6 7; 69erc|jtthvryddlm}|j r|j ry|jrdnd}|jd|j|d}|j!t|dr|j|d<d}n*d }n't|dr|j|d <|j}||jd i|}tj|d |_|j r|jj#yt%|jd}|j&j)|t+j,|j&j.||_|j3y)Nr)Template directoryfile)watch_src_pathwatch_dest_pathwatch_event_type watch_object dest_pathzWecho "${watch_event_type} ${watch_object} from ${watch_src_path} to ${watch_dest_path}"zhasattrrLsafe_substitute subprocessPopenr?r8waitr rAadd functoolspartialdiscardprocess_termination_callbackstart)rr.rD object_typecontextcommandprocess_watchers rr/zShellCommandTrick.on_any_eventesR    13MN N #  # #(?(?(A %*%7%7kV #nn! % 0 0'      %uk*', $sXuk*-2__)*((G3(7#33>g>!''t<  LL   ,T\\4@O  " " & & 7;D;L;L&&..<O 8  ! ! #rct|jxs,|jduxr|jjduSr )boolrAr?pollrs rrPz$ShellCommandTrick.is_process_runnings9D**ht||4/G/gDLLL]L]L_cgLgiir) r>r%r5list[str] | Noner6rer7rcr8rcr9rcr0)r$rc)rr!r&r'r=r/rP __classcell__rBs@rr4r4Lsb@ &*,0#(!&$)<<# < * < ! <<"<,($Tjrr4ceZdZdZdddej dddd dfdZdd Zdd Zdd Z dd Z e dd Z ddZ xZS)AutoRestartTrickaStarts a long-running subprocess and restarts it on matched events. The command parameter is a list of command arguments, such as `['bin/myserver', '-c', 'etc/myconfig.ini']`. Call `start()` after creating the Trick. Call `stop()` when stopping the process. NF rT)r5r6r7 stop_signal kill_afterdebounce_interval_secondsrestart_on_command_exitc|dkr d} t| |dkr d} t| t | |||||_t |t j r |jn||_||_ ||_ ||_ d|_ d|_ d|_d|_d|_d|_t%j&|_y)Nrz kill_after must be non-negative.z/debounce_interval_seconds must be non-negative.r;F) ValueErrorr<r=r` isinstancesignalSignalsvaluerkrlrmrnr?raevent_debouncer restart_count_is_process_stopping_is_trick_stopping threadingRLock_stopping_lock) rr`r5r6r7rkrlrmrnerrorrBs rr=zAutoRestartTrick.__init__s >6EU# # $q (EEU# # +1   0:;0W;,,]h$)B&'>$7; 6:6:$)!"''oo/rcjr9tjfd_jjj y)Nc$jSr )_restart_process)eventsrs rrz(AutoRestartTrick.start..st/D/D/Fr)rmevents_callback)rmr rur]_start_processrs`rr]zAutoRestartTrick.startsE  ) )#1*.*H*H F$D   & & ( rcv|j5|jr dddyd|_ddd|j}|j|jj |j |j|jj ||j yy#1swYxYw)NT)r{rxrarustop _stop_processjoin)rras rrzAutoRestartTrick.stops   +&& + +'+D # + ..    +  % % '     +  % % '  &  " ' + +sB/B//B8c |jrytj|jt t dd|_|jr@t|j |j|_ |jjyy)Nsetsid) preexec_fn) rxrUrVr`getattrosr?rnr rrar]rs rrzAutoRestartTrick._start_processsk  " " "'' XW[A\]  ' '#1$,,@U@U#VD  & & ( (rc:|j5|jr dddyd|_ddd |j!|jjd|_|j t |jj |jtj|jz}tj|krH|jjnotjdtj|krHtjt5t |jj ddddd|_d|_y#1swY@xYw#1swY%xYw#t$rY3wxYw#d|_wxYw)NTg? F)r{rwrarr? kill_processpidrktimerlrdsleep contextlibsuppressOSError)r kill_times rrzAutoRestartTrick._stop_processsP   -(( - -)-D % -  .##/$$))+'+$||'> !1!143C3CD !% doo =I))+ 1<<,,.:! 4())+ 1 (009>()9)91=># (-D %9 - -0>>).D %s^E)E)9F.*FA?FF1!E6F)E36E?;F F F FF Fc|jtthvry|j|jj |y|j yr )rNrrru handle_eventrr-s rr/zAutoRestartTrick.on_any_event sF    13MN N     +  - -e 4  ! ! #rc|jry|j|j|xjdz c_y)N)rxrrrvrs rrz!AutoRestartTrick._restart_processs7  " "    ar)r`z list[str]r5rer6rer7rcrkzsignal.Signals | intrlintrmrrnrc)r$r1r0)rr!r&r'rrSIGINTr=r]rrrr2r/rrfrgs@rriris&*,0#(,2MM)*(,&0&0# &0 * &0 ! &0*&0&0$'&0"&&0P#$).@$$ rric0tj||yr )rkillrrks rrrs [!rcVtjtj||yr )rkillpggetpgidrs rrr$s "**S/;/r)rrrkrr$r1)"r' __future__rrrYloggingrrrrUryrwatchdog.eventsrrrrwatchdog.utilsrr watchdog.utils.event_debouncerr watchdog.utils.process_watcherr getLoggerrrrZr2rr+r4ri is_windowsrr)rrrs2#  ww)99   8 $i 1MN  ', % DjDjNG uG T8" 0r