def execute(self, context: LaunchContext) -> Optional[List[Action]]: """ Execute the action. Delegated to :meth:`launch.actions.ExecuteProcess.execute`. """ self._perform_substitutions(context) # Prepare the ros_specific_arguments list and add it to the context so that the # LocalSubstitution placeholders added to the the cmd can be expanded using the contents. ros_specific_arguments: Dict[str, Union[str, List[str]]] = {} if self.__node_name is not None: ros_specific_arguments['name'] = '__node:={}'.format(self.__expanded_node_name) if self.__expanded_node_namespace != '': ros_specific_arguments['ns'] = '__ns:={}'.format(self.__expanded_node_namespace) context.extend_locals({'ros_specific_arguments': ros_specific_arguments}) ret = super().execute(context) if self.is_node_name_fully_specified(): add_node_name(context, self.node_name) node_name_count = get_node_name_count(context, self.node_name) if node_name_count > 1: execute_process_logger = launch.logging.get_logger(self.name) execute_process_logger.warning( 'there are now at least {} nodes with the name {} created within this ' 'launch context'.format(node_name_count, self.node_name) ) return ret
def test_node_name_count(): lc = LaunchContext() add_node_name(lc, 'node_name_1') add_node_name(lc, 'node_name_1') add_node_name(lc, 'node_name_2') assert get_node_name_count(lc, 'node_name_1') == 2 assert get_node_name_count(lc, 'node_name_2') == 1 assert get_node_name_count(lc, 'node_name_3') == 0