Skip to content

Commit dacbdfd

Browse files
artivisivanpauno
authored andcommitted
add service call prototype completer (#300)
Signed-off-by: artivis <[email protected]>
1 parent a5b129a commit dacbdfd

File tree

2 files changed

+17
-1
lines changed

2 files changed

+17
-1
lines changed

ros2service/ros2service/api/__init__.py

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,8 @@
1515
from rclpy.topic_or_service_is_hidden import topic_or_service_is_hidden
1616
from ros2cli.node.strategy import NodeStrategy
1717
from ros2srv.api import service_type_completer
18+
from rosidl_runtime_py.convert import message_to_yaml
19+
from rosidl_runtime_py.utilities import get_service
1820

1921

2022
def get_service_names_and_types(*, node, include_hidden_services=False):
@@ -62,3 +64,14 @@ def __call__(self, prefix, parsed_args, **kwargs):
6264
if n == service_name:
6365
return t
6466
return service_type_completer()
67+
68+
69+
class ServicePrototypeCompleter:
70+
"""Callable returning a service prototype."""
71+
72+
def __init__(self, *, service_type_key=None):
73+
self.service_type_key = service_type_key
74+
75+
def __call__(self, prefix, parsed_args, **kwargs):
76+
service = get_service(getattr(parsed_args, self.service_type_key))
77+
return [message_to_yaml(service.Request())]

ros2service/ros2service/verb/call.py

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
import rclpy
1919
from ros2cli.node import NODE_NAME_PREFIX
2020
from ros2service.api import ServiceNameCompleter
21+
from ros2service.api import ServicePrototypeCompleter
2122
from ros2service.api import ServiceTypeCompleter
2223
from ros2service.verb import VerbExtension
2324
from rosidl_runtime_py import set_message_fields
@@ -38,11 +39,13 @@ def add_arguments(self, parser, cli_name):
3839
help="Type of the ROS service (e.g. 'std_srvs/srv/Empty')")
3940
arg.completer = ServiceTypeCompleter(
4041
service_name_key='service_name')
41-
parser.add_argument(
42+
arg = parser.add_argument(
4243
'values', nargs='?', default='{}',
4344
help='Values to fill the service request with in YAML format ' +
4445
'(e.g. "{a: 1, b: 2}"), ' +
4546
'otherwise the service request will be published with default values')
47+
arg.completer = ServicePrototypeCompleter(
48+
service_type_key='service_type')
4649
parser.add_argument(
4750
'-r', '--rate', metavar='N', type=float,
4851
help='Repeat the call at a specific rate in Hz')

0 commit comments

Comments
 (0)