|
1 | 1 | import functools |
2 | 2 | import json |
3 | | -from typing import Any, Callable, Iterable, List, Mapping, Optional |
| 3 | +from typing import Any, Callable, Dict, Iterable, List, Mapping, Optional |
4 | 4 |
|
| 5 | +from google.protobuf import json_format, struct_pb2 |
5 | 6 | from yamcs.core.context import Context |
6 | 7 | from yamcs.core.exceptions import NotFound |
7 | 8 | from yamcs.core.futures import WebSocketSubscriptionFuture |
@@ -260,20 +261,40 @@ def get_filelist( |
260 | 261 | message.ParseFromString(response.content) |
261 | 262 | return RemoteFileListing(message) |
262 | 263 |
|
263 | | - def pause_transfer(self, id: str): |
| 264 | + def pause_transfer(self, id: str) -> None: |
264 | 265 | url = f"/filetransfer/{self._instance}/{self._service}/transfers/{id}:pause" |
265 | 266 | self.ctx.post_proto(url) |
266 | 267 |
|
267 | | - def resume_transfer(self, id: str): |
| 268 | + def resume_transfer(self, id: str) -> None: |
268 | 269 | url = f"/filetransfer/{self._instance}/{self._service}/transfers/{id}:resume" |
269 | 270 | self.ctx.post_proto(url) |
270 | 271 |
|
271 | | - def cancel_transfer(self, id: str): |
| 272 | + def cancel_transfer(self, id: str) -> None: |
272 | 273 | url = f"/filetransfer/{self._instance}/{self._service}/transfers/{id}:cancel" |
273 | 274 | self.ctx.post_proto(url) |
274 | 275 |
|
| 276 | + def run_file_action( |
| 277 | + self, |
| 278 | + file: str, |
| 279 | + action: str, |
| 280 | + message: Optional[Mapping[str, Any]] = None, |
| 281 | + ) -> Dict[str, Any]: |
| 282 | + req = filetransfer_pb2.RunFileActionRequest() |
| 283 | + req.file = file |
| 284 | + req.action = action |
| 285 | + if message: |
| 286 | + req.message.update(message) |
| 287 | + |
| 288 | + url = f"/filetransfer/{self._instance}/{self._service}/files:runFileAction" |
| 289 | + response = self.ctx.post_proto(url, data=req.SerializeToString()) |
| 290 | + response_message = struct_pb2.Struct() |
| 291 | + response_message.ParseFromString(response.content) |
| 292 | + return json_format.MessageToDict(response_message) |
| 293 | + |
275 | 294 | def create_transfer_subscription( |
276 | | - self, on_data: Optional[Callable[[Transfer], None]] = None, timeout: float = 60 |
| 295 | + self, |
| 296 | + on_data: Optional[Callable[[Transfer], None]] = None, |
| 297 | + timeout: float = 60, |
277 | 298 | ) -> TransferSubscription: |
278 | 299 | options = filetransfer_pb2.SubscribeTransfersRequest() |
279 | 300 | options.instance = self._instance |
|
0 commit comments