From a7716cee49b434b1f89070343b6f99621a81bdcf Mon Sep 17 00:00:00 2001 From: Karsten Knese Date: Wed, 12 Dec 2018 17:19:36 -0800 Subject: [PATCH 1/3] add slash for node name --- ros2lifecycle/ros2lifecycle/verb/set.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/ros2lifecycle/ros2lifecycle/verb/set.py b/ros2lifecycle/ros2lifecycle/verb/set.py index 8a79d151b..b9729c41c 100644 --- a/ros2lifecycle/ros2lifecycle/verb/set.py +++ b/ros2lifecycle/ros2lifecycle/verb/set.py @@ -46,7 +46,10 @@ def main(self, *, args): # noqa: D102 node_names = get_node_names( node=node, include_hidden_nodes=args.include_hidden_nodes) - if args.node_name not in {n.full_name for n in node_names}: + node_name = args.node_name + if node_name[0] != '/': + node_name = '/' + node_name + if node_name not in {n.full_name for n in node_names}: return 'Node not found' with DirectNode(args) as node: From be9e65a45d490b387c90f362305ca6d370cc7ac9 Mon Sep 17 00:00:00 2001 From: Karsten Knese Date: Wed, 12 Dec 2018 18:14:19 -0800 Subject: [PATCH 2/3] check for forward slash in ros2param --- ros2param/ros2param/verb/delete.py | 5 ++++- ros2param/ros2param/verb/get.py | 5 ++++- ros2param/ros2param/verb/list.py | 7 +++++-- ros2param/ros2param/verb/set.py | 5 ++++- 4 files changed, 17 insertions(+), 5 deletions(-) diff --git a/ros2param/ros2param/verb/delete.py b/ros2param/ros2param/verb/delete.py index 95dbe8c32..18fa9915e 100644 --- a/ros2param/ros2param/verb/delete.py +++ b/ros2param/ros2param/verb/delete.py @@ -46,7 +46,10 @@ def main(self, *, args): # noqa: D102 node_names = get_node_names( node=node, include_hidden_nodes=args.include_hidden_nodes) - if args.node_name not in [n.full_name for n in node_names]: + node_name = args.node_name + if node_name[0] != '/': + node_name = '/' + node_name + if node_name not in [n.full_name for n in node_names]: return 'Node not found' with DirectNode(args) as node: diff --git a/ros2param/ros2param/verb/get.py b/ros2param/ros2param/verb/get.py index 4357f371b..391e25f86 100644 --- a/ros2param/ros2param/verb/get.py +++ b/ros2param/ros2param/verb/get.py @@ -45,7 +45,10 @@ def main(self, *, args): # noqa: D102 node_names = get_node_names( node=node, include_hidden_nodes=args.include_hidden_nodes) - if args.node_name not in [n.full_name for n in node_names]: + node_name = args.node_name + if node_name[0] != '/': + node_name = '/' + node_name + if node_name not in {n.full_name for n in node_names}: return 'Node not found' with DirectNode(args) as node: diff --git a/ros2param/ros2param/verb/list.py b/ros2param/ros2param/verb/list.py index a1304832e..cb77996b0 100644 --- a/ros2param/ros2param/verb/list.py +++ b/ros2param/ros2param/verb/list.py @@ -46,10 +46,13 @@ def main(self, *, args): # noqa: D102 node=node, include_hidden_nodes=args.include_hidden_nodes) if args.node_name: - if args.node_name not in [n.full_name for n in node_names]: + node_name = args.node_name + if node_name[0] != '/': + node_name = '/' + node_name + if node_name not in [n.full_name for n in node_names]: return 'Node not found' node_names = [ - n for n in node_names if args.node_name == n.full_name] + n for n in node_names if node_name == n.full_name] with DirectNode(args) as node: clients = {} diff --git a/ros2param/ros2param/verb/set.py b/ros2param/ros2param/verb/set.py index fb075eeb0..057fe1e4f 100644 --- a/ros2param/ros2param/verb/set.py +++ b/ros2param/ros2param/verb/set.py @@ -47,7 +47,10 @@ def main(self, *, args): # noqa: D102 node_names = get_node_names( node=node, include_hidden_nodes=args.include_hidden_nodes) - if args.node_name not in [n.full_name for n in node_names]: + node_name = args.node_name + if node_name[0] != '/': + node_name = '/' + node_name + if node_name not in {n.full_name for n in node_names}: return 'Node not found' with DirectNode(args) as node: From c3f057dd0f8c6ec62f2072ab009a529dc48d846e Mon Sep 17 00:00:00 2001 From: Karsten Knese Date: Wed, 12 Dec 2018 20:50:16 -0800 Subject: [PATCH 3/3] use get_absolute_node_name function --- ros2lifecycle/ros2lifecycle/verb/get.py | 8 +++----- ros2lifecycle/ros2lifecycle/verb/set.py | 5 ++--- ros2node/ros2node/api/__init__.py | 8 ++++++++ ros2param/ros2param/verb/delete.py | 5 ++--- ros2param/ros2param/verb/get.py | 5 ++--- ros2param/ros2param/verb/list.py | 7 +++---- ros2param/ros2param/verb/set.py | 5 ++--- 7 files changed, 22 insertions(+), 21 deletions(-) diff --git a/ros2lifecycle/ros2lifecycle/verb/get.py b/ros2lifecycle/ros2lifecycle/verb/get.py index 9b4bfe3cc..00cfe8177 100644 --- a/ros2lifecycle/ros2lifecycle/verb/get.py +++ b/ros2lifecycle/ros2lifecycle/verb/get.py @@ -20,6 +20,7 @@ from ros2lifecycle.api import call_get_states from ros2lifecycle.api import get_node_names from ros2lifecycle.verb import VerbExtension +from ros2node.api import get_absolute_node_name from ros2node.api import NodeNameCompleter @@ -42,13 +43,10 @@ def main(self, *, args): # noqa: D102 node=node, include_hidden_nodes=args.include_hidden_nodes) node_names = [n.full_name for n in node_names] - if args.node_name: - node_name = args.node_name - if node_name[0] != '/': - node_name = '/' + node_name + node_name = get_absolute_node_name(args.node_name) + if node_name: if node_name not in node_names: return 'Node not found' - node_names = [node_name] with DirectNode(args) as node: states = call_get_states(node=node, node_names=node_names) diff --git a/ros2lifecycle/ros2lifecycle/verb/set.py b/ros2lifecycle/ros2lifecycle/verb/set.py index b9729c41c..d21e9f6fb 100644 --- a/ros2lifecycle/ros2lifecycle/verb/set.py +++ b/ros2lifecycle/ros2lifecycle/verb/set.py @@ -22,6 +22,7 @@ from ros2lifecycle.api import call_get_available_transitions from ros2lifecycle.verb import VerbExtension +from ros2node.api import get_absolute_node_name from ros2node.api import get_node_names from ros2node.api import NodeNameCompleter @@ -46,9 +47,7 @@ def main(self, *, args): # noqa: D102 node_names = get_node_names( node=node, include_hidden_nodes=args.include_hidden_nodes) - node_name = args.node_name - if node_name[0] != '/': - node_name = '/' + node_name + node_name = get_absolute_node_name(args.node_name) if node_name not in {n.full_name for n in node_names}: return 'Node not found' diff --git a/ros2node/ros2node/api/__init__.py b/ros2node/ros2node/api/__init__.py index 05a224b00..d700e844c 100644 --- a/ros2node/ros2node/api/__init__.py +++ b/ros2node/ros2node/api/__init__.py @@ -23,6 +23,14 @@ TopicInfo = namedtuple('Topic', ('name', 'types')) +def get_absolute_node_name(node_name): + if not node_name: + return None + if node_name[0] != '/': + node_name = '/' + node_name + return node_name + + def parse_node_name(full_node_name): tokens = full_node_name.split('/') if 1 > len(tokens): diff --git a/ros2param/ros2param/verb/delete.py b/ros2param/ros2param/verb/delete.py index 18fa9915e..86e49f843 100644 --- a/ros2param/ros2param/verb/delete.py +++ b/ros2param/ros2param/verb/delete.py @@ -20,6 +20,7 @@ from ros2cli.node.direct import DirectNode from ros2cli.node.strategy import add_arguments from ros2cli.node.strategy import NodeStrategy +from ros2node.api import get_absolute_node_name from ros2node.api import get_node_names from ros2node.api import NodeNameCompleter from ros2param.api import call_set_parameters @@ -46,9 +47,7 @@ def main(self, *, args): # noqa: D102 node_names = get_node_names( node=node, include_hidden_nodes=args.include_hidden_nodes) - node_name = args.node_name - if node_name[0] != '/': - node_name = '/' + node_name + node_name = get_absolute_node_name(args.node_name) if node_name not in [n.full_name for n in node_names]: return 'Node not found' diff --git a/ros2param/ros2param/verb/get.py b/ros2param/ros2param/verb/get.py index 391e25f86..5841b6206 100644 --- a/ros2param/ros2param/verb/get.py +++ b/ros2param/ros2param/verb/get.py @@ -16,6 +16,7 @@ from ros2cli.node.direct import DirectNode from ros2cli.node.strategy import add_arguments from ros2cli.node.strategy import NodeStrategy +from ros2node.api import get_absolute_node_name from ros2node.api import get_node_names from ros2node.api import NodeNameCompleter from ros2param.api import call_get_parameters @@ -45,9 +46,7 @@ def main(self, *, args): # noqa: D102 node_names = get_node_names( node=node, include_hidden_nodes=args.include_hidden_nodes) - node_name = args.node_name - if node_name[0] != '/': - node_name = '/' + node_name + node_name = get_absolute_node_name(args.node_name) if node_name not in {n.full_name for n in node_names}: return 'Node not found' diff --git a/ros2param/ros2param/verb/list.py b/ros2param/ros2param/verb/list.py index cb77996b0..aed54de7e 100644 --- a/ros2param/ros2param/verb/list.py +++ b/ros2param/ros2param/verb/list.py @@ -19,6 +19,7 @@ from ros2cli.node.direct import DirectNode from ros2cli.node.strategy import add_arguments from ros2cli.node.strategy import NodeStrategy +from ros2node.api import get_absolute_node_name from ros2node.api import get_node_names from ros2node.api import NodeNameCompleter from ros2param.verb import VerbExtension @@ -45,10 +46,8 @@ def main(self, *, args): # noqa: D102 node_names = get_node_names( node=node, include_hidden_nodes=args.include_hidden_nodes) - if args.node_name: - node_name = args.node_name - if node_name[0] != '/': - node_name = '/' + node_name + node_name = get_absolute_node_name(args.node_name) + if node_name: if node_name not in [n.full_name for n in node_names]: return 'Node not found' node_names = [ diff --git a/ros2param/ros2param/verb/set.py b/ros2param/ros2param/verb/set.py index 057fe1e4f..8ab2422e9 100644 --- a/ros2param/ros2param/verb/set.py +++ b/ros2param/ros2param/verb/set.py @@ -18,6 +18,7 @@ from ros2cli.node.direct import DirectNode from ros2cli.node.strategy import add_arguments from ros2cli.node.strategy import NodeStrategy +from ros2node.api import get_absolute_node_name from ros2node.api import get_node_names from ros2node.api import NodeNameCompleter from ros2param.api import call_set_parameters @@ -47,9 +48,7 @@ def main(self, *, args): # noqa: D102 node_names = get_node_names( node=node, include_hidden_nodes=args.include_hidden_nodes) - node_name = args.node_name - if node_name[0] != '/': - node_name = '/' + node_name + node_name = get_absolute_node_name(args.node_name) if node_name not in {n.full_name for n in node_names}: return 'Node not found'