o
    òT·j²  ã                   @  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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 d
¡ZG dd„ dƒZddd„ZdS )é    )ÚannotationsN)ÚCallableÚIterator)ÚPath)Úsocket)Ú	FrameType)Ústyle)Úget_subprocess)ÚConfigzuvicorn.errorc                   @  sp   e Zd Zd$d	d
„Zd%dd„Zd&dd„Zd&dd„Zd'dd„Zd(dd„Zd&dd„Z	d&dd„Z
d&dd „Zd(d!d"„Zd#S ))Ú
BaseReloadÚconfigr
   Útargetú%Callable[[list[socket] | None], None]Úsocketsúlist[socket]ÚreturnÚNonec                 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/home/dinkstrade/pdmp-scanner/venv/lib/python3.10/site-packages/uvicorn/supervisors/basereload.pyÚ__init__   s   


zBaseReload.__init__ÚsigÚintÚframeúFrameType | Nonec                 C  s(   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!   r   r   r   Úsignal_handler(   s   
zBaseReload.signal_handlerc              
   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   Úchangesr   r   r   Úrun1   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.pauseúIterator[list[Path] | None]c                 C  s   | S r2   r   r6   r   r   r   Ú__iter__B   s   zBaseReload.__iter__úlist[Path] | Nonec                 C  s   |   ¡ S r2   )Úshould_restartr6   r   r   r   Ú__next__E   ó   zBaseReload.__next__c                 C  sŽ   d| j › d| j› �}d tt| j ƒddd�tt| jƒddd�¡}tj|d|id� tD ]	}t || j	¡ q+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   Úformatr   Ústrr)   ÚinfoÚHANDLED_SIGNALSÚsignalr'   r	   r   r   r   ÚprocessÚstart)r   ÚmessagerB   r   r   r   r   r(   H   s   þzBaseReload.startupc                 C  s‚   t jdkr%d| _| jjd usJ ‚t | jjtj¡ t j	 
d¡ t j	 ¡  n| j ¡  | j ¡  t| j| j| jd�| _| j ¡  d S )Nr#   Tú rE   )r$   r%   r   rK   r   r   ÚkillrJ   ÚCTRL_C_EVENTÚstdoutÚwriteÚflushÚ	terminater+   r	   r   r   r   rL   r6   r   r   r   r.   V   s   


zBaseReload.restartc                 C  s€   t jdkr| j ¡  n| j ¡  | j ¡  | jD ]}| ¡  qdt	| j
ƒ› d�}d tt	| j
ƒddd�¡}tj|d|id	� d S )
Nr#   zStopping reloader process [ú]zStopping reloader process [{}]r>   Tr?   rB   rC   )r$   r%   r   r&   rK   rT   r+   r   ÚcloserG   r   rF   r   r)   rH   )r   ÚsockrM   rB   r   r   r   r/   f   s   




zBaseReload.shutdownc                 C  s   t dƒ‚)Nz2Reload strategies should override should_restart())ÚNotImplementedErrorr6   r   r   r   r;   t   r=   zBaseReload.should_restartN)r   r
   r   r   r   r   r   r   )r   r    r!   r"   r   r   )r   r   )r   r8   )r   r:   )Ú__name__Ú
__module__Ú__qualname__r   r'   r1   r7   r9   r<   r(   r.   r/   r;   r   r   r   r   r      s    


	





r   Úpathr   r   rG   c                 C  s8   zd|   t ¡ ¡› d�W S  ty   d| › d� Y S w )Nú')Úrelative_tor   ÚcwdÚ
ValueError)r\   r   r   r   r-   x   s
   ÿr-   )r\   r   r   rG   )Ú
__future__r   Úloggingr   rJ   r$   r   Úcollections.abcr   r   Úpathlibr   r   Útypesr   Úuvicorn._ansir   Úuvicorn._subprocessr	   Úuvicorn.configr
   ÚSIGINTÚSIGTERMrI   Ú	getLoggerr)   r   r-   r   r   r   r   Ú<module>   s&    þ
_