learn-sql-model/learn_sql_model/cli/dashboard.py
2023-06-14 13:43:06 -05:00

75 lines
1.7 KiB
Python

from textual.app import App, ComposeResult
from textual.containers import ScrollableContainer
from textual.widgets import Footer, Header, Static
import typer
from websocket import create_connection
from learn_sql_model.cli.common import verbose_callback
dashboard_app = typer.Typer()
@dashboard_app.callback()
def config(
verbose: bool = typer.Option(
False,
callback=verbose_callback,
help="show the log messages",
),
):
"dashboard cli"
class HeroName(Static):
"""A stopwatch widget."""
class HerosDisplay(Static):
"""A stopwatch widget."""
@property
def ws(self):
def connect():
self._ws = create_connection(
f"ws://{config.api_client.url.replace('https://', '')}/ws-heros"
)
if not hasattr(self, "_ws"):
connect()
if not self._ws.connected:
connect()
return self._ws
def compose(self) -> ComposeResult:
"""Create child widgets of a stopwatch."""
for hero in self.heros:
yield HeroName(hero.name)
class DashboardApp(App):
"""A Textual app to manage stopwatches."""
BINDINGS = [("d", "toggle_dark", "Toggle dark mode")]
# heros = reactive(Heros.list())
def compose(self) -> ComposeResult:
"""Create child widgets for the app."""
yield Header()
yield Footer()
yield ScrollableContainer(HerosDisplay())
def action_toggle_dark(self) -> None:
"""An action to toggle dark mode."""
self.dark = not self.dark
@dashboard_app.command()
def run(
verbose: bool = typer.Option(
False,
callback=verbose_callback,
help="show the log messages",
),
):
app = DashboardApp()
app.run()