|
1 | 1 | import abc |
2 | 2 | import datetime |
3 | 3 | import uuid |
| 4 | +import warnings |
4 | 5 | from dataclasses import dataclass |
5 | 6 | from enum import Enum |
6 | 7 | from typing import Any, Dict, List, Optional, Union, cast |
7 | 8 |
|
8 | | -from yamcs.client.activities import Activity |
| 9 | +from yamcs.client.activities import Activity, ManualActivity |
9 | 10 | from yamcs.client.core.helpers import ProtoList, parse_server_time, to_server_time |
10 | 11 | from yamcs.protobuf.timeline import timeline_pb2 |
11 | 12 |
|
12 | 13 | __all__ = [ |
13 | 14 | "Band", |
14 | 15 | "CommandBand", |
15 | 16 | "ItemBand", |
| 17 | + "Item", |
16 | 18 | "OnCompletion", |
17 | 19 | "OnFailure", |
18 | 20 | "OnStart", |
@@ -1394,3 +1396,76 @@ def bands(self, value: List[Band]): |
1394 | 1396 |
|
1395 | 1397 | def __str__(self): |
1396 | 1398 | return self.name |
| 1399 | + |
| 1400 | + |
| 1401 | +class Item: |
| 1402 | + def __init__(self): |
| 1403 | + warnings.warn( |
| 1404 | + "Item is deprecated and will be removed in a future version. " |
| 1405 | + "Use TimelineEvent, TimelineActivity, or TimelineTask instead.", |
| 1406 | + category=DeprecationWarning, |
| 1407 | + stacklevel=2, |
| 1408 | + ) |
| 1409 | + |
| 1410 | + self.name: str = None |
| 1411 | + self.tags: List[str] = [] |
| 1412 | + self.start: datetime.datetime = None |
| 1413 | + self.duration: datetime.timedelta = None |
| 1414 | + self.activity: Optional[Activity] = None |
| 1415 | + self.background_color: Optional[str] = None |
| 1416 | + self.border_color: Optional[str] = None |
| 1417 | + self.border_width: Optional[int] = None |
| 1418 | + self.corner_radius: Optional[int] = None |
| 1419 | + self.margin_left: Optional[int] = None |
| 1420 | + self.text_color: Optional[str] = None |
| 1421 | + self.text_size: Optional[int] = None |
| 1422 | + |
| 1423 | + @property |
| 1424 | + def item_type(self) -> str: |
| 1425 | + """Type of item.""" |
| 1426 | + return timeline_pb2.TimelineItemType.Name(self._proto.type) |
| 1427 | + |
| 1428 | + def _to_timeline_item(self) -> TimelineItem: |
| 1429 | + if self.activity: |
| 1430 | + if isinstance(self.activity, ManualActivity): |
| 1431 | + return self._to_timeline_task() |
| 1432 | + else: |
| 1433 | + return self._to_timeline_activity() |
| 1434 | + else: |
| 1435 | + return self._to_timeline_event() |
| 1436 | + |
| 1437 | + def _to_timeline_task(self) -> TimelineTask: |
| 1438 | + item = TimelineTask( |
| 1439 | + name=self.name, |
| 1440 | + start=self.start, |
| 1441 | + tags=self.tags, |
| 1442 | + duration=self.duration, |
| 1443 | + ) |
| 1444 | + return item |
| 1445 | + |
| 1446 | + def _to_timeline_activity(self) -> TimelineActivity: |
| 1447 | + assert self.activity is not None |
| 1448 | + item = TimelineActivity( |
| 1449 | + name=self.name, |
| 1450 | + start=self.start, |
| 1451 | + tags=self.tags, |
| 1452 | + duration=self.duration, |
| 1453 | + activity=self.activity, |
| 1454 | + ) |
| 1455 | + return item |
| 1456 | + |
| 1457 | + def _to_timeline_event(self) -> TimelineEvent: |
| 1458 | + item = TimelineEvent( |
| 1459 | + name=self.name, |
| 1460 | + start=self.start, |
| 1461 | + tags=self.tags, |
| 1462 | + duration=self.duration, |
| 1463 | + background_color=self.background_color, |
| 1464 | + border_color=self.border_color, |
| 1465 | + border_width=self.border_width, |
| 1466 | + corner_radius=self.corner_radius, |
| 1467 | + margin_left=self.margin_left, |
| 1468 | + text_color=self.text_color, |
| 1469 | + text_size=self.text_size, |
| 1470 | + ) |
| 1471 | + return item |
0 commit comments