1212# See the License for the specific language governing permissions and
1313# limitations under the License.
1414
15+ from rclpy .node import Node
1516from time import sleep
1617from rclpy .topic_or_service_is_hidden import topic_or_service_is_hidden
1718from ros2cli .node .strategy import NodeStrategy
2223import rclpy
2324
2425
25- def get_service_names_and_types (* , node , include_hidden_services = False ):
26+ def get_service_names_and_types (* , node : Node , include_hidden_services = False ):
2627 service_names_and_types = node .get_service_names_and_types ()
2728 if not include_hidden_services :
2829 service_names_and_types = [
@@ -37,47 +38,43 @@ def get_service_names(*, node, include_hidden_services=False):
3738 return [n for (n , t ) in service_names_and_types ]
3839
3940
40- def get_service_class (node , service , blocking = False , include_hidden_services = False ):
41+ def get_service_class (node : Node , service_name : str , blocking = False , include_hidden_services = False ):
4142 """
4243 Load service type module for the given service.
4344
4445 The service should be running for this function to find the service type.
4546 :param node: The node object of rclpy Node class.
46- :param service : The name of the service.
47+ :param service_name : The name of the service.
4748 :param blocking: If blocking is True this function will wait for the service to start.
4849 :param include_hidden_services: Whether to include hidden services while finding the
4950 list of currently running services.
5051 :return:
5152 """
52- srv_class = _get_service_class (node , service , include_hidden_services )
53+ srv_class = _get_service_class (node , service_name , include_hidden_services )
5354 if srv_class is not None :
5455 return srv_class
5556 elif blocking :
56- print (f'WARNING: service [{ service } ] does not appear to be started yet' )
57+ print (f'WARNING: service [{ service_name } ] does not appear to be started yet' )
5758 while rclpy .ok ():
58- srv_class = _get_service_class (node , service , include_hidden_services )
59+ srv_class = _get_service_class (node , service_name , include_hidden_services )
5960 if srv_class is not None :
6061 return srv_class
6162 sleep (0.1 )
6263 else :
63- print (f'WARNING: service [{ service } ] does not appear to be started yet' )
64+ print (f'WARNING: service [{ service_name } ] does not appear to be started yet' )
6465 return None
6566
6667
67- def _get_service_class (node , service , include_hidden_services ):
68+ def _get_service_class (node , service_name , include_hidden_services ):
6869 service_names_and_types = get_service_names_and_types (
6970 node = node ,
7071 include_hidden_services = include_hidden_services )
7172
72- service_type = None
73- for (service_name , service_types ) in service_names_and_types :
74- if service == service_name :
75- if len (service_types ) > 1 :
76- raise RuntimeError (
77- f"Cannot echo service '{ service } ', as it contains more than one "
78- f"type: [{ ', ' .join (service_types )} ]" )
79- service_type = service_types [0 ]
80- break
73+ service_name_and_type = list (filter (lambda x : x [0 ] == service_name , service_names_and_types ))
74+ if len (service_name_and_type ) != 1 :
75+ raise RuntimeError (
76+ f"Cannot echo '{ service_name } ': type not found" )
77+ service_type = service_name_and_type [0 ][1 ][0 ]
8178
8279 if service_type is None :
8380 return None
0 commit comments