o
    ٷi                     @  s   d Z 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Zddl	Z	ddl
mZ ddlZddlmZ ddlZddlmZ e	 Zdd Z				
	ddddZ				
	ddddZedkreee dS dS )a  

Contains the functions that run when `gradio` is called from the command line. Specifically, allows

$ gradio app.py, to run app.py in reload mode where any changes in the app.py file or Gradio library reloads the demo.
$ gradio app.py my_demo, to use variable names other than "demo"
    )annotationsN)Path)print)utilsc               
   C  sx   t dr5t ddkr5zddlm}  |   td W n ty4 } ztd|  W Y d}~nd}~ww td dS )	z<Handle interrupt signals and logout based on user preferenceGRADIO_VIBE_MODEGRADIO_AUTO_LOGOUTtruer   )logoutz

Logged out of Hugging Facez%

Error logging out of Hugging Face: N)osgetenvhuggingface_hubr	   r   	Exceptionsysexit)r	   e r   N/home/ubuntu/.local/lib/python3.10/site-packages/gradio/cli/commands/reload.py_handle_interrupt   s   r   demoutf-8F	demo_pathr   	demo_namestradditional_watch_dirslist[str] | Noneencodingwatch_libraryboolc                   s  t | }|j|d d| | d| d| d| dg}t fdd|D s3td	| d
 t|}| rD|t  }n|}t	|j
|j tjjd}	t ttj
}
d}d}g }t	|
 r{|r{||
 |d|
 d7 }|d7 }|j
}t	| r|| |dkr|d7 }|d| d7 }t   }t	| r||vr|| |dkr|d7 }|d| d7 }|pg D ]}t ||vr|| |dkr|d7 }|d| d7 }qt|d  tjdt  |	|dd |D |fS )N)r   zwith (?:gr\.)?Blocks\(.*\) as z = gr\.Blocksz = gr\.Interfacez = gr\.ChatInterfacez = gr\.TabbedInterfacec                 3  s"    | ]}t j| t jd V  qdS ))flagsN)researchDOTALL).0papp_textr   r   	<genexpr>>   s     z _setup_config.<locals>.<genexpr>zC
[bold red]Warning[/]: Cannot statically find a gradio demo called z. Reload work may fail..z	Watching:r   z ''   ,
c                 S  s   g | ]}t |qS r   )r   )r"   sr   r   r   
<listcomp>r   s    z!_setup_config.<locals>.<listcomp>)r   	read_textanyr   r   abspathis_absoluterelative_tocwdr   parentstemreplacer
   pathsepinspectgetfilegradiostripappendabsoluter   insertgetcwd)r   r   r   r   r   original_pathpatternsabs_original_pathrelpathmodule_namegradio_foldermessagemessage_change_countwatching_dirs
abs_parentabs_currentwdr   r$   r   _setup_config,   s^   





rM   
watch_dirsc           
   	   C  s   t  t jdd  t  t jdd  t| ||||\}}}}ttjd|||t||d}dtjv r:tjd |d< t	j
tjd|g|d}	|	 d u r_z|	  W d S  ttfy^   Y d S w d S )	Nc                 S     t  S Nr   _signum_framer   r   r   <lambda>|       zmain.<locals>.<lambda>c                 S  rO   rP   rQ   rR   r   r   r   rU   }   rV   r*   )GRADIO_WATCH_DIRSGRADIO_WATCH_MODULE_NAMEGRADIO_WATCH_DEMO_NAMEGRADIO_WATCH_DEMO_PATHGRADIO_WATCH_ENCODINGr   z-u)env)signalSIGINTSIGTERMrM   dictr
   environjoinr   
subprocessPopenr   
executablepollwaitKeyboardInterruptOSError)
r   r   rN   r   r   rE   r7   watch_sourcesenv_varspopenr   r   r   mainu   s4   

	
rm   __main__)r   Nr   F)
r   r   r   r   r   r   r   r   r   r   )
r   r   r   r   rN   r   r   r   r   r   )__doc__
__future__r   r9   r
   r   r]   rc   r   	threadingpathlibr   typerrichr   r;   r   localreload_threadr   rM   rm   __name__runr   r   r   r   <module>   s:    K(