
    9jn                        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j&                  d	      Z G d
 de      Z G d de      Zy)    )annotationsN)Path)socket)TYPE_CHECKINGCallable)DefaultWatcher)Config)
BaseReloadzuvicorn.errorc                  0     e Zd Zd fdZddZddZ xZS )CustomWatcherc                   dg}|D cg c]  }||j                   vs| c}| _        | j                  j                  |j                         t	        t        | j                              | _        g d}|D cg c]  }||j                  vs| c}| _        | j                  j                  |j                          t	        t        | j                              | _        i | _        i | _        t        |j                        | _
        t        |j                        | _        || _        t        | =  t!        |             y c c}w c c}w )Nz*.py)z.*z.py[cod]z.sw.*z~*)reload_excludesincludesextendreload_includeslistsetexcludeswatched_dirswatched_filesreload_dirsdirs_includesreload_dirs_excludesdirs_excludesresolved_rootsuper__init__str)self	root_pathconfigdefault_includesdefaultdefault_excludes	__class__s         b/media/conek/DATA/Code/OCR/venv/lib/python3.12/site-packages/uvicorn/supervisors/watchgodreload.pyr   zCustomWatcher.__init__   s   "80@jWGSYSiSiDijV334S/0<0@jWGSYSiSiDijV334S/0-/.0 !3!34 !<!<=&Y( k
 ks   EE9EEc                   | j                   j                  |j                        }||S t        |      }|j                  t        j
                         k(  r:t        j
                         | j                  vrd| j                   |j                  <   y| j                  D ]  }t        |      j                  |      rd| j                   |j                  <    y|j                  |      sJ| j                  D ]/  }|j                  |      sd| j                   |j                  <     y d| j                   |j                  <    y d| j                   |j                  <   y)NFT)r   getpathr   parentcwdr   r   r   endswithmatchr   )r   entrycached_result
entry_pathinclude_patternexclude_patterns         r&   should_watch_filezCustomWatcher.should_watch_file)   s%   **..uzz:$  %[
 
*txxzASAS/S-2Duzz*#}} 
	O:''815""5::.0'+}} %O!''89>**5::6$% 26""5::.
	 */5::&    c           	        | j                   j                  |j                        }||S t        |      }|| j                  v rd| j                   |j                  <   y| j
                  D ]  }|j                  |      sd}|| j                  v rd}| j                  D ]  }||j                  v sd} |rCt        j                  d|j                  | j                        t        | j                               d| j                   |j                  <   | j                  j                  |        y || j                  v rd| j                   |j                  <   y| j                  D ]+  }||j                  v sd| j                   |j                  <    y | j                  D ]  }|j                  |      st        j!                  dt        |j                  | j                              t        | j                               | j                  j                  |       d| j                   |j                  <    y d| j                   |j                  <   y)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(   r)   r   r   r   r-   r   parentsloggerdebugrelative_tor   r   addr   info)r   r.   r/   r0   r2   
is_watched	directoryr1   s           r&   should_watch_dirzCustomWatcher.should_watch_dirB   s   ))--ejj9$  %[
+++,1Dejj)#}} 	O0"
!3!33!%J!%!3!3 *I J$6$66%)
* LLm"..t/A/ABD../
 16!!%**-""&&z2%	( +++,0Dejj)++ 	IJ...04!!%**-	
  $}} 		O0e
..t/A/ABC**+
 ""&&z204!!%**-		 ).%**%r4   )r    r   r!   r	   )r.   DirEntryreturnbool)__name__
__module____qualname__r   r3   r>   __classcell__r%   s   @r&   r   r      s    )$24r4   r   c                  8     e Zd Z	 	 	 	 	 	 	 	 d fdZddZ xZS )WatchGodReloadc                   t        j                  dt               t        |   |||       d| _        g | _        g }|j                  D ]4  }t        j                         |j                  vs$|j                  |       6 t        j                         |vr#|j                  t        j                                |D ]?  }| j                  j                  t        |j                         | j                               A y )NzU"watchgod" is deprecated, you should switch to watchfiles (`pip install watchfiles`).WatchGod)warningswarnDeprecationWarningr   r   reloader_namewatchersr   r   r+   r6   appendr   resolver!   )r   r!   targetsocketsr   r=   wr%   s          r&   r   zWatchGodReload.__init__z   s     	f	
 	1'++ 	.Ixxz!2!22""9-	. 88:[(txxz* 	JAMM  qyy{DKK!HI	Jr4   c           
         | j                          | j                  D ]F  }|j                         }|t               k7  s!t	        |D ch c]  }t        |d          c}      c S  y c c}w )N   )pauserO   checkr   r   r   )r   watcherchangecs       r&   should_restartzWatchGodReload.should_restart   sZ    

}} 	:G]]_F8AT!A$Z899	:
  9s   A'
)r!   r	   rR   z%Callable[[list[socket] | None], None]rS   zlist[socket]r@   None)r@   zlist[Path] | None)rB   rC   rD   r   r\   rE   rF   s   @r&   rH   rH   y   s8    JJ 6J 	J
 
J,r4   rH   )
__future__r   loggingrK   pathlibr   r   typingr   r   watchgodr   uvicorn.configr	   uvicorn.supervisors.basereloadr
   osr?   r   	getLoggerr7   r   rH    r4   r&   <module>rh      sa    "     * # ! 5{{3H			?	+`N `FZ r4   