feat(api): Add /api/gui/state endpoint and live_gui integration tests
This commit is contained in:
@@ -165,6 +165,27 @@ class HookHandler(BaseHTTPRequestHandler):
|
||||
else:
|
||||
self.send_response(504)
|
||||
self.end_headers()
|
||||
elif self.path == '/api/gui/state':
|
||||
event = threading.Event()
|
||||
result = {}
|
||||
def get_state():
|
||||
try:
|
||||
gettable = _get_app_attr(app, "_gettable_fields", {})
|
||||
for key, attr in gettable.items():
|
||||
result[key] = _get_app_attr(app, attr, None)
|
||||
finally: event.set()
|
||||
lock = _get_app_attr(app, "_pending_gui_tasks_lock")
|
||||
tasks = _get_app_attr(app, "_pending_gui_tasks")
|
||||
if lock and tasks is not None:
|
||||
with lock: tasks.append({"action": "custom_callback", "callback": get_state})
|
||||
if event.wait(timeout=10):
|
||||
self.send_response(200)
|
||||
self.send_header("Content-Type", "application/json")
|
||||
self.end_headers()
|
||||
self.wfile.write(json.dumps(result).encode("utf-8"))
|
||||
else:
|
||||
self.send_response(504)
|
||||
self.end_headers()
|
||||
else:
|
||||
self.send_response(404)
|
||||
self.end_headers()
|
||||
|
||||
Reference in New Issue
Block a user