Skip to content

Commit 0006274

Browse files
add "--param-type" option to ros2param list. (#572)
* add "--param-type" option to ros2param list. Signed-off-by: Tomoya.Fujita <[email protected]> Signed-off-by: Chris Lalancette <[email protected]> Co-authored-by: Chris Lalancette <[email protected]>
1 parent 2b6930e commit 0006274

File tree

3 files changed

+39
-19
lines changed

3 files changed

+39
-19
lines changed

ros2param/ros2param/api/__init__.py

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -185,6 +185,22 @@ def call_list_parameters(*, node, node_name, prefix=None):
185185
return response.result.names
186186

187187

188+
def get_parameter_type_string(parameter_type):
189+
mapping = {
190+
ParameterType.PARAMETER_BOOL: 'boolean',
191+
ParameterType.PARAMETER_INTEGER: 'integer',
192+
ParameterType.PARAMETER_DOUBLE: 'double',
193+
ParameterType.PARAMETER_STRING: 'string',
194+
ParameterType.PARAMETER_BYTE_ARRAY: 'byte array',
195+
ParameterType.PARAMETER_BOOL_ARRAY: 'boolean array',
196+
ParameterType.PARAMETER_INTEGER_ARRAY: 'integer array',
197+
ParameterType.PARAMETER_DOUBLE_ARRAY: 'double array',
198+
ParameterType.PARAMETER_STRING_ARRAY: 'string array',
199+
ParameterType.PARAMETER_NOT_SET: 'not set',
200+
}
201+
return mapping[parameter_type]
202+
203+
188204
class ParameterNameCompleter:
189205
"""Callable returning a list of parameter names."""
190206

ros2param/ros2param/verb/describe.py

Lines changed: 1 addition & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -12,14 +12,14 @@
1212
# See the License for the specific language governing permissions and
1313
# limitations under the License.
1414

15-
from rcl_interfaces.msg import ParameterType
1615
from ros2cli.node.direct import DirectNode
1716
from ros2cli.node.strategy import add_arguments
1817
from ros2cli.node.strategy import NodeStrategy
1918
from ros2node.api import get_absolute_node_name
2019
from ros2node.api import get_node_names
2120
from ros2node.api import NodeNameCompleter
2221
from ros2param.api import call_describe_parameters
22+
from ros2param.api import get_parameter_type_string
2323
from ros2param.api import ParameterNameCompleter
2424
from ros2param.verb import VerbExtension
2525

@@ -77,19 +77,3 @@ def _print_descriptor(self, descriptor):
7777
if descriptor.additional_constraints:
7878
print(' Additional constraints:',
7979
descriptor.additional_constraints)
80-
81-
82-
def get_parameter_type_string(parameter_type):
83-
mapping = {
84-
ParameterType.PARAMETER_BOOL: 'boolean',
85-
ParameterType.PARAMETER_INTEGER: 'integer',
86-
ParameterType.PARAMETER_DOUBLE: 'double',
87-
ParameterType.PARAMETER_STRING: 'string',
88-
ParameterType.PARAMETER_BYTE_ARRAY: 'byte array',
89-
ParameterType.PARAMETER_BOOL_ARRAY: 'boolean array',
90-
ParameterType.PARAMETER_INTEGER_ARRAY: 'integer array',
91-
ParameterType.PARAMETER_DOUBLE_ARRAY: 'double array',
92-
ParameterType.PARAMETER_STRING_ARRAY: 'string array',
93-
ParameterType.PARAMETER_NOT_SET: 'not set',
94-
}
95-
return mapping[parameter_type]

ros2param/ros2param/verb/list.py

Lines changed: 22 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,8 @@
2222
from ros2node.api import get_absolute_node_name
2323
from ros2node.api import get_node_names
2424
from ros2node.api import NodeNameCompleter
25+
from ros2param.api import call_describe_parameters
26+
from ros2param.api import get_parameter_type_string
2527
from ros2param.verb import VerbExtension
2628
from ros2service.api import get_service_names
2729

@@ -41,6 +43,9 @@ def add_arguments(self, parser, cli_name): # noqa: D102
4143
parser.add_argument(
4244
'--param-prefixes', nargs='+', default=[],
4345
help='Only list parameters with the provided prefixes')
46+
parser.add_argument(
47+
'--param-type', action='store_true',
48+
help='Print parameter types with parameter names')
4449

4550
def main(self, *, args): # noqa: D102
4651
with NodeStrategy(args) as node:
@@ -96,8 +101,23 @@ def main(self, *, args): # noqa: D102
96101
if not args.node_name:
97102
print(f'{node_name.full_name}:')
98103
response = future.result()
99-
for name in sorted(response.result.names):
100-
print(f' {name}')
104+
sorted_names = sorted(response.result.names)
105+
# get descriptors for the node if needs to print parameter type
106+
name_to_type_map = {}
107+
if args.param_type is True:
108+
resp = call_describe_parameters(
109+
node=node, node_name=node_name.full_name,
110+
parameter_names=sorted_names)
111+
for descriptor in resp.descriptors:
112+
name_to_type_map[descriptor.name] = get_parameter_type_string(
113+
descriptor.type)
114+
115+
for name in sorted_names:
116+
if args.param_type is True:
117+
param_type_str = name_to_type_map[name]
118+
print(f' {name} (type: {param_type_str})')
119+
else:
120+
print(f' {name}')
101121
else:
102122
e = future.exception()
103123
print(

0 commit comments

Comments
 (0)