
    'gE<                    X   U d dl mZ d dlZd dlZd dl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 ddlmZ  eej"                  ej$                  h      Zh eej(                  ej*                  Z eed      rej/                  ej0                          ee      Z[h dZdd	Zdd
Z	 	 	 	 	 	 d dZ	 	 	 	 	 	 d dZd!dZd"dZ  G d d      Z! G d de!      Z" G d de!      Z#e"e#dZ$de%d<   	  e&d       e$d   e$d<   d#dZ(	 	 	 	 d$	 	 	 	 	 	 	 	 	 	 	 d%dZ)y# e'$ r e$d   e$d<   Y (w xY w)&    )annotationsN)chain)PurePath   )_logreal_prefix>   .hg.git.nox.tox.mypy_cache.pytest_cache__pycache__c               #    K   t        t        j                  j                               D ]  } t	        | dd      }||j                  t              r(t        j                  j                  |      sG|}t        j                  j                  |      }||k(  rnt        j                  j                  |      sG|  yw)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/html/knws/venv/lib/python3.12/site-packages/werkzeug/_reloader.py_iter_module_pathsr!   (   s      s{{))+, vz40<4??>:''..&C77??4(Ds{ ''..& Js   B5B?8B?c                \    |D ]'  }| j                  t        j                  | |             ) y N)difference_updatefnmatchfilter)pathsexclude_patternspatterns      r    _remove_by_patternr*   <   s,    # @ug >?@    c           	     x   t               }t        t        t        j                        |       D ]c  }t
        j                  j                  |      }t
        j                  j                  |      r|j                  |       Tt
        j                  j                  |      di}t        j                  |      D ]  \  }}}|j                  t              s%t
        j                  j                  |      t        v r|j                          Rd}|D ]E  }	|	j!                  d      sd}|j                  t
        j                  j#                  ||	             G |s3|t
        j                  j                  |         s|j                          |||<    f |j%                  t'                      t)        ||       |S )ax  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   sS    EEd388nk2 ")wwt$77>>$IIdO.5!# 	)D$
  1277##D)-@@

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

"(M$1	)")H 
LL#%&u./Lr+   c                   t               }t        t        t        j                        |       D ]p  }t
        j                  j                  |      }t
        j                  j                  |      rt
        j                  j                  |      }|j                  |       r t               D ]0  }|j                  t
        j                  j                  |             2 t        ||       t        |      S )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 #$ (&'( t-.d##r+   c                    i }t        d | D        t        d      D ]-  }|}|D ]  }|j                  |i       } |j                          / t	               dfd |d       S )Nc              3  F   K   | ]  }t        |      j                    y wr#   )r   parts).0xs     r    	<genexpr>z%_find_common_roots.<locals>.<genexpr>   s     ;(1+++;s   !T)keyreversec                    | j                         D ]  \  }} |||fz           | s/|r,j                  t        j                  j                  |        y y y r#   )itemsr/   r   r   r6   )noder   prefixchild_walkrvs       r    rO   z!_find_common_roots.<locals>._walk   sT    !ZZ\ 	+MFE%	)*	+
 FF277<<&' tr+    )rL   z t.Mapping[str, dict[str, t.Any]]r   ztuple[str, ...]returnNone)sortedlen
setdefaultr4   r-   )r'   r:   chunksrL   chunkrO   rP   s        @@r    r@   r@      ss    (*D;U;dS  	.E??5"-D	. 	

 
B( 
$OIr+   c                 ^   t         j                  dk\  r$t         j                  gt         j                  dd S t         j                  g} t         j                  d   }t         j                  dd }t         j
                  d   }t        |dd      ft        j                  dk(  rE|j                  dk(  r5t        j                  j                  |      st        j                  j                  | d	      rt        j                  j                  |      }t        j                  dk(  rt        j                  j                  |      s't        j                  j                  | d	      r|d	z  }t        j                  j                  t         j                        d   d	k(  r6t        j                  j                  |      d   d	k(  r| j                  d       | j                  |       nt        j                  j!                  |      rqt#        j$                  t&        |j                        }t        j                  j                  t        j                  j)                  |            d   }|dk7  r|d
| z  }n|}| j+                  d|j-                  d
      f       | j+                  |       | S )zpDetermine 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)rP   	py_scriptargsr\   	py_moduler   s         r    _get_args_for_reloadingrq      s    7" 3qr!233
..	BI88AB<D{{:&H
 x-5
4  B&y)GGNNi[-. GGOOI.	77d? 77>>),9+T@R1S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                  d    e Zd ZdZ	 	 	 d	 	 	 	 	 	 	 ddZddZd ZddZddZddZ	dd	Z
dd
Zy)ReloaderLoopr_   Nc                    |xs dD ch c]!  }t         j                  j                  |      # c}| _        t	        |xs d      | _        || _        y c c}w )NrQ   )r   r   r.   r8   r-   r(   interval)selfr8   r(   ru   rF   s        r    __init__zReloaderLoop.__init__   sL     CNBSQS%TQbggooa&8%T*-.>.D"*E  &Us   &Ac                &    | j                          | S )zgDo any setup, then run one step of the watch to populate the
        initial filesystem state.
        )run_steprv   s    r    	__enter__zReloaderLoop.__enter__   s     	r+   c                     y)z4Clean up any resources associated with the reloader.NrQ   rv   exc_typeexc_valexc_tbs       r    __exit__zReloaderLoop.__exit__   s    r+   c                d    	 | j                          t        j                  | j                         0)zfContinually run the watch step, sleeping for the configured
        interval after each step.
        )ry   timesleepru   rz   s    r    runzReloaderLoop.run   s%     MMOJJt}}% r+   c                     y)z}Run one step for watching the filesystem. Called once to set
        up initial state, then repeatedly to update it.
        NrQ   rz   s    r    ry   zReloaderLoop.run_step  s     	r+   c                    	 t        dd| j                          t               }t        j                  j                         }d|d<   t        j                  ||d      }|dk7  r|S f)z|Spawn 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_fdsrZ   )r   r   rq   r   environcopy
subprocesscall)rv   ro   new_environ	exit_codes       r    restart_with_reloaderz"ReloaderLoop.restart_with_reloader
  sd     .tyyk:;*,D**//+K/5K+,"+OIA~   r+   c                P    | j                  |       t        j                  d       y NrZ   )
log_reloadr   exitrv   filenames     r    trigger_reloadzReloaderLoop.trigger_reload  s    !r+   c                b    t         j                  j                  |      }t        dd|d       y )Nr   z * Detected change in z, reloading)r   r   r.   r   r   s     r    r   zReloaderLoop.log_reload  s(    77??8,V-h\EFr+   )NNr   )r8   t.Iterable[str] | Noner(   r   ru   int | floatrR   rS   rR   rs   rR   rS   )rR   int)r   rk   rR   rS   r   zstr | bytesrR   rS   )__name__
__module____qualname__r   rw   r{   r   r   ry   r   r   r   rQ   r+   r    rs   rs      sa    D /337 !	!+! 1! 	!
 
!&!Gr+   rs   c                  ,     e Zd ZdZd fdZddZ xZS )StatReloaderLoopstatc                .    i | _         t        | 	         S r#   )mtimessuperr{   rv   	__class__s    r    r{   zStatReloaderLoop.__enter__$  s    (*w ""r+   c                4   t        | j                  | j                        D ]f  }	 t        j                  |      j
                  }| j                  j                  |      }||| j                  |<   P||kD  sV| j                  |       h y # t        $ r Y uw xY wr#   )
r>   r8   r(   r   r   st_mtimeOSErrorr   getr   )rv   r   mtimeold_times       r    ry   zStatReloaderLoop.run_step(  s    $T%5%5t7L7LM 	*D.. {{t,H$)D!x##D)	*  s   B	BBr   r   )r   r   r   r   r{   ry   __classcell__r   s   @r    r   r   !  s    D#*r+   r   c                  J     e Zd Zd fdZddZd	 fdZd Zd
dZd
dZ xZ	S )WatchdogReloaderLoopc           
     ^   ddl m ddl m ddl m ddl m ddl m ddl m} ddl m} dd	lm	} t        | ,  |i | | j                   G fd
d|      }|j                  j                         }|j                  d      r|d d }d| d| _         |       | _        | j$                  D cg c]$  }t&        j(                  j+                  |      r#|& }	} |dddg|	g t,        D 
cg c]  }
d|
 d
 c}
