
    %hE<                    v   % 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rS SKr	S SK
Jr  S SKJr  SSKJr  \" \R"                  \R$                  15      r1 \k\R(                  i\R*                  ir\" \S5      (       a  \R/                  \R0                  5        \" \5      rC1 Sk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5      r! " S S\!5      r" " S S\!5      r#\"\#S.r$S\%S'    \&" S5        \$S   \$S'   S#S jr(    S$           S%S jjr)g! \' a    \$S   \$S'    N,f = f)&    )annotationsN)chain)PurePath   )_logreal_prefix>   __pycache__.hg.git.nox.tox.mypy_cache.pytest_cachec               #    #    [        [        R                  R                  5       5       H  n [	        U SS5      nUb  UR                  [        5      (       a  M/  [        R                  R                  U5      (       dN  Un[        R                  R                  U5      nX:X  a  M{  [        R                  R                  U5      (       d  MN  Uv   M     g7f)z;Find the filesystem paths associated with imported modules.__file__N)listsysmodulesvaluesgetattr
startswith_ignore_alwaysospathisfiledirname)modulenameolds      J/var/www/auris/envauris/lib/python3.13/site-packages/werkzeug/_reloader.py_iter_module_pathsr!   (   s      s{{))+,vz40<4??>::''..&&C77??4(D{ ''..&& J -s   CC	Cc                `    U H(  nU R                  [        R                  " X5      5        M*     g N)difference_updatefnmatchfilter)pathsexclude_patternspatterns      r    _remove_by_patternr*   <   s#    #u >? $    c           	        [        5       n[        [        [        R                  5      U 5       GH  n[
        R                  R                  U5      n[
        R                  R                  U5      (       a  UR                  U5        MZ  [
        R                  R                  U5      S0n[
        R                  " U5       H  u  pVnUR                  [        5      (       d'  [
        R                  R                  U5      [        ;   a  UR                  5         MY  SnU HK  n	U	R!                  S5      (       d  M  SnUR                  [
        R                  R#                  XY5      5        MM     U(       d9  U[
        R                  R                  U5         (       d  UR                  5         M  XU'   M     GM     UR%                  ['        5       5        [)        X!5        U$ )a`  Find paths for the stat reloader to watch. Returns imported
module files, Python files under non-system paths. Extra files and
Python files under extra directories can also be scanned.

System paths have to be excluded for efficiency. Non-system paths,
such as a project root or ``sys.path.insert``, should be the paths
of interest to the user anyway.
TF)z.pyz.pyc)setr   r   r   r   r   abspathr   addr   walkr   _stat_ignore_scanbasename_ignore_common_dirsclearendswithjoinupdater!   r*   )
extra_filesr(   r'   r   parent_has_pyrootdirsfileshas_pyr   s
             r    _find_stat_pathsr>   A   sD    EEd388nk2wwt$77>>$IIdO.5!#D
  12277##D)-@@

F==11!FIIbggll467  mBGGOOD,AB

"($1 "/ 3H 
LL#%&u/Lr+   c                   [        5       n[        [        [        R                  5      U 5       Hv  n[
        R                  R                  U5      n[
        R                  R                  U5      (       a  [
        R                  R                  U5      nUR                  U5        Mx     [        5        H1  nUR                  [
        R                  R                  U5      5        M3     [        X!5        [        U5      $ )zFind paths for the stat reloader to watch. Looks at the same
sources as the stat reloader, but watches everything under
directories instead of individual files.
)r-   r   r   r   r   r   r.   r   r   r/   r!   r*   _find_common_roots)r8   r(   r;   r   s       r    _find_watchdog_pathsrA   w   s     5Dd388nk2wwt$77>>$77??4(D 3 #$&' % t.d##r+   c                   ^^ 0 n[        S U  5       [        SS9 H0  nUnU H  nUR                  U0 5      nM     UR                  5         M2     [	        5       mSUU4S jjmT" US5        T$ )Nc              3  L   #    U  H  n[        U5      R                  v   M     g 7fr#   )r   parts).0xs     r    	<genexpr>%_find_common_roots.<locals>.<genexpr>   s     ;U(1+++Us   "$T)keyreversec                   > U R                  5        H  u  p#T" X1U4-   5        M     U (       d5  U(       a-  TR                  [        R                  R                  " U6 5        g g g r#   )itemsr/   r   r   r6   )noder   prefixchild_walkrvs       r    rP   !_find_common_roots.<locals>._walk   sK    !ZZ\MF%	)* *
 FF277<<&' tr+    )rM   z t.Mapping[str, dict[str, t.Any]]r   ztuple[str, ...]returnNone)sortedlen
setdefaultr4   r-   )r'   r:   chunksrM   chunkrP   rQ   s        @@r    r@   r@      so    (*D;U;dSE??5"-D  	

 T 
B( ( 
$OIr+   c                    [         R                  S:  a$  [         R                  /[         R                  SS Q$ [         R                  /n [         R                  S   n[         R                  SS n[         R
                  S   n[        USS5      bs  [        R                  S:X  Ga^  UR                  S:X  GaM  [        R                  R                  U5      (       Gd(  [        R                  R                  U S	35      (       Ga   [        R                  R                  U5      n[        R                  S:X  a  [        R                  R                  U5      (       d,  [        R                  R                  U S	35      (       a  US	-  n[        R                  R                  [         R                  5      S   S	:X  a7  [        R                  R                  U5      S   S	:X  a  U R                  S5        U R                  U5        O[        R                  R!                  U5      (       as  ["        R$                  " [&        UR                  5      n[        R                  R                  [        R                  R)                  U5      5      S   nUS:w  a  US
U 3-  nOUnU R+                  SUR-                  S
5      45        U R+                  U5        U $ )zhDetermine how the script was executed, and return the args needed
to execute it again in a new process.
)   
   r   Nr   __main____package__nt z.exe.z-m)r   version_info
executable	orig_argvargvr   r   r   r   r_   r   existsr.   splitextpopappendr   tcaststrr2   extendlstrip)rQ   	py_scriptargsr^   	py_moduler   s         r    _get_args_for_reloadingrs      s	    7" 3qr!233
..	BI88AB<D{{:&H
 x-5
4  B&y))GGNNi[-.. GGOOI.	77d? 77>>),,9+T@R1S1SV#	   03v=GG$$Y/2f<q	
		) 77>>)$$sH$8$89I77##BGG$4$4Y$?@CDz!qZ'	 "I
		4))#./0IIdOIr+   c                  |    \ rS rSrSr   S       SS jjrSS jrS rSS jrSS jr	SS	 jr
SS
 jrSS jrSrg)ReloaderLoop   ra   Nc                    U=(       d    S Vs1 s H"  n[         R                  R                  U5      iM$     snU l        [	        U=(       d    S5      U l        X0l        g s  snf )NrS   )r   r   r.   r8   r-   r(   interval)selfr8   r(   rx   rF   s        r    __init__ReloaderLoop.__init__   sS     CNBSQSBS%TBSQbggooa&8BS%T*-.>.D"*E  &Us   )Ac                &    U R                  5         U $ )zWDo any setup, then run one step of the watch to populate the
initial filesystem state.
)run_stepry   s    r    	__enter__ReloaderLoop.__enter__   s     	r+   c                    g)z4Clean up any resources associated with the reloader.NrS   ry   exc_typeexc_valexc_tbs       r    __exit__ReloaderLoop.__exit__   s    r+   c                h     U R                  5         [        R                  " U R                  5        M2  )zVContinually run the watch step, sleeping for the configured
interval after each step.
)r}   timesleeprx   r~   s    r    runReloaderLoop.run   s%     MMOJJt}}% r+   c                    g)zmRun one step for watching the filesystem. Called once to set
up initial state, then repeatedly to update it.
NrS   r~   s    r    r}   ReloaderLoop.run_step  s     	r+   c                     [        SSU R                   35        [        5       n[        R                  R                  5       nSUS'   [        R                  " XSS9nUS:w  a  U$ Me  )zlSpawn a new Python interpreter with the same arguments as the
current one, but running the reloader thread.
infoz * Restarting with trueWERKZEUG_RUN_MAINF)env	close_fdsr\   )r   r   rs   r   environcopy
subprocesscall)ry   rq   new_environ	exit_codes       r    restart_with_reloader"ReloaderLoop.restart_with_reloader
  sb     .tyyk:;*,D**//+K/5K+,"OIA~   r+   c                R    U R                  U5        [        R                  " S5        g Nr\   )
log_reloadr   exitry   filenames     r    trigger_reloadReloaderLoop.trigger_reload  s    !r+   c                d    [         R                  R                  U5      n[        SSU< S35        g )Nr   z * Detected change in z, reloading)r   r   r.   r   r   s     r    r   ReloaderLoop.log_reload  s(    77??8,V-h\EFr+   )r(   r8   rx   )NNr   )r8   t.Iterable[str] | Noner(   r   rx   int | floatrT   rU   rT   ru   rT   rU   )rT   int)r   rm   rT   rU   r   zstr | bytesrT   rU   )__name__
__module____qualname____firstlineno__r   rz   r   r   r   r}   r   r   r   __static_attributes__rS   r+   r    ru   ru      sa    D /337 !	!+! 1! 	!
 
!&!Gr+   ru   c                  :   ^  \ rS rSrSrSU 4S jjrSS jrSrU =r$ )StatReloaderLoopi!  statc                .   > 0 U l         [        TU ]	  5       $ r#   )mtimessuperr   ry   	__class__s    r    r   StatReloaderLoop.__enter__$  s    (*w ""r+   c                B   [        U R                  U R                  5       Hj  n [        R                  " U5      R
                  nU R                  R                  U5      nUc  X R                  U'   MR  X#:  d  MY  U R                  U5        Ml     g ! [         a     M|  f = fr#   )
r>   r8   r(   r   r   st_mtimeOSErrorr   getr   )ry   r   mtimeold_times       r    r}   StatReloaderLoop.run_step(  s    $T%5%5t7L7LMD.. {{t,H$)D!##D) N  s    B
BB)r   r   r   )	r   r   r   r   r   r   r}   r   __classcell__r   s   @r    r   r   !  s    D#* *r+   r   c                  `   ^  \ rS rSrS	U 4S jjrS
S jrSU 4S jjrS rSS jrSS jr	Sr
U =r$ )WatchdogReloaderLoopi9  c           
     ~  >^^^^^^ SSK Jm  SSK Jm  SSK Jm  SSK Jm  SSK Jm  SSK Jn  SSK Jn  SS	KJ	n  [        TU ],  " U0 UD6  U R                  m " UUUUUU4S
 jSU5      nUR                  R                  5       nUR                  S5      (       a  US S nSU S3U l        U" 5       U l        U R$                   Vs/ s H+  n[&        R(                  R+                  U5      (       a  M)  UPM-     n	nU" SSS/U	Q/ [,         V
s/ s H	  n
SU
 S3PM     sn
QU R.                  QS9U l        SU l        g s  snf s  sn
f )Nr   )EVENT_TYPE_CLOSED)EVENT_TYPE_CREATED)EVENT_TYPE_DELETED)EVENT_TYPE_MODIFIED)EVENT_TYPE_MOVED)FileModifiedEvent)PatternMatchingEventHandler)Observerc                  0   > \ rS rSrSU UUUUU4S jjrSrg)3WatchdogReloaderLoop.__init__.<locals>.EventHandleriG  c                V   > UR                   TTTTT1;  a  g T" UR                  5        g r#   )
event_typesrc_path)ry   eventr   r   r   r   r   r   s     r    on_any_event@WatchdogReloaderLoop.__init__.<locals>.EventHandler.on_any_eventH  s6    ##%&&'$,  u~~.r+   rS   N)r   r   )r   r   r   r   r   r   )r   r   r   r   r   r   s   r    EventHandlerr   G  s    / /r+   r   observeriz
watchdog ()z*.pyz*.pycz*.zipz*/z/*)patternsignore_patternsF)watchdog.eventsr   r   r   r   r   r   r   watchdog.observersr   r   rz   r   r   lowerr5   r   r   r8   r   r   isdirr3   r(   event_handlershould_reload)ry   rq   kwargsr   r   r   r   reloader_namepextra_patternsdr   r   r   r   r   r   r   s              @@@@@@r    rz   WatchdogReloaderLoop.__init__:  s(   566745?/$)&),,	/ 	/6 	/ !))//1!!*--)#2.M q1	 
 &*%5%5N%5RWW]]1=M!%5N)gw@@&9:&9Bqc*&9:&&
 # O ;s   (D5-D5D:c                4    SU l         U R                  U5        g )NT)r   r   r   s     r    r   #WatchdogReloaderLoop.trigger_reloadk  s     "!r+   c                b   > 0 U l         U R                  R                  5         [        TU ]  5       $ r#   )watchesr   startr   r   r   s    r    r   WatchdogReloaderLoop.__enter__r  s(    )+w ""r+   c                l    U R                   R                  5         U R                   R                  5         g r#   )r   stopr6   r   s       r    r   WatchdogReloaderLoop.__exit__w  s"    r+   c                    U R                   (       dC  U R                  5         [        R                  " U R                  5        U R                   (       d  MC  [
        R                  " S5        g r   )r   r}   r   r   rx   r   r   r~   s    r    r   WatchdogReloaderLoop.run{  s?    $$MMOJJt}}% $$$ 	r+   c                   [        U R                  5      n[        U R                  U R                  5       HV  nX R                  ;  a3   U R
                  R                  U R                  USS9U R                  U'   UR                  U5        MX     U H?  nU R                  R                  US 5      nUc  M$  U R
                  R                  U5        MA     g ! [         a    S U R                  U'    Nvf = f)NT)	recursive)r-   r   rA   r8   r(   r   scheduler   r   discardri   
unschedule)ry   	to_deleter   watchs       r    r}   WatchdogReloaderLoop.run_step  s    %	()9)94;P;PQD<<'.)-)?)?**DD *@ *DLL& d# R DLL$$T40E ((/	   . *.DLL&	.s   	2CC21C2)r   r   r   r   r   )rq   t.Anyr   r   rT   rU   r   r   r   )r   r   r   r   rz   r   r   r   r   r}   r   r   r   s   @r    r   r   9  s'    /#b"#
0 0r+   r   )r   watchdogzdict[str, type[ReloaderLoop]]reloader_loopszwatchdog.observersr   autor   c                    [         R                  b#  [         R                  R                  5       (       d  g SSKn U R                  [         R                  5      nUS   U R                  -  (       dC  US==   U R                  -  ss'   U R                  [         R                  U R                  U5        gg! [         a     gf = f)zqEnsure that echo mode is enabled. Some tools such as PDB disable
it which causes usability issues after a reload.Nr   r\   )	r   stdinisattytermiosImportError	tcgetattrECHO	tcsetattrTCSANOW)r  
attributess     r    ensure_echo_onr	    s     yy		 0 0 2 2 ""399-Ja=7<<'1%#))W__jA (  s   B5 5
CCc                   SSK nUR                  UR                  S 5        [        U   " XUS9n [        R                  R                  S5      S:X  aS  [        5         [        R                  " U SS9nS	Ul	        U   UR                  " 5         UR                  5         SSS5        g[        R                  " UR                  5       5        g! , (       d  f       g= f! [         a     gf = f)
z<Run the given function in an independent Python interpreter.r   Nc                 .    [         R                  " S5      $ )Nr   )r   r   )rq   s    r    <lambda>#run_with_reloader.<locals>.<lambda>  s    r+   )r8   r(   rx   r   r   rS   )targetrq   T)signalSIGTERMr   r   r   r   r	  	threadingThreaddaemonr   r   r   r   r   KeyboardInterrupt)	main_funcr8   r(   rx   reloader_typer  reloaderrk   s           r    run_with_reloaderr    s     
MM&..";<m,XH::>>-.&8  	;AAH 	  HHX3356	 
  s6   AC <"CC '$C 
CC C 
C*)C*)rT   zt.Iterator[str])r'   set[str]r(   r  rT   rU   )r8   r  r(   r  rT   t.Iterable[str])r'   r  rT   r  )rT   z	list[str]r   )NNr   r   )r  zt.Callable[[], None]r8   r   r(   r   rx   r   r  rm   rT   rU   )*
__future__r   r%   r   r   r   r  r   typingrk   	itertoolsr   pathlibr   	_internalr   tuplebase_prefixbase_exec_prefixr   rN   exec_prefixhasattrr/   r   r1   r3   r!   r*   r>   rA   r@   rs   ru   r   r   r   __annotations__
__import__r  r	  r  rS   r+   r    <module>r'     s   "  	  
       )=)=>?	7>	73::	7s	7
3
JJs&M 
 (@
33-533l$$-5$$048v:G :Gz*| *0^0< ^0D $1- 
8#$ ,J7N6B* +//3#' - 	
  
3  4+F3N64s   ;D' 'D87D8