U
    	fn                     @  s   d dl mZ d dlZd dlZd dlmZ d dlmZ d dlmZm	Z	 d dl
mZ d dlmZ d dlmZ er~d dlZeje Zed	ZG d
d deZG dd deZdS )    )annotationsNPath)socket)TYPE_CHECKINGCallable)DefaultWatcher)Config)
BaseReloadzuvicorn.errorc                      sD   e Zd Zddd fddZdddd	d
ZdddddZ  ZS )CustomWatcherr   r	   )	root_pathconfigc                   s   dg} fdd|D | _ | j  j tt| j | _ ddddg} fdd|D | _| j j tt| j| _i | _i | _t j	| _
t j| _|| _t t| d S )	Nz*.pyc                   s   g | ]}| j kr|qS  )reload_excludes.0defaultr   r   e/var/www/html/apigroqsegura/apigroq/lib/python3.8/site-packages/uvicorn/supervisors/watchgodreload.py
<listcomp>   s     
 z*CustomWatcher.__init__.<locals>.<listcomp>z.*z.py[cod]z.sw.*z~*c                   s   g | ]}| j kr|qS r   )reload_includesr   r   r   r   r      s     
 )includesextendr   listsetexcludesr   watched_dirswatched_filesreload_dirsdirs_includesreload_dirs_excludesdirs_excludesresolved_rootsuper__init__str)selfr   r   default_includesdefault_excludes	__class__r   r   r$      s    zCustomWatcher.__init__DirEntrybool)entryreturnc                 C  s   | j |j}|d k	r|S t|}|jt krNt | jkrNd| j |j< dS | jD ]j}t|	|rxd| j |j<  dS |
|rT| jD ]"}|
|rd| j |j<   dS qd| j |j<  dS qTd| j |j< dS )NFT)r   getpathr   parentcwdr   r   r%   endswithmatchr   )r&   r-   cached_result
entry_pathinclude_patternexclude_patternr   r   r   should_watch_file)   s(    




zCustomWatcher.should_watch_filec                 C  sf  | j |j}|d k	r|S t|}|| jkr<d| j |j< dS | jD ]x}||rBd}|| jkrbd}| jD ]}||jkrhd}qh|rt	
d|| jt| j d| j |j< | j|  dS qB|| jkrd| j |j< dS | jD ] }||jkrd| j |j<  dS q| jD ]P}||rt	dt|| jt| j | j| d| j |j<  dS qd| j |j< dS )NFTzPWatchGodReload detected a new excluded dir '%s' in '%s'; Adding to exclude list.zLWatchGodReload detected a new reload dir '%s' in '%s'; Adding to watch list.)r   r/   r0   r   r!   r   r4   r   parentsloggerdebugrelative_tor"   r%   addr   info)r&   r-   r5   r6   r8   Z
is_watched	directoryr7   r   r   r   should_watch_dirB   sV    











zCustomWatcher.should_watch_dir)__name__
__module____qualname__r$   r9   rA   __classcell__r   r   r)   r   r      s   r   c                      s6   e Zd Zddddd fddZdd	d
dZ  ZS )WatchGodReloadr	   z%Callable[[list[socket] | None], None]zlist[socket]None)r   targetsocketsr.   c                   s   t dt t ||| d| _g | _g }|jD ]}t	 |j
kr2|| q2t	 |krj|t	  |D ]}| jt| | j qnd S )NzU"watchgod" is deprecated, you should switch to watchfiles (`pip install watchfiles`).ZWatchGod)warningswarnDeprecationWarningr#   r$   reloader_namewatchersr   r   r2   r:   appendr   resolver   )r&   r   rH   rI   r   r@   wr)   r   r   r$   z   s    
zWatchGodReload.__init__zlist[Path] | None)r.   c                 C  s@   |    | jD ],}| }|t krtdd |D   S qd S )Nc                 S  s   h | ]}t |d  qS )   r   )r   cr   r   r   	<setcomp>   s     z0WatchGodReload.should_restart.<locals>.<setcomp>)pauserN   checkr   r   )r&   watcherZchanger   r   r   should_restart   s    

zWatchGodReload.should_restart)rB   rC   rD   r$   rX   rE   r   r   r)   r   rF   y   s   rF   )
__future__r   loggingrJ   pathlibr   r   typingr   r   Zwatchgodr   uvicorn.configr	   uvicorn.supervisors.basereloadr
   osr+   r%   	getLoggerr;   r   rF   r   r   r   r   <module>   s   

c