@@ -46,19 +46,6 @@ def add_arguments(self, parser, cli_name): # noqa: D102
46
46
'--timeout' , metavar = 'N' , type = int , default = 1 ,
47
47
help = 'Wait for N seconds until node becomes available (default %(default)s sec)' )
48
48
49
- @staticmethod
50
- def get_parameter_values (node , node_name , params ):
51
- response = call_get_parameters (
52
- node = node , node_name = node_name ,
53
- parameter_names = params )
54
-
55
- # requested parameter not set
56
- if not response .values :
57
- return None
58
-
59
- # extract type specific value
60
- return [get_value (parameter_value = i ) for i in response .values ]
61
-
62
49
def insert_dict (self , dictionary , key , value ):
63
50
split = key .split (PARAMETER_SEPARATOR_STRING , 1 )
64
51
if len (split ) > 1 :
@@ -80,7 +67,7 @@ def main(self, *, args): # noqa: D102
80
67
with DirectNode (args ) as node :
81
68
yaml_output = {node_name .full_name : {'ros__parameters' : {}}}
82
69
83
- # retrieve values
70
+ # retrieve parameter names
84
71
response = call_list_parameters (node = node , node_name = absolute_node_name )
85
72
if response is None :
86
73
print (
@@ -93,17 +80,26 @@ def main(self, *, args): # noqa: D102
93
80
'Exception while calling list_parameters service of node '
94
81
f"'{ node_name .full_name } ': { e } " , file = sys .stderr )
95
82
return
96
-
97
- response = response .result ().result .names
98
- response = sorted (response )
99
- parameter_values = self .get_parameter_values (node , absolute_node_name , response )
100
- if parameter_values is None :
83
+ parameter_names = sorted (response .result ().result .names )
84
+
85
+ # retrieve parameter values
86
+ response = None
87
+ try :
88
+ response = call_get_parameters (
89
+ node = node , node_name = absolute_node_name , parameter_names = parameter_names )
90
+ except RuntimeError as e :
101
91
print (
102
92
'Exception while calling get_parameters service of node '
103
93
f"'{ node_name .full_name } ': { e } " , file = sys .stderr )
104
94
return
105
-
106
- for param_name , pval in zip (response , parameter_values ):
95
+ if response .values is None :
96
+ # pass through here, no parameters are available with this node.
97
+ # since this is not failure, it proceeds to print the yaml as consistent behavior.
98
+ pass
99
+ parameter_values = [get_value (parameter_value = i ) for i in response .values ]
100
+
101
+ # create dictionary with parameter names and values
102
+ for param_name , pval in zip (parameter_names , parameter_values ):
107
103
self .insert_dict (
108
104
yaml_output [node_name .full_name ]['ros__parameters' ], param_name , pval )
109
105
0 commit comments