Skip to content

Commit 81ca3bb

Browse files
committed
multiple param set
Signed-off-by: Brian Chen <[email protected]>
1 parent 68b9820 commit 81ca3bb

File tree

1 file changed

+34
-23
lines changed
  • ros2param/ros2param/verb

1 file changed

+34
-23
lines changed

ros2param/ros2param/verb/set.py

Lines changed: 34 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -37,14 +37,29 @@ def add_arguments(self, parser, cli_name): # noqa: D102
3737
'node_name', help='Name of the ROS node')
3838
arg.completer = NodeNameCompleter(
3939
include_hidden_nodes_key='include_hidden_nodes')
40-
parser.add_argument(
41-
'--include-hidden-nodes', action='store_true',
42-
help='Consider hidden nodes as well')
40+
4341
arg = parser.add_argument(
44-
'parameter_name', help='Name of the parameter')
42+
'parameters', nargs='*',
43+
help='List of parameter name and value pairs i.e. "int_param 1 str_param hello_world"')
4544
arg.completer = ParameterNameCompleter()
45+
4646
parser.add_argument(
47-
'value', help='Value of the parameter')
47+
'--include-hidden-nodes', action='store_true',
48+
help='Consider hidden nodes as well')
49+
50+
def build_parameters(self, params):
51+
parameters = []
52+
if len(params) % 2:
53+
raise RuntimeError('Must pass list of parameter name and value pairs')
54+
55+
params = [(params[i], params[i+1]) for i in range(0, len(params), 2)]
56+
for param_str in params:
57+
parameter = Parameter()
58+
parameter.name = param_str[0]
59+
parameter.value = get_parameter_value(string_value=param_str[1])
60+
parameters.append(parameter)
61+
62+
return parameters
4863

4964
def main(self, *, args): # noqa: D102
5065
with NodeStrategy(args) as node:
@@ -56,23 +71,19 @@ def main(self, *, args): # noqa: D102
5671
return 'Node not found'
5772

5873
with DirectNode(args) as node:
59-
parameter = Parameter()
60-
Parameter.name = args.parameter_name
61-
parameter.value = get_parameter_value(string_value=args.value)
62-
74+
parameters = self.build_parameters(args.parameters)
6375
response = call_set_parameters(
64-
node=node, node_name=args.node_name, parameters=[parameter])
76+
node=node, node_name=args.node_name, parameters=parameters)
77+
results = response.results
6578

66-
# output response
67-
assert len(response.results) == 1
68-
result = response.results[0]
69-
if result.successful:
70-
msg = 'Set parameter successful'
71-
if result.reason:
72-
msg += ': ' + result.reason
73-
print(msg)
74-
else:
75-
msg = 'Setting parameter failed'
76-
if result.reason:
77-
msg += ': ' + result.reason
78-
print(msg, file=sys.stderr)
79+
for result in results:
80+
if result.successful:
81+
msg = 'Set parameter successful'
82+
if result.reason:
83+
msg += ': ' + result.reason
84+
print(msg)
85+
else:
86+
msg = 'Setting parameter failed'
87+
if result.reason:
88+
msg += ': ' + result.reason
89+
print(msg, file=sys.stderr)

0 commit comments

Comments
 (0)