def find_container_node_names(*, node, node_names): """ Identify container nodes from a list of node names. :param node: a node-like instance :param node_names: list of `ros2node.api.NodeName` instances, as returned by `ros2node.api.get_node_names()` :return: list of `ros2node.api.NodeName` instances for nodes that are component containers """ container_node_names = [] for n in node_names: try: services = get_service_server_info(node=node, remote_node_name=n.full_name, include_hidden=True) except rclpy.node.NodeNameNonExistentError: continue if not any( s.name.endswith('_container/load_node') and 'composition_interfaces/srv/LoadNode' in s.types for s in services): continue if not any( s.name.endswith('_container/unload_node') and 'composition_interfaces/srv/UnloadNode' in s.types for s in services): continue if not any( s.name.endswith('_container/list_nodes') and 'composition_interfaces/srv/ListNodes' in s.types for s in services): continue container_node_names.append(n) return container_node_names
def main(self, *, args): with NodeStrategy(args) as node: node_names = get_node_names( node=node, include_hidden_nodes=args.include_hidden) count = [n.full_name for n in node_names].count(args.node_name) if count > 1: print(INFO_NONUNIQUE_WARNING_TEMPLATE.format( num_nodes=count, node_name=args.node_name), file=sys.stderr) if count > 0: with DirectNode(args) as node: print(args.node_name) subscribers = get_subscriber_info( node=node, remote_node_name=args.node_name, include_hidden=args.include_hidden) print(' Subscribers:') print_names_and_types(subscribers) publishers = get_publisher_info( node=node, remote_node_name=args.node_name, include_hidden=args.include_hidden) print(' Publishers:') print_names_and_types(publishers) service_servers = get_service_server_info( node=node, remote_node_name=args.node_name, include_hidden=args.include_hidden) print(' Service Servers:') print_names_and_types(service_servers) service_clients = get_service_client_info( node=node, remote_node_name=args.node_name, include_hidden=args.include_hidden) print(' Service Clients:') print_names_and_types(service_clients) actions_servers = get_action_server_info( node=node, remote_node_name=args.node_name, include_hidden=args.include_hidden) print(' Action Servers:') print_names_and_types(actions_servers) actions_clients = get_action_client_info( node=node, remote_node_name=args.node_name, include_hidden=args.include_hidden) print(' Action Clients:') print_names_and_types(actions_clients) else: return "Unable to find node '" + args.node_name + "'"
def main(self, *, args): with NodeStrategy(args) as node: node_names = get_node_names( node=node, include_hidden_nodes=args.include_hidden) if args.node_name in (n.full_name for n in node_names): with DirectNode(args) as node: print(args.node_name) subscribers = get_subscriber_info( node=node, remote_node_name=args.node_name, include_hidden=args.include_hidden) print(' Subscribers:') print_names_and_types(subscribers) publishers = get_publisher_info( node=node, remote_node_name=args.node_name, include_hidden=args.include_hidden) print(' Publishers:') print_names_and_types(publishers) service_servers = get_service_server_info( node=node, remote_node_name=args.node_name, include_hidden=args.include_hidden) print(' Service Servers:') print_names_and_types(service_servers) service_clients = get_service_client_info( node=node, remote_node_name=args.node_name, include_hidden=args.include_hidden) print(' Service Clients:') print_names_and_types(service_clients) actions_servers = get_action_server_info( node=node, remote_node_name=args.node_name, include_hidden=args.include_hidden) print(' Action Servers:') print_names_and_types(actions_servers) actions_clients = get_action_client_info( node=node, remote_node_name=args.node_name, include_hidden=args.include_hidden) print(' Action Clients:') print_names_and_types(actions_clients) else: return "Unable to find node '" + args.node_name + "'"
def get_node_service_types(node_name): """ Returns a list of service types that are being hosted by the specified node """ services = get_service_server_info(node=_node, remote_node_name=node_name) return [service.types[0] for service in services]