diff --git a/lrs_util/apiutil.py b/lrs_util/apiutil.py new file mode 100644 index 0000000000000000000000000000000000000000..f3ff98bd698a91698e7e5ec837079a61ca25b97d --- /dev/null +++ b/lrs_util/apiutil.py @@ -0,0 +1,169 @@ +import uuid +import json + +from dataclasses import dataclass, field +from typing import Any, Dict, List + +@dataclass +class Signal: + task_uuid: str + ns: str + + def get_signal(self, signal): + mobj = {} + mobj["com-uuid"] = str(uuid.uuid4()) + mobj["command"] = "signal-task" + mobj["sender"] = "commander" + mobj["signal"] = signal + mobj["task-uuid"] = self.task_uuid + mstr = json.dumps(mobj, sort_keys=True, indent=4, separators=(',', ': ')) + topic = "exec/command" + return self.ns.lstrip("/"), topic, mstr + # try: + # client = rospy.ServiceProxy('send_topic_msg_to_unit', SendTopicMsgToUnit) + # resp = client(self.ns.lstrip("/"), topic, mstr) + # print("RESP:", resp) + # except rospy.ServiceException as e: + # print("Service call failed: %s"%e) + + + def get_signal_unit(self, unit, signal): + mobj = {} + mobj["com-uuid"] = str(uuid.uuid4()) + mobj["command"] = "signal-unit" + mobj["sender"] = "commander" + mobj["signal"] = signal + mobj["unit"] = unit + mstr = json.dumps(mobj, sort_keys=True, indent=4, separators=(',', ': ')) + topic = "tst/command" + return self.ns.lstrip("/"), topic, mstr + +@dataclass +class SignalNode: + node_uuid: str + ns: str + tree_uuid: str + + def get_signal(self, signal): + mobj = {} + mobj["com-uuid"] = str(uuid.uuid4()) + mobj["command"] = "signal-tst-node" + mobj["sender"] = "commander" + mobj["signal"] = signal + mobj["node-uuid"] = self.node_uuid + mstr = json.dumps(mobj, sort_keys=True, indent=4, separators=(',', ': ')) + topic = "tst/command" + ns = "/op0" + print(ns, topic, mstr) + return ns.lstrip("/"), topic, mstr + + def get_signal_tree(self, signal): + print("signal_tree:", signal) + mobj = {} + mobj["com-uuid"] = str(uuid.uuid4()) + mobj["command"] = "signal-tst-tree" + mobj["sender"] = "commander" + mobj["signal"] = signal + mobj["node-uuid"] = self.tree_uuid + mstr = json.dumps(mobj, sort_keys=True, indent=4, separators=(',', ': ')) + topic = "tst/command" + ns = "/op0" + print("signal_tree:", ns, topic, mstr) + return ns.lstrip("/"), topic, mstr + + def get_signal_unit(self, unit, signal): + mobj = {} + mobj["com-uuid"] = str(uuid.uuid4()) + mobj["command"] = "signal-unit" + mobj["sender"] = "commander" + mobj["signal"] = signal + mobj["unit"] = unit + mstr = json.dumps(mobj, sort_keys=True, indent=4, separators=(',', ': ')) + topic = "tst/command" + ns = "/op0" + print(ns, topic, mstr) + return ns.lstrip("/"), topic, mstr + +def cleanup_task(task): + task.pop("children", None) + common_params = task.pop("common_params", None) + cleanup_params(task["params"]) + return common_params["execunit"] + +def cleanup_common_params(jobj): + jobj.pop("use_lock") + +def cleanup_params(jobj): + jobj.pop("use_lock", None) + +def cleanup_tst(task): + cleanup_common_params(task["common_params"]) + cleanup_params(task["params"]) + for child in task["children"]: + cleanup_tst(child) + +def get_task_command(jobj, task_uuid=str(uuid.uuid4())): + if len(jobj["children"]) != 1: + print("ERROR: Not a task") + taskobj = jobj["children"][0] + execunit = cleanup_task(taskobj) + mobj = {} + mobj["com-uuid"] = str(uuid.uuid4()) + mobj["command"] = "start-task" + mobj["sender"] = "commander" + mobj["execution-unit"] = execunit.lstrip("/") + mobj["task-uuid"] = task_uuid + mobj["task"] = taskobj + mstr = json.dumps(mobj, sort_keys=True, indent=4, separators=(',', ': ')) + ns = jobj["common_params"]["execunit"] + signalobj = Signal(mobj["task-uuid"], ns) + topic = "exec/command" + print(mstr) + print("TOPIC:", topic) + print("EXECUNIT:", execunit) + # try: + # client = rospy.ServiceProxy('send_topic_msg_to_unit', SendTopicMsgToUnit) + # resp = client(execunit.lstrip("/"), topic, mstr) + # print("RESP:", resp) + # except rospy.ServiceException as e: + # print("Service call failed: %s"%e) + return execunit.lstrip("/"), topic, mstr, signalobj + +def get_tst_command(jobj, root_uuid=str(uuid.uuid4())): + print(jobj) + if len(jobj["children"]) != 1: + print("ERROR: Not a simple TST") + tstobj = jobj + tstobj["common_params"]["execunit"] = "/op0" + tstobj["common_params"]["node-uuid"] = root_uuid + cleanup_tst(tstobj) + termobj = tstobj["children"][0] + termobj["common_params"]["node-uuid"] = str(uuid.uuid4()) + signalobj = None + print(termobj) + ns = "/op0" + if "node-uuid" in termobj["common_params"]: + signalobj = SignalNode(termobj["common_params"]["node-uuid"], "op0", tstobj["common_params"]["node-uuid"]) + mobj = {} + mobj["com-uuid"] = str(uuid.uuid4()) + mobj["command"] = "start-tst" + mobj["sender"] = "commander" + mobj["receiver"] = "op0" + # mobj["execution-unit"] = execunit.lstrip("/") + # mobj["task-uuid"] = str(uuid.uuid4()) + mobj["tst"] = tstobj + mstr = json.dumps(mobj, sort_keys=True, indent=4, separators=(',', ': ')) + #ns = jobj["common_params"]["execunit"] + ns = "/op0" + topic = "tst/command" + print(mstr) + print("TOPIC:", topic) + return topic, mstr, signalobj +# try: +# client = rospy.ServiceProxy(f'{ns}/send_topic_msg_to_unit', SendTopicMsgToUnit) +# resp = client(ns.lstrip("/"), topic, mstr) +# print("RESP:", resp) +# except rospy.ServiceException as e: +# print("Service call failed: %s"%e) +# return signalobj + diff --git a/lrs_util/jsonutil.py b/lrs_util/jsonutil.py index 5696df3bde27e6bc9ecdf0d870605cc94a335ad0..395f849ae39a736f4dc7ec499ddd2ace46aeceea 100644 --- a/lrs_util/jsonutil.py +++ b/lrs_util/jsonutil.py @@ -380,7 +380,7 @@ def json_tree_from_task(ns, name, params, seq_node_uuid="", node_uuid="", use_al cobj = { "children": [], "common_params": get_common_params (ns, use_alias, node_uuid, use_lock=use_lock), - "name": "look-at-bearing", + "name": name, "params": params } jobj["children"].append(cobj)