o
    "ch                     @   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
mZmZmZmZmZmZ ddlmZ ddlmZmZmZ ddlmZmZmZ dd	lmZ ed
ZdedefddZ deddfddZ!dede
fddZ"dedee deedeeeege#f f ef fddZ$dS )    N)Path)dedent)AnyCallableListOptionalTupleUnioncast   )Change)
BaseFilterDefaultFilterPythonFilter)detect_target_typeimport_stringrun_process)VERSIONzwatchfiles.clipath_strreturnc                 C   s    t | }| st|| S )N)r   existsFileNotFoundErrorresolve)r   path r   L/home/air/goalskill/back/venv/lib/python3.10/site-packages/watchfiles/cli.pyresolve_path   s   r   args_c                  G   s  | pt jdd }tjdttjpddtjd}|j	ddd	 |j	d
dddd |j	ddt
dd |j	ddt
dg ddd |j	ddt
ddd |j	ddt
dd |j	ddd d! |j	d"dd#d! |j	d$dt
d%g d&d'd |j	d(dtd)d*d |j	d+dtd,d-d |j	d.dtdd/d |j	d0dd1d! |j	d2d3d4d5t d6 ||}|jrtj}ntt|j }t }|| |tjd7d8d9 td}|| || |jdkrt|j}n|j}|d:krtd;|j t |j |j!r|jgt"#|j! t _n	|j!rt$d< z
d=d> |j%D }W n# t&y= }	 zt'd?|	 d@t j(dA t )d W Y d}	~	nd}	~	ww t*|j+|j,\}
}t-dBtdC.dDdE |D |j|| t/||j||
|tjk|j0|j1|j2 |j3|j4dF	 dS )Ga  
    Watch one or more directories and execute either a shell command or a python function on file changes.

    Example of watching the current directory and calling a python function:

        watchfiles foobar.main

    Example of watching python files in two local directories and calling a shell command:

        watchfiles --filter python 'pytest --lf' src tests

    See https://watchfiles.helpmanual.io/cli/ for more information.
    r   N
watchfiles 
)progdescriptionformatter_classtargetz&Command or dotted function path to run)helppaths*.z8Filesystem paths to watch, defaults to current directory)nargsdefaultr%   z--ignore-paths?zrSpecify directories to ignore, to ignore multiple paths use a comma as separator, e.g. "env" or "env,node_modules")r)   typer%   z--target-typeauto)commandfunctionr-   zWhether the target should be intercepted as a shell command or a python function, defaults to "auto" which infers the target type from the target string)r)   r,   r*   choicesr%   z--filterr*   zWhich files to watch, defaults to "default" which uses the "DefaultFilter", "python" uses the "PythonFilter", "all" uses no filter, any other value is interpreted as a python function/class path which is imported)r)   r,   r*   r%   z--argszbArguments to set on sys.argv before calling target function, used only if the target is a functionz	--verbose
store_truez1Set log level to "debug", wins over `--verbosity`)actionr%   z--non-recursivez7Do not watch for changes in sub-directories recursivelyz--verbosityinfo)warningr3   debugzLog level, defaults to "info"z--sigint-timeout   z?How long to wait for the sigint timeout before sending sigkill.z--grace-periodr   zKNumber of seconds after the process is started before watching for changes.z--sigkill-timeoutzLHow long to wait for the sigkill timeout before issuing a timeout exception.z--ignore-permission-deniedzEIgnore permission denied errors while watching files and directories.z	--versionz-Vversionz
%(prog)s v)r2   r7   z[%(asctime)s] %(message)sz%H:%M:%S)fmtdatefmtr/   z/target_type=function, attempting import of "%s"z1--args is only used when the target is a functionc                 S   s   g | ]}t |qS r   )r   .0pr   r   r   
<listcomp>   s    zcli.<locals>.<listcomp>zpath "z" does not existfileu:   watchfiles v%s 👀  path=%s target="%s" (%s) filter=%s...z, c                 s   s    | ]	}d | d V  qdS )"Nr   r:   r   r   r   	<genexpr>   s    zcli.<locals>.<genexpr>)	r$   target_typewatch_filterr5   sigint_timeoutsigkill_timeout	recursiveignore_permission_deniedgrace_period)5sysargvargparseArgumentParserr   cli__doc__stripRawTextHelpFormatteradd_argumentstrintfloatr   
parse_argsverboseloggingDEBUGgetattr	verbosityupperStreamHandlersetLevelsetFormatter	Formatter	getLogger
addHandlerrB   r   r$   loggerr5   import_exitargsshlexsplitr4   r&   r   printstderrexitbuild_filterfilterignore_pathsr3   joinr   rD   rE   non_recursiverG   rH   )r   rd   parserarg_namespace	log_levelhdlr	wg_loggerrB   r&   erC   watch_filter_strr   r   r   rM      s   	








	rM   function_pathc              
   C   sn   t  }|tjvrtj| zt| W S  ty6 } ztd| tjd t	d W Y d }~d S d }~ww )NzImportError: r>   r   )
osgetcwdrI   r   appendr   ImportErrorrg   rh   ri   )rv   cwdrt   r   r   r   rc      s   

rc   filter_nameignore_paths_strc                 C   s   g }|rdd | dD }| dkrt|ddfS | dkr$t|ddfS | d	kr1|r/td
 dS t| }t|trGt|trG||d|j	fS |rNtd t|tr^t|t
r^| |j	fS ttttgtf |}|t|fS )Nc                 S   s   g | ]}t | qS r   )r   r   r:   r   r   r   r=      s    z build_filter.<locals>.<listcomp>,r*   )rl   r   pythonr   allz>"--ignore-paths" argument ignored as "all" filter was selected)Nz(no filter)zN"--ignore-paths" argument ignored as filter is not a subclass of DefaultFilter)rf   r   r   rb   r4   rc   
isinstancer,   
issubclass__name__r   r
   r   r   rR   boolrepr)r|   r}   rl   watch_filter_clsrC   r   r   r   rj      s(   

rj   )%rK   rW   rw   re   rI   pathlibr   textwrapr   typingr   r   r   r   r   r	   r
   r   r   filtersr   r   r   runr   r   r   r7   r   r`   rb   rR   r   rM   rc   r   rj   r   r   r   r   <module>   s0    $
   