From 3176b881fc62fff9ca5fdc0ea9691efd100abb6b Mon Sep 17 00:00:00 2001 From: Michael Carroll Date: Wed, 29 Aug 2018 10:08:32 -0500 Subject: [PATCH 1/3] Make `ros2 node list` include the full namespace. --- ros2cli/ros2cli/daemon/__init__.py | 2 ++ ros2node/ros2node/api/__init__.py | 8 ++++++++ ros2node/ros2node/verb/list.py | 6 +++--- 3 files changed, 13 insertions(+), 3 deletions(-) diff --git a/ros2cli/ros2cli/daemon/__init__.py b/ros2cli/ros2cli/daemon/__init__.py index 27356a75b..6802b7a62 100644 --- a/ros2cli/ros2cli/daemon/__init__.py +++ b/ros2cli/ros2cli/daemon/__init__.py @@ -56,6 +56,8 @@ def main(*, script_name='_ros2_daemon', argv=None): # expose getter functions of node server.register_function( _print_invoked_function_name(node.get_node_names)) + server.register_function( + _print_invoked_function_name(node.get_node_names_and_namespaces)) server.register_function( _print_invoked_function_name(node.get_topic_names_and_types)) server.register_function( diff --git a/ros2node/ros2node/api/__init__.py b/ros2node/ros2node/api/__init__.py index 95471e625..b813ddc19 100644 --- a/ros2node/ros2node/api/__init__.py +++ b/ros2node/ros2node/api/__init__.py @@ -26,6 +26,14 @@ def get_node_names(*, node, include_hidden_nodes=False): if n and not n.startswith(HIDDEN_NODE_PREFIX)] return node_names +def get_node_names_and_namespaces(*, node, include_hidden_nodes=False): + node_names_and_ns = node.get_node_names_and_namespaces() + if not include_hidden_nodes: + node_names_and_ns = [ + n for n in node_names_and_ns + if n[0] and not n[0].startswith(HIDDEN_NODE_PREFIX)] + return node_names_and_ns + class NodeNameCompleter: """Callable returning a list of node names.""" diff --git a/ros2node/ros2node/verb/list.py b/ros2node/ros2node/verb/list.py index a0161f108..cc2af5ddf 100644 --- a/ros2node/ros2node/verb/list.py +++ b/ros2node/ros2node/verb/list.py @@ -14,7 +14,7 @@ from ros2cli.node.strategy import add_arguments from ros2cli.node.strategy import NodeStrategy -from ros2node.api import get_node_names +from ros2node.api import get_node_names_and_namespaces from ros2node.verb import VerbExtension @@ -32,9 +32,9 @@ def add_arguments(self, parser, cli_name): def main(self, *, args): with NodeStrategy(args) as node: - node_names = get_node_names(node=node, include_hidden_nodes=args.all) + node_names_ns = get_node_names_and_namespaces(node=node, include_hidden_nodes=args.all) if args.count_nodes: print(len(node_names)) elif node_names: - print(*node_names, sep='\n') + print(*[n[1] + '/'+ n[0] for n in node_names_ns], sep='\n') From de588f50290524493199444034062dc5985ab2de Mon Sep 17 00:00:00 2001 From: Michael Carroll Date: Wed, 29 Aug 2018 10:40:40 -0500 Subject: [PATCH 2/3] Refactor dupliated code into API. --- ros2node/ros2node/api/__init__.py | 21 ++++++++++++--------- ros2node/ros2node/verb/list.py | 6 +++--- 2 files changed, 15 insertions(+), 12 deletions(-) diff --git a/ros2node/ros2node/api/__init__.py b/ros2node/ros2node/api/__init__.py index b813ddc19..623d33fac 100644 --- a/ros2node/ros2node/api/__init__.py +++ b/ros2node/ros2node/api/__init__.py @@ -26,14 +26,17 @@ def get_node_names(*, node, include_hidden_nodes=False): if n and not n.startswith(HIDDEN_NODE_PREFIX)] return node_names -def get_node_names_and_namespaces(*, node, include_hidden_nodes=False): - node_names_and_ns = node.get_node_names_and_namespaces() - if not include_hidden_nodes: - node_names_and_ns = [ - n for n in node_names_and_ns - if n[0] and not n[0].startswith(HIDDEN_NODE_PREFIX)] - return node_names_and_ns - +def get_node_namespaced_names(*, node, include_hidden_nodes=False): + node_names_ns = node.get_node_names_and_namespaces() + namespaced_nodes = [] + for (node_name, node_ns) in node_names_ns: + if not include_hidden_nodes and node_name.startswith(HIDDEN_NODE_PREFIX): + continue + if node_ns == '/': + namespaced_nodes.append('/' + node_name) + else: + namespaced_nodes.append(node_ns + '/' + node_name) + return namespaced_nodes class NodeNameCompleter: """Callable returning a list of node names.""" @@ -43,7 +46,7 @@ def __init__(self, *, include_hidden_nodes_key=None): def __call__(self, prefix, parsed_args, **kwargs): with NodeStrategy(parsed_args) as node: - return get_node_names( + return get_node_namespaced_names( node=node, include_hidden_nodes=getattr( parsed_args, self.include_hidden_nodes_key)) diff --git a/ros2node/ros2node/verb/list.py b/ros2node/ros2node/verb/list.py index cc2af5ddf..d6807052d 100644 --- a/ros2node/ros2node/verb/list.py +++ b/ros2node/ros2node/verb/list.py @@ -14,7 +14,7 @@ from ros2cli.node.strategy import add_arguments from ros2cli.node.strategy import NodeStrategy -from ros2node.api import get_node_names_and_namespaces +from ros2node.api import get_node_namespaced_names from ros2node.verb import VerbExtension @@ -32,9 +32,9 @@ def add_arguments(self, parser, cli_name): def main(self, *, args): with NodeStrategy(args) as node: - node_names_ns = get_node_names_and_namespaces(node=node, include_hidden_nodes=args.all) + node_names = get_node_namespaced_names(node=node, include_hidden_nodes=args.all) if args.count_nodes: print(len(node_names)) elif node_names: - print(*[n[1] + '/'+ n[0] for n in node_names_ns], sep='\n') + print(*node_names, sep='\n') From 5b768d375466b1cf7072140cdd80f442c1994fe0 Mon Sep 17 00:00:00 2001 From: Michael Carroll Date: Wed, 29 Aug 2018 10:45:46 -0500 Subject: [PATCH 3/3] PEP8 fixes. --- ros2node/ros2node/api/__init__.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/ros2node/ros2node/api/__init__.py b/ros2node/ros2node/api/__init__.py index 623d33fac..f034e5666 100644 --- a/ros2node/ros2node/api/__init__.py +++ b/ros2node/ros2node/api/__init__.py @@ -26,6 +26,7 @@ def get_node_names(*, node, include_hidden_nodes=False): if n and not n.startswith(HIDDEN_NODE_PREFIX)] return node_names + def get_node_namespaced_names(*, node, include_hidden_nodes=False): node_names_ns = node.get_node_names_and_namespaces() namespaced_nodes = [] @@ -38,6 +39,7 @@ def get_node_namespaced_names(*, node, include_hidden_nodes=False): namespaced_nodes.append(node_ns + '/' + node_name) return namespaced_nodes + class NodeNameCompleter: """Callable returning a list of node names."""