summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorLV-426 <lv-426@taproot.org.il>2015-01-23 03:13:37 +0200
committerLV-426 <lv-426@taproot.org.il>2015-01-23 03:45:50 +0200
commit068b3878241c015a8570964eba475ff805453148 (patch)
tree16a3ff1e278795940849dd1edee93112f50d0a54 /src
parentd8603d5726fe44ae5d8c80bd573445309ec43c86 (diff)
avoid dual websocket diff-obj emission if call path originates from WebSocket_Graph_NS through stack inspection
Diffstat (limited to 'src')
-rw-r--r--src/server/rz_mesh.py13
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)