From fb63f6b5912171595065ea7498d1d770a175d1d9 Mon Sep 17 00:00:00 2001 From: Eddy Pedroni Date: Mon, 14 Jul 2025 22:32:50 +0200 Subject: Add click interface to web UI --- Makefile | 9 ++++++--- deployment/start-solo-tool.sh | 6 ++---- web-project/pyproject.toml | 1 + web-project/src/solo_tool_web.py | 15 ++++++++++++--- 4 files changed, 21 insertions(+), 10 deletions(-) diff --git a/Makefile b/Makefile index e382052..59898a5 100644 --- a/Makefile +++ b/Makefile @@ -17,8 +17,11 @@ clean: uv pip install -r requirements.txt touch .venv/touchfile -gui: .venv/touchfile - ./.venv/bin/solo-tool-web 8080 +web-deploy: .venv/touchfile + ./.venv/bin/solo-tool-web --no-reload --port 8080 --refresh 0.5 + +web-dev: .venv/touchfile + ./.venv/bin/python web-project/src/solo_tool_web.py install: deployment/solo-tool.service deployment/start-solo-tool.sh mkdir -p ~/.config/systemd/user @@ -33,4 +36,4 @@ uninstall: rm ~/.config/systemd/user/solo-tool.service systemctl --user daemon-reload -.PHONY: all test clean gui install uninstall +.PHONY: all test clean web-deploy web-dev install uninstall diff --git a/deployment/start-solo-tool.sh b/deployment/start-solo-tool.sh index d1d38f7..06a4d5d 100755 --- a/deployment/start-solo-tool.sh +++ b/deployment/start-solo-tool.sh @@ -3,8 +3,6 @@ # Get latest version git pull -# Bootstrap venv -make - # Run web UI -./.venv/bin/python web-project/src/solo_tool_web.py 80 +make web-deploy + diff --git a/web-project/pyproject.toml b/web-project/pyproject.toml index 844de72..b175dcc 100644 --- a/web-project/pyproject.toml +++ b/web-project/pyproject.toml @@ -11,6 +11,7 @@ description = "A NiceGUI-based web frontend for the solo_tool library" requires-python = ">=3.13" dependencies = [ "nicegui==2.11.1", + "click==8.2.1", "solo_tool>=2.0" ] dynamic = ["version"] diff --git a/web-project/src/solo_tool_web.py b/web-project/src/solo_tool_web.py index 181dde2..20d2d11 100644 --- a/web-project/src/solo_tool_web.py +++ b/web-project/src/solo_tool_web.py @@ -5,6 +5,7 @@ from os.path import basename, splitext from functools import partial from nicegui import ui from starlette.formparsers import MultiPartParser +import click from solo_tool import SoloTool from solo_tool.session_manager import loadSession, saveSession @@ -128,11 +129,19 @@ def landingPage(): for name, soloTool in sessions.items(): ui.button(name, on_click=partial(ui.navigate.to, f"/{name}")) -def main(reload=False): +def start(port, refresh, reload): try: - ui.run(reload=reload, binding_refresh_interval=0.5, port=int(sys.argv[1])) + ui.run(reload=reload, binding_refresh_interval=refresh, port=port) except KeyboardInterrupt: pass +@click.command() +@click.option("--port", type=int, default=8080, help="Port on which to bind.") +@click.option("--refresh", type=float, default=0.5, help="Refresh interval in seconds.") +@click.option("--reload/--no-reload", default=True, help="Auto-reload when files change.") +def main(port, refresh, reload): + start(port, refresh, reload) + +# Hardcoded dev settings if __name__ in {"__main__", "__mp_main__"}: - main(True) + start(8080, 0.5, True) -- cgit v1.2.3