|
33 | 33 |
|
34 | 34 | import fnmatch |
35 | 35 | from json import dumps, loads |
| 36 | +from typing import TYPE_CHECKING |
36 | 37 |
|
37 | 38 | from rcl_interfaces.msg import Parameter, ParameterType, ParameterValue |
38 | 39 | from rcl_interfaces.srv import GetParameters, ListParameters, SetParameters |
|
44 | 45 | from rosapi.async_helper import futures_wait_for |
45 | 46 | from rosapi.proxy import get_nodes |
46 | 47 |
|
| 48 | +if TYPE_CHECKING: |
| 49 | + from rclpy.client import Client |
| 50 | + |
47 | 51 | """ Methods to interact with the param server. Values have to be passed |
48 | 52 | as JSON in order to facilitate dynamically typed SRV messages """ |
49 | 53 |
|
@@ -120,7 +124,7 @@ async def _set_param(node_name: str, name: str, value: str, parameter_type=None) |
120 | 124 | setattr(parameter.value, _parameter_type_mapping[parameter_type], loads(value)) |
121 | 125 |
|
122 | 126 | assert _node is not None |
123 | | - client = _node.create_client( |
| 127 | + client: Client = _node.create_client( |
124 | 128 | SetParameters, |
125 | 129 | f"{node_name}/set_parameters", |
126 | 130 | callback_group=MutuallyExclusiveCallbackGroup(), |
@@ -175,7 +179,7 @@ async def _get_param(node_name: str, name: str) -> ParameterValue: |
175 | 179 | """Internal helper function for get_param""" |
176 | 180 |
|
177 | 181 | assert _node is not None |
178 | | - client = _node.create_client( |
| 182 | + client: Client = _node.create_client( |
179 | 183 | GetParameters, |
180 | 184 | f"{node_name}/get_parameters", |
181 | 185 | callback_group=MutuallyExclusiveCallbackGroup(), |
@@ -250,7 +254,7 @@ async def get_param_names(params_glob: str | None) -> list[str]: |
250 | 254 | if node_name == _node.get_fully_qualified_name(): |
251 | 255 | continue |
252 | 256 |
|
253 | | - client = _node.create_client( |
| 257 | + client: Client = _node.create_client( |
254 | 258 | ListParameters, |
255 | 259 | f"{node_name}/list_parameters", |
256 | 260 | callback_group=MutuallyExclusiveCallbackGroup(), |
|
0 commit comments