|
import dataclasses |
|
from pathlib import Path |
|
|
|
import pytest |
|
|
|
import gradio |
|
import gradio as gr |
|
from gradio.cli.commands.reload import _setup_config |
|
from gradio.http_server import Server |
|
|
|
|
|
def build_demo(): |
|
with gr.Blocks() as demo: |
|
gr.Textbox("") |
|
|
|
return demo |
|
|
|
|
|
@dataclasses.dataclass |
|
class Config: |
|
module_name: str |
|
path: Path |
|
watch_dirs: list[str] |
|
demo_name: str |
|
|
|
|
|
class TestReload: |
|
@pytest.fixture(autouse=True) |
|
def argv(self): |
|
return ["demo/calculator/run.py"] |
|
|
|
@pytest.fixture |
|
def config(self, monkeypatch, argv) -> Config: |
|
monkeypatch.setattr("sys.argv", ["gradio"] + argv) |
|
name = argv[1].replace("--demo-name", "").strip() if len(argv) > 1 else "demo" |
|
return Config(*_setup_config(argv[0], name)) |
|
|
|
@pytest.fixture(params=[{}]) |
|
def reloader(self, config): |
|
reloader = Server(config) |
|
reloader.should_exit = True |
|
yield reloader |
|
reloader.close() |
|
|
|
def test_config_default_app(self, config): |
|
assert config.module_name == "demo.calculator.run" |
|
|
|
@pytest.mark.parametrize("argv", [["demo/calculator/run.py", "--demo-name test"]]) |
|
def test_config_custom_app(self, config): |
|
assert config.module_name == "demo.calculator.run" |
|
assert config.demo_name == "test" |
|
|
|
def test_config_watch_gradio(self, config): |
|
gradio_dir = str(Path(gradio.__file__).parent) |
|
assert gradio_dir in config.watch_dirs |
|
|
|
def test_config_watch_app(self, config): |
|
demo_dir = str(Path("demo/calculator/run.py").resolve().parent) |
|
assert demo_dir in config.watch_dirs |
|
|