|
""" |
|
|
|
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) |
|
|