diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/server/rz_mesh.py | 13 |
1 files changed, 13 insertions, 0 deletions
diff --git a/src/server/rz_mesh.py b/src/server/rz_mesh.py index dcc696c4..507ca71a 100644 --- a/src/server/rz_mesh.py +++ b/src/server/rz_mesh.py @@ -3,6 +3,7 @@ from flask import Response from flask import request from functools import wraps from geventwebsocket.handler import WebSocketHandler +import inspect import logging from socketio import socketio_manage from socketio.server import SocketIOHandler @@ -88,8 +89,20 @@ def init_ws_interface(cfg, kernel, flask_webapp): @wraps(f) def wrapped_function(*args, **kw): + f_ret = f(*args, **kw) + try: + # TODO: avoid stack inspection if possible + stack = inspect.stack() + caller_class = stack[1][0].f_locals["self"].__class__ + if WebSocket_Graph_NS == caller_class: + # [!] no need emit broadcast if call originated from a websocket as + # WebSocket_Graph_NS#on_diff_commit__xxx emit their own self-excluding multicast + return f_ret + except Exception as e: + log.exception('decorator__ws_multicast: failed to differentiate REST vs Websocket call path based on stack state', e) + assert type(f_ret) in [list, tuple] pkt_data = map(_prep_for_serialization, f_ret) |
