
    @lj                        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mZm	Z	 d dl
mZ d dlmZ d dlmZ d dlmZ d dlmZ d d	lmZ ej*                  ej,                  fZ ej0                  d
      Z G d d      ZddZy)    )annotationsN)CallableIterator)Path)socket)	FrameType)style)get_subprocess)Configzuvicorn.errorc                  l    e Zd Z	 	 	 	 	 	 	 	 ddZddZddZddZddZddZddZ	ddZ
dd	Zdd
Zy)
BaseReloadc                    || _         || _        || _        t        j                         | _        t        j                         | _        d| _	        d | _
        y )NF)configtargetsockets	threadingEventshould_exitosgetpidpidis_restartingreloader_name)selfr   r   r   s       Q/root/.hermes/venv/lib/python3.12/site-packages/uvicorn/supervisors/basereload.py__init__zBaseReload.__init__   sE     $??,99;")-    c                    t         j                  dk(  r| j                  rd| _        y| j                  j	                          y)zN
        A signal handler that is registered with the parent process.
        win32FN)sysplatformr   r   set)r   sigframes      r   signal_handlerzBaseReload.signal_handler(   s2     <<7"t'9'9!&D  "r   c                    | j                          | D ]S  }|st        j                  d| j                  dj	                  t        t        |                   | j                          U | j                          y )Nz'%s detected changes in %s. Reloading...z, )	startuploggerwarningr   joinmap_display_pathrestartshutdown)r   changess     r   runzBaseReload.run1   s^     	G=&&IIc-9:
 	 	r   c                v    | j                   j                  | j                  j                        r
t	               y N)r   waitr   reload_delayStopIterationr   s    r   pausezBaseReload.pause>   s-      !9!9:/! ;r   c                    | S r2    r6   s    r   __iter__zBaseReload.__iter__B   s    r   c                "    | j                         S r2   )should_restartr6   s    r   __next__zBaseReload.__next__E   s    ""$$r   c                   d| j                    d| j                   }dj                  t        t	        | j                         dd      t        t	        | j                        dd            }t
        j                  |d|i       t        D ]"  }t        j                  || j                         $ t        | j                  | j                  | j                  	      | _        | j                  j                          y )
NzStarted reloader process [z] using z&Started reloader process [{}] using {}cyanTfgboldcolor_messageextrar   r   r   )r   r   formatr	   strr(   infoHANDLED_SIGNALSsignalr%   r
   r   r   r   processstart)r   messagerC   r#   s       r   r'   zBaseReload.startupH   s    .txxjASAS@TU@GG#dhh-F6#d(()f4@
 	GO]#CD" 	4CMM#t223	4 &T[[VZVbVbcr   c                R   t         j                  dk(  rd| _        | j                  j                  J t        j                  | j                  j                  t        j                         t         j                  j                  d       t         j                  j                          n| j                  j                          | j                  j                          t        | j                  | j                   | j"                        | _        | j                  j%                          y )Nr   T rF   )r    r!   r   rL   r   r   killrK   CTRL_C_EVENTstdoutwriteflush	terminater*   r
   r   r   r   rM   r6   s    r   r-   zBaseReload.restartV   s    <<7"!%D<<##///GGDLL$$f&9&9: JJS!JJLL""$%T[[VZVbVbcr   c                   t         j                  dk(  r| j                  j                          n| j                  j                          | j                  j                          | j                  D ]  }|j                           dt        | j                         d}dj                  t        t        | j                        dd            }t        j                  |d|i	       y )
Nr   zStopping reloader process []zStopping reloader process [{}]r?   Tr@   rC   rD   )r    r!   r   r"   rL   rV   r*   r   closerH   r   rG   r	   r(   rI   )r   sockrN   rC   s       r   r.   zBaseReload.shutdownf   s    <<7"  "LL""$LL 	DJJL	 0DHHa@8??c$((mX^ei@jkGO]#CDr   c                    t        d      )Nz2Reload strategies should override should_restart())NotImplementedErrorr6   s    r   r<   zBaseReload.should_restartt   s    !"VWWr   N)r   r   r   z%Callable[[list[socket] | None], None]r   zlist[socket]returnNone)r#   intr$   zFrameType | Noner]   r^   )r]   r^   )r]   zIterator[list[Path] | None])r]   zlist[Path] | None)__name__
__module____qualname__r   r%   r0   r7   r:   r=   r'   r-   r.   r<   r9   r   r   r   r      s\    .. 6. 	.
 
.#"% EXr   r   c                |    	 d| j                  t        j                                dS # t        $ r	 d|  dcY S w xY w)N')relative_tor   cwd
ValueError)paths    r   r,   r,   x   sE    4##DHHJ/022 4&{s   &) ;;)rh   r   r]   rH   )
__future__r   loggingr   rK   r    r   collections.abcr   r   pathlibr   r   typesr   uvicorn._ansir	   uvicorn._subprocessr
   uvicorn.configr   SIGINTSIGTERMrJ   	getLoggerr(   r   r,   r9   r   r   <module>rt      sk    "  	  
  .     . ! MM
NN
 
		?	+\X \X~r   