Skip to content

Commit a5b129a

Browse files
artivisivanpauno
authored andcommitted
add topic pub prototype completer (#299)
Signed-off-by: artivis <[email protected]>
1 parent 27f2102 commit a5b129a

File tree

2 files changed

+17
-1
lines changed

2 files changed

+17
-1
lines changed

ros2topic/ros2topic/api/__init__.py

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,8 @@
2323
from rclpy.validate_full_topic_name import validate_full_topic_name
2424
from ros2cli.node.strategy import NodeStrategy
2525
from ros2msg.api import message_type_completer
26+
from rosidl_runtime_py.convert import message_to_yaml
27+
from rosidl_runtime_py.utilities import get_message
2628

2729

2830
def get_topic_names_and_types(*, node, include_hidden_topics=False):
@@ -137,3 +139,14 @@ def _get_msg_class(node, topic, include_hidden_topics):
137139
return None
138140

139141
return import_message_type(topic, message_type)
142+
143+
144+
class TopicMessagePrototypeCompleter:
145+
"""Callable returning a message prototype."""
146+
147+
def __init__(self, *, topic_type_key=None):
148+
self.topic_type_key = topic_type_key
149+
150+
def __call__(self, prefix, parsed_args, **kwargs):
151+
message = get_message(getattr(parsed_args, self.topic_type_key))
152+
return [message_to_yaml(message())]

ros2topic/ros2topic/verb/pub.py

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
import rclpy
1818
from ros2cli.node import NODE_NAME_PREFIX
1919
from ros2topic.api import import_message_type
20+
from ros2topic.api import TopicMessagePrototypeCompleter
2021
from ros2topic.api import TopicNameCompleter
2122
from ros2topic.api import TopicTypeCompleter
2223
from ros2topic.verb import VerbExtension
@@ -38,11 +39,13 @@ def add_arguments(self, parser, cli_name):
3839
help="Type of the ROS message (e.g. 'std_msgs/String')")
3940
arg.completer = TopicTypeCompleter(
4041
topic_name_key='topic_name')
41-
parser.add_argument(
42+
arg = parser.add_argument(
4243
'values', nargs='?', default='{}',
4344
help='Values to fill the message with in YAML format '
4445
'(e.g. "data: Hello World"), '
4546
'otherwise the message will be published with default values')
47+
arg.completer = TopicMessagePrototypeCompleter(
48+
topic_type_key='message_type')
4649
parser.add_argument(
4750
'-r', '--rate', metavar='N', type=float, default=1.0,
4851
help='Publishing rate in Hz (default: 1)')

0 commit comments

Comments
 (0)