Skip to content

Commit 09a5c8c

Browse files
committed
fix _get_service_class to check correct type
Signed-off-by: Brian Chen <brian.chen@openrobotics.org>
1 parent 7f51e5b commit 09a5c8c

1 file changed

Lines changed: 14 additions & 17 deletions

File tree

ros2service/ros2service/api/__init__.py

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

15+
from rclpy.node import Node
1516
from time import sleep
1617
from rclpy.topic_or_service_is_hidden import topic_or_service_is_hidden
1718
from ros2cli.node.strategy import NodeStrategy
@@ -22,7 +23,7 @@
2223
import rclpy
2324

2425

25-
def get_service_names_and_types(*, node, include_hidden_services=False):
26+
def get_service_names_and_types(*, node: Node, include_hidden_services=False):
2627
service_names_and_types = node.get_service_names_and_types()
2728
if not include_hidden_services:
2829
service_names_and_types = [
@@ -37,47 +38,43 @@ def get_service_names(*, node, include_hidden_services=False):
3738
return [n for (n, t) in service_names_and_types]
3839

3940

40-
def get_service_class(node, service, blocking=False, include_hidden_services=False):
41+
def get_service_class(node: Node, service_name: str, blocking=False, include_hidden_services=False):
4142
"""
4243
Load service type module for the given service.
4344
4445
The service should be running for this function to find the service type.
4546
:param node: The node object of rclpy Node class.
46-
:param service: The name of the service.
47+
:param service_name: The name of the service.
4748
:param blocking: If blocking is True this function will wait for the service to start.
4849
:param include_hidden_services: Whether to include hidden services while finding the
4950
list of currently running services.
5051
:return:
5152
"""
52-
srv_class = _get_service_class(node, service, include_hidden_services)
53+
srv_class = _get_service_class(node, service_name, include_hidden_services)
5354
if srv_class is not None:
5455
return srv_class
5556
elif blocking:
56-
print(f'WARNING: service [{service}] does not appear to be started yet')
57+
print(f'WARNING: service [{service_name}] does not appear to be started yet')
5758
while rclpy.ok():
58-
srv_class = _get_service_class(node, service, include_hidden_services)
59+
srv_class = _get_service_class(node, service_name, include_hidden_services)
5960
if srv_class is not None:
6061
return srv_class
6162
sleep(0.1)
6263
else:
63-
print(f'WARNING: service [{service}] does not appear to be started yet')
64+
print(f'WARNING: service [{service_name}] does not appear to be started yet')
6465
return None
6566

6667

67-
def _get_service_class(node, service, include_hidden_services):
68+
def _get_service_class(node, service_name, include_hidden_services):
6869
service_names_and_types = get_service_names_and_types(
6970
node=node,
7071
include_hidden_services=include_hidden_services)
7172

72-
service_type = None
73-
for (service_name, service_types) in service_names_and_types:
74-
if service == service_name:
75-
if len(service_types) > 1:
76-
raise RuntimeError(
77-
f"Cannot echo service '{service}', as it contains more than one "
78-
f"type: [{', '.join(service_types)}]")
79-
service_type = service_types[0]
80-
break
73+
service_name_and_type = list(filter(lambda x: x[0] == service_name, service_names_and_types))
74+
if len(service_name_and_type) != 1:
75+
raise RuntimeError(
76+
f"Cannot echo '{service_name}': type not found")
77+
service_type = service_name_and_type[0][1][0]
8178

8279
if service_type is None:
8380
return None

0 commit comments

Comments
 (0)