2222from ros2node .api import get_absolute_node_name
2323from ros2node .api import get_node_names
2424from ros2node .api import NodeNameCompleter
25-
2625from ros2param .api import call_set_parameters
26+ from ros2param .api import call_set_parameters_atomically
2727from ros2param .api import ParameterNameCompleter
2828from ros2param .verb import VerbExtension
2929
@@ -40,6 +40,10 @@ def add_arguments(self, parser, cli_name): # noqa: D102
4040 parser .add_argument (
4141 '--include-hidden-nodes' , action = 'store_true' ,
4242 help = 'Consider hidden nodes as well' )
43+ parser .add_argument (
44+ '--atomic' , action = 'store_true' ,
45+ help = 'Set parameters atomically'
46+ )
4347 arg = parser .add_argument (
4448 'parameter_name' , help = 'Name of the parameter' )
4549 arg .completer = ParameterNameCompleter ()
@@ -60,12 +64,16 @@ def main(self, *, args): # noqa: D102
6064 Parameter .name = args .parameter_name
6165 parameter .value = get_parameter_value (string_value = args .value )
6266
63- response = call_set_parameters (
64- node = node , node_name = args .node_name , parameters = [parameter ])
67+ if args .atomic :
68+ response = call_set_parameters_atomically (
69+ node = node , node_name = args .node_name , parameters = [parameter ])
70+ result = response .result
71+ else :
72+ response = call_set_parameters (
73+ node = node , node_name = args .node_name , parameters = [parameter ])
74+ assert len (response .results ) == 1
75+ result = response .results [0 ]
6576
66- # output response
67- assert len (response .results ) == 1
68- result = response .results [0 ]
6977 if result .successful :
7078 msg = 'Set parameter successful'
7179 if result .reason :
0 commit comments