aboutsummaryrefslogtreecommitdiffstats
path: root/fg21sim/webui/websocket.py
diff options
context:
space:
mode:
Diffstat (limited to 'fg21sim/webui/websocket.py')
-rw-r--r--fg21sim/webui/websocket.py45
1 files changed, 34 insertions, 11 deletions
diff --git a/fg21sim/webui/websocket.py b/fg21sim/webui/websocket.py
index 76258a4..1e9b9d6 100644
--- a/fg21sim/webui/websocket.py
+++ b/fg21sim/webui/websocket.py
@@ -17,6 +17,7 @@ References
http://caniuse.com/#feat=websockets
"""
+import os
import json
import logging
@@ -117,7 +118,7 @@ class FG21simWSHandler(tornado.websocket.WebSocketHandler):
The sent message also has a ``type`` item of same value, which the
client can be used to figure out the proper actions.
- There is a ``status`` item which indicates the status of the
+ There is a ``success`` item which indicates the status of the
requested operation, and a ``data`` item containing the response
data.
"""
@@ -128,10 +129,10 @@ class FG21simWSHandler(tornado.websocket.WebSocketHandler):
except json.JSONDecodeError:
logger.warning("WebSocket: {0}: ".format(self.name) +
"message is not a valid JSON string")
- response = {"status": False, "type": None}
+ response = {"success": False, "type": None}
except (KeyError, TypeError):
logger.warning("WebSocket: %s: skip invalid message" % self.name)
- response = {"status": False, "type": None}
+ response = {"success": False, "type": None}
else:
# Check the message type and dispatch task
if msg_type == "configs":
@@ -147,7 +148,7 @@ class FG21simWSHandler(tornado.websocket.WebSocketHandler):
# Message of unknown type
logger.warning("WebSocket: {0}: ".format(self.name) +
"unknown message type: {0}".format(msg_type))
- response = {"status": False, "type": msg_type}
+ response = {"success": False, "type": msg_type}
#
msg_response = json.dumps(response)
self.write_message(msg_response)
@@ -189,24 +190,24 @@ class FG21simWSHandler(tornado.websocket.WebSocketHandler):
if msg_action == "get":
# Get the values of the specified options
data, errors = self._get_configs(keys=msg_data)
- response["status"] = True if errors == {} else False
+ response["success"] = True if errors == {} else False
response["data"] = data
response["errors"] = errors
elif msg_action == "set":
# Set the values of the specified options
errors = self._set_configs(data=msg_data)
- response["status"] = True if errors == {} else False
+ response["success"] = True if errors == {} else False
response["data"] = {}
response["errors"] = errors
else:
logger.warning("WebSocket: {0}: ".format(self.name) +
"unknown action: {0}".format(msg_action))
- response["status"] = False
+ response["success"] = False
response["data"] = {}
response["errors"] = {}
except KeyError:
# Received message has wrong syntax/format
- response = {"status": False, "type": msg_type, "action": None}
+ response = {"success": False, "type": msg_type, "action": None}
#
logger.debug("WebSocket: {0}: ".format(self.name) +
"response: {0}".format(response))
@@ -264,6 +265,10 @@ class FG21simWSHandler(tornado.websocket.WebSocketHandler):
A dictionary of key-value pairs, with keys specifying the config
options whose value will be changed, and values the new values
to which config options will be set.
+ NOTE:
+ If want to set the ``userconfig`` option, an *absolute path*
+ must be provided (i.e., client should take care of the ``workdir``
+ value and generate a absolute path for ``userconfig``).
Returns
-------
@@ -271,14 +276,32 @@ class FG21simWSHandler(tornado.websocket.WebSocketHandler):
When error occurs (e.g., invalid key, invalid values), then the
specific errors with details are stored in this dictionary.
"""
- pass
+ errors = {}
+ for key, value in data.items():
+ if key == "userconfig":
+ # NOTE: The ``userconfig`` must be an absolute path
+ if os.path.isabs(value):
+ self.configs.userconfig = value
+ else:
+ errors["userconfig"] = "Not an absolute path"
+ else:
+ try:
+ self.configs.setn(key, value)
+ except KeyError as e:
+ errors[key] = str(e)
+ # NOTE:
+ # Check the whole configurations after all provided options are
+ # updated, and merge the validation errors.
+ __, cherr = self.configs.check_all(raise_exception=False)
+ errors.update(cherr)
+ return errors
def _handle_console(self, msg):
# Got a message of supported types
msg_type = msg["type"]
logger.info("WebSocket: {0}: ".format(self.name) +
"handle message of type: {0}".format(msg_type))
- response = {"status": True, "type": msg_type}
+ response = {"success": True, "type": msg_type}
return response
def _handle_results(self, msg):
@@ -286,5 +309,5 @@ class FG21simWSHandler(tornado.websocket.WebSocketHandler):
msg_type = msg["type"]
logger.info("WebSocket: {0}: ".format(self.name) +
"handle message of type: {0}".format(msg_type))
- response = {"status": True, "type": msg_type}
+ response = {"success": True, "type": msg_type}
return response