From da179d72b824a8e50380627823919fa784302664 Mon Sep 17 00:00:00 2001 From: webreflection Date: Mon, 23 Sep 2024 12:30:20 +0200 Subject: [PATCH] Make WebSocket lazy attributes definition possible --- pyscript.core/src/stdlib/pyscript/websocket.py | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/pyscript.core/src/stdlib/pyscript/websocket.py b/pyscript.core/src/stdlib/pyscript/websocket.py index 8e6b759a0d3..bf51e1c1cde 100644 --- a/pyscript.core/src/stdlib/pyscript/websocket.py +++ b/pyscript.core/src/stdlib/pyscript/websocket.py @@ -5,6 +5,7 @@ code = "code" protocols = "protocols" reason = "reason" +methods = ["onclose", "onerror", "onmessage", "onopen"] class EventMessage: @@ -37,7 +38,7 @@ def __init__(self, **kw): socket = js.WebSocket.new(url) object.__setattr__(self, "_ws", socket) - for t in ["onclose", "onerror", "onmessage", "onopen"]: + for t in methods: if t in kw: # Pyodide fails at setting socket[t] directly setattr(socket, t, create_proxy(kw[t])) @@ -46,10 +47,11 @@ def __getattr__(self, attr): return getattr(self._ws, attr) def __setattr__(self, attr, value): - if attr == "onmessage": - self._ws[attr] = lambda e: value(EventMessage(e)) + if attr in methods: + m = lambda e: value(EventMessage(e)) + setattr(self._ws, attr, create_proxy(m)) else: - self._ws[attr] = value + setattr(self._ws, attr, value) def close(self, **kw): if code in kw and reason in kw: