U
    	f
                     @  s   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 d dl	m	Z	 d dl
mZ d dlmZmZ d dlZd dlmZ d dlmZ ejejfZed	ZG d
d dZdddddZdS )    )annotationsN)Path)socket)	FrameType)CallableIterator)get_subprocess)Configzuvicorn.errorc                   @  s   e Zd ZdddddddZdd	dd
ddZddddZddddZddddZddddZddddZ	ddddZ
ddddZddddZd S )!
BaseReloadr	   z%Callable[[list[socket] | None], None]zlist[socket]None)configtargetsocketsreturnc                 C  s6   || _ || _|| _t | _t | _d| _	d | _
d S )NF)r   r   r   	threadingEventshould_exitosgetpidpidis_restartingreloader_name)selfr   r   r    r   a/var/www/html/apigroqsegura/apigroq/lib/python3.8/site-packages/uvicorn/supervisors/basereload.py__init__   s    

zBaseReload.__init__intzFrameType | None)sigframer   c                 C  s&   t jdkr| jrd| _n
| j  dS )zN
        A signal handler that is registered with the parent process.
        win32FN)sysplatformr   r   set)r   r   r   r   r   r   signal_handler)   s    zBaseReload.signal_handler)r   c              
   C  sF   |    | D ],}|rtd| jdtt| |   q|   d S )Nz'%s detected changes in %s. Reloading...z, )	startuploggerwarningr   joinmap_display_pathrestartshutdown)r   Zchangesr   r   r   run2   s    
zBaseReload.runc                 C  s   | j | jjrt d S N)r   waitr   reload_delayStopIterationr   r   r   r   pause?   s    zBaseReload.pausezIterator[list[Path] | None]c                 C  s   | S r-   r   r1   r   r   r   __iter__C   s    zBaseReload.__iter__zlist[Path] | Nonec                 C  s   |   S r-   )should_restartr1   r   r   r   __next__F   s    zBaseReload.__next__c                 C  s   d| j  d| j }dtjt| j dddtjt| jddd}tj|d|id tD ]}t		|| j
 qZt| j| j| jd	| _| 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   formatclickstylestrr%   infoHANDLED_SIGNALSsignalr#   r   r   r   r   processstart)r   messager:   r   r   r   r   r$   I   s    zBaseReload.startupc                 C  sl   t jdkr4d| _| jjd k	s tt| jjtj	 n
| j
  | j  t| j| j| jd| _| j  d S )Nr   Tr=   )r    r!   r   rE   r   AssertionErrorr   killrD   ZCTRL_C_EVENT	terminater'   r   r   r   r   rF   r1   r   r   r   r*   W   s    


zBaseReload.restartc                 C  s   t jdkr| j  n
| j  | j  | jD ]}|  q0dt	| j
 d}dtjt	| j
ddd}tj|d|id	 d S )
Nr   zStopping reloader process []zStopping reloader process [{}]r6   Tr7   r:   r;   )r    r!   r   r"   rE   rJ   r'   r   closerA   r   r>   r?   r@   r%   rB   )r   sockrG   r:   r   r   r   r+   c   s    




zBaseReload.shutdownc                 C  s   t dd S )Nz2Reload strategies should override should_restart())NotImplementedErrorr1   r   r   r   r4   q   s    zBaseReload.should_restartN)__name__
__module____qualname__r   r#   r,   r2   r3   r5   r$   r*   r+   r4   r   r   r   r   r
      s   	r
   r   rA   )pathr   c                 C  s>   zd|  t  dW S  tk
r8   d|  d Y S X d S )N')relative_tor   cwd
ValueError)rR   r   r   r   r)   u   s    r)   )
__future__r   loggingr   rD   r    r   pathlibr   r   typesr   typingr   r   r?   Zuvicorn._subprocessr   uvicorn.configr	   SIGINTSIGTERMrC   	getLoggerr%   r
   r)   r   r   r   r   <module>   s$   
[