"""Read-only, bounded live progress listener for the currently submitted test.""" import argparse import asyncio import json import time import websockets async def watch(client): async with websockets.connect('ws://192.168.10.51:8188/ws?clientId=' + client, max_size=2**22) as ws: deadline = time.monotonic() + 45 while time.monotonic() < deadline: try: raw = await asyncio.wait_for(ws.recv(), timeout=max(0.1, deadline-time.monotonic())) except asyncio.TimeoutError: break if not isinstance(raw,str): continue event = json.loads(raw) kind, data = event.get('type'), event.get('data',{}) if kind == 'progress_state': print(json.dumps({'type':kind,'data':data},ensure_ascii=False)[:2400],flush=True) if kind in ('progress','executing','execution_error','execution_success','status'): if kind == 'execution_error': data = {k:data.get(k) for k in ('prompt_id','node_id','exception_type','exception_message')} print(json.dumps({'type':kind,'data':data},ensure_ascii=False),flush=True) if __name__ == '__main__': p = argparse.ArgumentParser() p.add_argument('client') asyncio.run(watch(p.parse_args().client))