| j.                        | _        d| _        y c c}w c c}
w )Nr   )EVENT_TYPE_CLOSED)EVENT_TYPE_CREATED)EVENT_TYPE_DELETED)EVENT_TYPE_MODIFIED)EVENT_TYPE_MOVED)FileModifiedEvent)PatternMatchingEventHandler)Observerc                  $    e Zd Zd fdZy)3WatchdogReloaderLoop.__init__.<locals>.EventHandlerc                R    |j                   hvry  |j                         y r#   )
event_typesrc_path)rv   eventr   r   r   r   r   r   s     r    on_any_eventz@WatchdogReloaderLoop.__init__.<locals>.EventHandler.on_any_eventH  s6    ##%&&'$,  u~~.r+   N)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   rw   r   r   lowerr5   r   r   r8   r   r   isdirr3   r(   event_handlershould_reload)rv   ro   kwargsr   r   r   r   reloader_namepextra_patternsdr   r   r   r   r   r   r   s              @@@@@@r    rw   zWatchdogReloaderLoop.__init__:  s   566745?/$)&),,	/ 	/6 	/ !))//1!!*-)#2.M q1	 
 &*%5%5NRWW]]1=M!NN)gw@@&9:Bqc*:&&
 # O ;s   :$D%D%6D*c                4    d| _         | j                  |       y )NT)r   r   r   s     r    r   z#WatchdogReloaderLoop.trigger_reloadk  s     "!r+   c                b    i | _         | j                  j                          t        |          S r#   )watchesr   startr   r{   r   s    r    r{   zWatchdogReloaderLoop.__enter__r  s(    )+w ""r+   c                l    | j                   j                          | j                   j                          y r#   )r   stopr6   r}   s       r    r   zWatchdogReloaderLoop.__exit__w  s"    r+   c                    | j                   s<| j                          t        j                  | j                         | j                   s<t        j                  d       y r   )r   ry   r   r   ru   r   r   rz   s    r    r   zWatchdogReloaderLoop.run{  s<    $$MMOJJt}}% $$ 	r+   c                   t        | j                        }t        | j                  | j                        D ]W  }|| j                  vr6	 | j
                  j                  | j                  |d      | j                  |<   |j                  |       Y |D ]<  }| j                  j                  |d       }|"| j
                  j                  |       > y # t        $ r d | j                  |<   Y ow xY w)NT)	recursive)r-   r   rA   r8   r(   r   scheduler   r   discardrg   
unschedule)rv   	to_deleter   watchs       r    ry   zWatchdogReloaderLoop.run_step  s    %	()9)94;P;PQ 	$D4<<'.)-)?)?**DD *@ *DLL& d#	$  	0DLL$$T40E ((/		0  . *.DLL&	.s   5CC-,C-)ro   t.Anyr   r   rR   rS   r   r   r   )
r   r   r   rw   r   r{   r   r   ry   r   r   s   @r    r   r   9  s"    /#b"#
0r+   r   )r   watchdogzdict[str, type[ReloaderLoop]]reloader_loopszwatchdog.observersr   autor   c                 r   t         j                  t         j                  j                         sy	 ddl} | j                  t         j                        }|d   | j                  z  sC|dxx   | j                  z  cc<   | j                  t         j                  | j                  |       yy# t        $ r Y yw xY w)zuEnsure that echo mode is enabled. Some tools such as PDB disable
    it which causes usability issues after a reload.Nr   rZ   )	r   stdinisattytermiosImportError	tcgetattrECHO	tcsetattrTCSANOW)r   
attributess     r    ensure_echo_onr     s     yy		 0 0 2 ""399-Ja=7<<'1%#))W__jA (  s   B* *	B65B6c                   ddl }|j                  |j                  d        t        |   |||      }	 t        j                  j                  d      dk(  rUt                t        j                  | d      }d	|_	        |5   |j                          |j                          ddd       yt        j                  |j                                y# 1 sw Y   yxY w# t        $ r Y yw xY w)
z<Run the given function in an independent Python interpreter.r   Nc                 ,    t        j                  d      S )Nr   )r   r   )ro   s    r    <lambda>z#run_with_reloader.<locals>.<lambda>  s     r+   )r8   r(   ru   r   r   rQ   )targetro   T)signalSIGTERMr   r   r   r   r   	threadingThreaddaemonr   r   r   r   r   KeyboardInterrupt)	main_funcr8   r(   ru   reloader_typer   reloaderri   s           r    run_with_reloaderr    s     
MM&..";<m,2BXH::>>-.&8  	;AAH  	  HHX3356	 
  s6   AC  "C"C +#C CC C 	C'&C')rR   zt.Iterator[str])r'   set[str]r(   r  rR   rS   )r8   r  r(   r  rR   t.Iterable[str])r'   r  rR   r  )rR   z	list[str]r   )NNr   r   )r   zt.Callable[[], None]r8   r   r(   r   ru   r   r   rk   rR   rS   )*
__future__r   r%   r   r   r   r   r   typingri   	itertoolsr   pathlibr   	_internalr   tuplebase_prefixbase_exec_prefixr   rM   exec_prefixhasattrr/   r   r1   r3   r!   r*   r>   rA   r@   rq   rs   r   r   r   __annotations__
__import__r   r   r  rQ   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   0D D)(D)