diff --git a/sample.py b/sample.py deleted file mode 100644 index f3e76e7..0000000 --- a/sample.py +++ /dev/null @@ -1,17 +0,0 @@ -import json -import panel - -from watt42_viewlib import attach_w42_state - -w42_state = panel.rx(None) -attach_w42_state(rx_var=w42_state, system_id="fb2b91ce-383e-4356-96b3-b6405dacb353") - -state_as_text = panel.bind(lambda s: f"W42 State:\n\n```\n{json.dumps(s, indent=2)}\n```\n\nReplace this with some awesome visuals", w42_state) - -state_pane = panel.pane.Markdown(state_as_text, sizing_mode='stretch_width') - -_ = panel.template.FastListTemplate( - title="Sample W42 View App", - sidebar=[panel.pane.Markdown("This is a sample sidebar.")], - main=[panel.pane.Markdown("# Welcome to the Main Content Area"), state_pane], -).servable() diff --git a/watt42_viewlib/__init__.py b/watt42_viewlib/__init__.py index ac1a9a0..b93c4f7 100644 --- a/watt42_viewlib/__init__.py +++ b/watt42_viewlib/__init__.py @@ -1,55 +1,5 @@ -import asyncio -import json -import logging -import panel -from websockets import ConnectionClosed -from websockets.asyncio.client import connect +print(f"hello from viewlib") -logger = logging.getLogger(__name__) - -def attach_w42_state(rx_var: panel.rx, system_id: str): - - WS_URL = "ws://localhost:8000/ws/systems" # TODO: make configurable - - must_reconnect = True - - async def subscribe_to_system(): - - logger.info(f"Starting connection to {WS_URL} for system_id {system_id}") - - async for websocket in connect(WS_URL): - try: - logger.info(f"Connected to {WS_URL}") - send_response = await websocket.send(json.dumps({ - "action": "subscribe", - "system_id": system_id - })) - logger.info(f"Subscribed to system {system_id}, waiting for messages..., send_response={send_response}") - async for message in websocket: - as_json = json.loads(message) - rx_var.rx.value = as_json['change']['state'] - except ConnectionClosed: - if must_reconnect: - logger.info("connection closed, retrying...") - continue - else: - logger.info("Not retrying connection.") - return - except Exception as e: - logger.info(f"connection error, will retry: {e}") - await asyncio.sleep(2) - - logger.info(f"Attaching W42 state for system_id {system_id}") - panel.state.execute(subscribe_to_system) - - async def session_destroyed(): - logger.info("Stop retrying connection (session destroyed)") - nonlocal must_reconnect - must_reconnect = False - - def on_session_destroyed(session_id): - logger.info(f"Session {session_id} destroyed") - panel.state.execute(session_destroyed) - - panel.state.on_session_destroyed(on_session_destroyed) +def greet(name: str) -> str: + return f"Hello, {name}!"