From 9186400ddf009c6e26ba01e7edfbe54825facbe4 Mon Sep 17 00:00:00 2001 From: AAlon Date: Tue, 29 Jan 2019 05:08:44 -0800 Subject: [PATCH] Consistent node naming (#158) * Support for easy integration with ros2 security features by starting CLI nodes with a consistent prefix. * Removing unneeded comment * Making DirectNode visible (removing hidden node prefix) to have consistent node naming for ros2cli. * Start all CLI nodes as hidden. * Shortening the default CLI node name prefix from '_ros2cli_node' to '_ros2cli' * Importing HIDDEN_NODE_PREFIX from rclpy, renaming CLI_NODE_NAME_PREFIX -> NODE_NAME_PREFIX. * ros2node - Importing HIDDEN_NODE_PREFIX from rclpy * Linter fixes. Signed-off-by: Chris Lalancette --- ros2cli/ros2cli/node/__init__.py | 15 +++++++++++++++ ros2cli/ros2cli/node/direct.py | 6 ++---- ros2node/ros2node/api/__init__.py | 4 +--- ros2service/ros2service/verb/call.py | 3 ++- ros2topic/ros2topic/verb/pub.py | 3 ++- 5 files changed, 22 insertions(+), 9 deletions(-) diff --git a/ros2cli/ros2cli/node/__init__.py b/ros2cli/ros2cli/node/__init__.py index e69de29bb..cb5825f02 100644 --- a/ros2cli/ros2cli/node/__init__.py +++ b/ros2cli/ros2cli/node/__init__.py @@ -0,0 +1,15 @@ +# Copyright 2018 Amazon.com, Inc. or its affiliates. All Rights Reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +from rclpy.node import HIDDEN_NODE_PREFIX +NODE_NAME_PREFIX = HIDDEN_NODE_PREFIX + 'ros2cli' diff --git a/ros2cli/ros2cli/node/direct.py b/ros2cli/ros2cli/node/direct.py index 6040da62c..35fbc6d43 100644 --- a/ros2cli/ros2cli/node/direct.py +++ b/ros2cli/ros2cli/node/direct.py @@ -16,9 +16,7 @@ import rclpy -# TODO(mikaelarguedas) revisit this once it's specified -HIDDEN_NODE_PREFIX = '_' - +from ros2cli.node import NODE_NAME_PREFIX DEFAULT_TIMEOUT = 0.5 @@ -35,7 +33,7 @@ def timer_callback(): node_name_suffix = getattr( args, 'node_name_suffix', '_%d' % os.getpid()) - self.node = rclpy.create_node(HIDDEN_NODE_PREFIX + 'ros2cli_node' + node_name_suffix) + self.node = rclpy.create_node(NODE_NAME_PREFIX + node_name_suffix) timeout = getattr(args, 'spin_time', DEFAULT_TIMEOUT) timer = self.node.create_timer(timeout, timer_callback) diff --git a/ros2node/ros2node/api/__init__.py b/ros2node/ros2node/api/__init__.py index 6fe5edb64..c005901e9 100644 --- a/ros2node/ros2node/api/__init__.py +++ b/ros2node/ros2node/api/__init__.py @@ -14,11 +14,9 @@ from collections import namedtuple +from rclpy.node import HIDDEN_NODE_PREFIX from ros2cli.node.strategy import NodeStrategy -# TODO(mikaelarguedas) revisit this once it's specified -HIDDEN_NODE_PREFIX = '_' - NodeName = namedtuple('NodeName', ('name', 'namespace', 'full_name')) TopicInfo = namedtuple('Topic', ('name', 'types')) diff --git a/ros2service/ros2service/verb/call.py b/ros2service/ros2service/verb/call.py index cb2b18910..d097adb2b 100644 --- a/ros2service/ros2service/verb/call.py +++ b/ros2service/ros2service/verb/call.py @@ -16,6 +16,7 @@ import time import rclpy +from ros2cli.node import NODE_NAME_PREFIX from ros2service.api import ServiceNameCompleter from ros2service.api import ServiceTypeCompleter from ros2service.verb import VerbExtension @@ -76,7 +77,7 @@ def requester(service_type, service_name, values, period): rclpy.init() - node = rclpy.create_node('requester_%s_%s' % (package_name, srv_name)) + node = rclpy.create_node(NODE_NAME_PREFIX + '_requester_%s_%s' % (package_name, srv_name)) cli = node.create_client(srv_module, service_name) diff --git a/ros2topic/ros2topic/verb/pub.py b/ros2topic/ros2topic/verb/pub.py index 0c80d2f5b..00e77edb0 100644 --- a/ros2topic/ros2topic/verb/pub.py +++ b/ros2topic/ros2topic/verb/pub.py @@ -15,6 +15,7 @@ import time import rclpy +from ros2cli.node import NODE_NAME_PREFIX from ros2topic.api import import_message_type from ros2topic.api import set_msg_fields from ros2topic.api import SetFieldError @@ -77,7 +78,7 @@ def publisher( if not isinstance(values_dictionary, dict): return 'The passed value needs to be a dictionary in YAML format' if not node_name: - node_name = 'publisher_%s' % (message_type.replace('/', '_'),) + node_name = NODE_NAME_PREFIX + '_publisher_%s' % (message_type.replace('/', '_'), ) rclpy.init() node = rclpy.create_node(node_name)