Skip to content

Commit

Permalink
support 'ros2 action find'. (#917)
Browse files Browse the repository at this point in the history
Signed-off-by: Tomoya Fujita <[email protected]>
  • Loading branch information
fujitatomoya authored Jun 26, 2024
1 parent a7c96d5 commit f92225c
Show file tree
Hide file tree
Showing 3 changed files with 68 additions and 0 deletions.
46 changes: 46 additions & 0 deletions ros2action/ros2action/verb/find.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
# Copyright 2024 Sony Group Corporation.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

from ros2action.api import action_type_completer
from ros2action.api import get_action_names_and_types
from ros2action.verb import VerbExtension
from ros2cli.node.strategy import NodeStrategy


class FindVerb(VerbExtension):
"""Find actions from type."""

def add_arguments(self, parser, cli_name):
arg = parser.add_argument(
'action_type',
help="Name of the ROS action type to find (e.g. 'test_msgs/action/Fibonacci')")
arg.completer = action_type_completer
parser.add_argument(
'-c', '--count-actions', action='store_true',
help='Only display the number of actions discovered')

def main(self, *, args):
with NodeStrategy(args) as node:
action_names_and_types = get_action_names_and_types(node=node)

filtered_actions = []
for (action_name, action_types) in action_names_and_types:
if args.action_type in action_types:
filtered_actions.append(action_name)

if args.count_actions:
print(len(filtered_actions))
else:
for filtered_action in filtered_actions:
print(filtered_action)
1 change: 1 addition & 0 deletions ros2action/setup.py
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,7 @@
'list = ros2action.verb.list:ListVerb',
'send_goal = ros2action.verb.send_goal:SendGoalVerb',
'type = ros2action.verb.type:TypeVerb',
'find = ros2action.verb.find:FindVerb',
],
}
)
21 changes: 21 additions & 0 deletions ros2action/test/test_cli.py
Original file line number Diff line number Diff line change
Expand Up @@ -231,6 +231,27 @@ def test_type(self):
text=action_command.output, strict=True
)

@launch_testing.markers.retry_on_failure(times=5, delay=1)
def test_find(self):
with self.launch_action_command(
arguments=['find', 'test_msgs/action/Fibonacci']) as action_command:
assert action_command.wait_for_shutdown(timeout=10)
assert action_command.exit_code == launch_testing.asserts.EXIT_OK
assert launch_testing.tools.expect_output(
expected_lines=['/fibonacci'],
text=action_command.output, strict=True
)

@launch_testing.markers.retry_on_failure(times=5, delay=1)
def test_find_count(self):
with self.launch_action_command(
arguments=['find', '-c', 'test_msgs/action/Fibonacci']) as action_command:
assert action_command.wait_for_shutdown(timeout=10)
assert action_command.exit_code == launch_testing.asserts.EXIT_OK
command_output_lines = action_command.output.splitlines()
assert len(command_output_lines) == 1
assert int(command_output_lines[0]) == 1

@launch_testing.markers.retry_on_failure(times=5, delay=1)
def test_send_fibonacci_goal(self):
with self.launch_action_command(
Expand Down

0 comments on commit f92225c

Please sign in to comment.