gptsite / gradio /reload.py
microhan's picture
update module gradio
d4576ce
raw
history blame
1.79 kB
"""
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"
"""
import inspect
import os
import sys
from pathlib import Path
import gradio
from gradio import networking, utils
def run_in_reload_mode():
args = sys.argv[1:]
if len(args) == 0:
raise ValueError("No file specified.")
if len(args) == 1:
demo_name = "demo"
else:
demo_name = args[1]
original_path = args[0]
abs_original_path = utils.abspath(original_path)
path = os.path.normpath(original_path)
path = path.replace("/", ".")
path = path.replace("\\", ".")
filename = os.path.splitext(path)[0]
gradio_folder = Path(inspect.getfile(gradio)).parent
port = networking.get_first_available_port(
networking.INITIAL_PORT_VALUE,
networking.INITIAL_PORT_VALUE + networking.TRY_NUM_PORTS,
)
print(
f"\nLaunching in *reload mode* on: http://{networking.LOCALHOST_NAME}:{port} (Press CTRL+C to quit)\n"
)
command = f"uvicorn {filename}:{demo_name}.app --reload --port {port} --log-level warning "
message = "Watching:"
message_change_count = 0
if str(gradio_folder).strip():
command += f'--reload-dir "{gradio_folder}" '
message += f" '{gradio_folder}'"
message_change_count += 1
abs_parent = abs_original_path.parent
if str(abs_parent).strip():
command += f'--reload-dir "{abs_parent}"'
if message_change_count == 1:
message += ","
message += f" '{abs_parent}'"
print(message + "\n")
os.system(command)