B
    CeR                 @   s   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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eedddZdS )    N)Path)socket)	FrameType)CallableIteratorListOptional)get_subprocess)Configzuvicorn.errorc               @   s   e Zd Zeeeee  gdf ee ddddZe	ee
 ddddZddd	d
ZddddZeeee   dddZeee  dddZddddZddddZddddZeee  dddZdS )
BaseReloadN)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   r/var/www/downstreamdata.science/rtclock/rtclock-venv/lib/python3.7/site-packages/uvicorn/supervisors/basereload.py__init__   s    

zBaseReload.__init__)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   sJ   |    x4| D ],}|rtd| jdtt| |   qW |   d S )Nz'%s detected changes in %s. Reloading...z, )	startuploggerwarningr   joinmap_display_pathrestartshutdown)r   changesr   r   r   run0   s    
zBaseReload.runc             C   s   | j | jjrt d S )N)r   waitr   Zreload_delayStopIteration)r   r   r   r   pause=   s    zBaseReload.pausec             C   s   | S )Nr   )r   r   r   r   __iter__A   s    zBaseReload.__iter__c             C   s   |   S )N)should_restart)r   r   r   r   __next__D   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 xtD ]}t		|| j
 q\W t| 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   messager6   r   r   r   r   r#   G   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   T)r   r   r   )r   r    r   r?   r   AssertionErrorr   killr>   ZCTRL_C_EVENT	terminater&   r	   r   r   r   r@   )r   r   r   r   r)   W   s    


zBaseReload.restartc             C   s   t jdkr| j  n
| j  | j  x| jD ]}|  q2W d	t
| j}d	tjt
| jddd}tj|d|id d S )Nr   zStopping reloader process [{}]r3   T)r4   r5   r6   )r7   )r   r    r   r!   r?   rD   r&   r   closer8   r;   r   r9   r:   r$   r<   )r   sockrA   r6   r   r   r   r*   e   s    


zBaseReload.shutdownc             C   s   t dd S )Nz2Reload strategies should override should_restart())NotImplementedError)r   r   r   r   r1   u   s    zBaseReload.should_restart)__name__
__module____qualname__r
   r   r   r   r   r   intr   r"   r,   r/   r   r   r0   r2   r#   r)   r*   r1   r   r   r   r   r      s   		r   )pathr   c             C   s8   yd|  t  dS  tk
r2   d|  dS X d S )N')relative_tor   cwd
ValueError)rL   r   r   r   r(   y   s    r(   )loggingr   r>   r   r   pathlibr   r   typesr   typingr   r   r   r   r9   Zuvicorn._subprocessr	   Zuvicorn.configr
   SIGINTSIGTERMr=   	getLoggerr$   r   r;   r(   r   r   r   r   <module>   s    
a