
    ^j                        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j        d
          Z G d d          ZddZdS )    )annotationsN)CallableIterator)Path)socket)	FrameType)style)get_subprocess)Configzuvicorn.errorc                  ^    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dS )
BaseReloadconfigr   target%Callable[[list[socket] | None], None]socketslist[socket]returnNonec                    || _         || _        || _        t          j                    | _        t          j                    | _        d| _	        d | _
        d S )NF)r   r   r   	threadingEventshould_exitosgetpidpidis_restartingreloader_name)selfr   r   r   s       P/home/drrone/venv/lib/python3.11/site-packages/uvicorn/supervisors/basereload.py__init__zBaseReload.__init__   sL     $?,,9;;")-    sigintframeFrameType | Nonec                x    t           j        dk    r| j        r	d| _        dS | j                                         dS )zN
        A signal handler that is registered with the parent process.
        win32FN)sysplatformr   r   set)r   r"   r$   s      r   signal_handlerzBaseReload.signal_handler(   sB     <7""t'9"!&D  """""r!   c                   |                                   | D ]_}|r[t                              d| j        d                    t          t          |                               |                                  `|                                  d S )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9::  
 r!   c                j    | j                             | j        j                  rt	                      d S N)r   waitr   reload_delayStopIterationr   s    r   pausezBaseReload.pause>   s4      !9:: 	"//!	" 	"r!   Iterator[list[Path] | None]c                    | S r8    r<   s    r   __iter__zBaseReload.__iter__B   s    r!   list[Path] | Nonec                *    |                                  S r8   )should_restartr<   s    r   __next__zBaseReload.__next__E   s    ""$$$r!   c                   d| j          d| j         }d                    t          t	          | j                   dd          t          t	          | j                  dd                    }t
                              |d|i           t          D ]}t          j        || j	                   t          | j        | j        | j        	          | _        | j                                         d S )
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   messagerK   r"   s       r   r-   zBaseReload.startupH   s    UtxUUASUU@GG#dh--F666#d())f4@@@
 
 	GO]#CDDD" 	4 	4CM#t23333%T[VZVbcccr!   c                    t           j        dk    r|d| _        | j        j        J t          j        | j        j        t          j                   t           j	        
                    d           t           j	                                         n| j                                         | j                                         t          | j        | j        | j                  | _        | j                                         d S )Nr'   T rN   )r(   r)   r   rT   r   r   killrS   CTRL_C_EVENTstdoutwriteflush	terminater0   r
   r   r   r   rU   r<   s    r   r3   zBaseReload.restartV   s    <7""!%D<#///GDL$f&9::: JS!!!JL""$$$%T[VZVbcccr!   c                   t           j        dk    r| j                                         n| j                                         | j                                         | j        D ]}|                                 dt          | j
                   d}d                    t          t          | j
                  dd                    }t                              |d|i	           d S )
Nr'   zStopping reloader process []zStopping reloader process [{}]rG   TrH   rK   rL   )r(   r)   r   r*   rT   r^   r0   r   closerP   r   rO   r	   r.   rQ   )r   sockrV   rK   s       r   r4   zBaseReload.shutdownf   s    <7""  """"L""$$$L 	 	DJJLLLL@DH@@@8??c$(mmX^ei@j@j@jkkGO]#CDDDDDr!   c                     t          d          )Nz2Reload strategies should override should_restart())NotImplementedErrorr<   s    r   rD   zBaseReload.should_restartt   s    !"VWWWr!   N)r   r   r   r   r   r   r   r   )r"   r#   r$   r%   r   r   )r   r   )r   r>   )r   rB   )__name__
__module____qualname__r    r+   r6   r=   rA   rE   r-   r3   r4   rD   r@   r!   r   r   r      s        . . . .# # # #   " " " "   % % % %       E E E EX X X X X Xr!   r   pathr   r   rP   c                    	 d|                      t          j                               dS # t          $ r	 d|  dcY S w xY w)N')relative_tor   cwd
ValueError)rh   s    r   r2   r2   x   s[    24##DHJJ//2222   4{{{s   ), ??)rh   r   r   rP   )
__future__r   loggingr   rS   r(   r   collections.abcr   r   pathlibr   r   typesr   uvicorn._ansir	   uvicorn._subprocessr
   uvicorn.configr   SIGINTSIGTERMrR   	getLoggerr.   r   r2   r@   r!   r   <module>ry      sI   " " " " " "  				  



     . . . . . . . .                         . . . . . . ! ! ! ! ! ! M
N
 
	?	+	+\X \X \X \X \X \X \X \X~     r!   