Skip to content

Commit 66414eb

Browse files
committed
http: api: implement expand device connectivity
1 parent c0dbb04 commit 66414eb

5 files changed

Lines changed: 48 additions & 1 deletion

File tree

src/enapter/cli/http/api/device_get_command.py

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,12 @@ def register(parent: cli.Subparsers) -> None:
2626
action="store_true",
2727
help="Expand device properties information",
2828
)
29+
parser.add_argument(
30+
"-c",
31+
"--connectivity",
32+
action="store_true",
33+
help="Expand device connectivity information",
34+
)
2935

3036
@staticmethod
3137
async def run(args: argparse.Namespace) -> None:
@@ -34,5 +40,6 @@ async def run(args: argparse.Namespace) -> None:
3440
args.id,
3541
expand_manifest=args.manifest,
3642
expand_properties=args.properties,
43+
expand_connectivity=args.connectivity,
3744
)
3845
print(json.dumps(device.to_dto()))

src/enapter/http/api/devices/__init__.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
from .client import Client
33
from .communication_config import CommunicationConfig
44
from .device import Device
5+
from .device_connectivity import DeviceConnectivity, DeviceConnectivityStatus
56
from .device_type import DeviceType
67
from .mqtt_credentials import MQTTCredentials
78
from .mqtt_protocol import MQTTProtocol
@@ -14,6 +15,8 @@
1415
"CommunicationConfig",
1516
"Device",
1617
"DeviceType",
18+
"DeviceConnectivity",
19+
"DeviceConnectivityStatus",
1720
"MQTTCredentials",
1821
"MQTTProtocol",
1922
"MQTTSCredentials",

src/enapter/http/api/devices/client.py

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,9 +26,14 @@ async def get(
2626
device_id: str,
2727
expand_manifest: bool = False,
2828
expand_properties: bool = False,
29+
expand_connectivity: bool = False,
2930
) -> Device:
3031
url = f"v3/devices/{device_id}"
31-
expand = {"manifest": expand_manifest, "properties": expand_properties}
32+
expand = {
33+
"manifest": expand_manifest,
34+
"properties": expand_properties,
35+
"connectivity": expand_connectivity,
36+
}
3237
params = {"expand": ",".join(k for k, v in expand.items() if v)}
3338
response = await self._client.get(url, params=params)
3439
api.check_error(response)

src/enapter/http/api/devices/device.py

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
from typing import Any, Self
44

55
from .authorized_role import AuthorizedRole
6+
from .device_connectivity import DeviceConnectivity
67
from .device_type import DeviceType
78

89

@@ -19,6 +20,7 @@ class Device:
1920
authorized_role: AuthorizedRole
2021
manifest: dict[str, Any] | None = None
2122
properties: dict[str, Any] | None = None
23+
connectivity: DeviceConnectivity | None = None
2224

2325
@classmethod
2426
def from_dto(cls, dto: dict[str, Any]) -> Self:
@@ -33,6 +35,11 @@ def from_dto(cls, dto: dict[str, Any]) -> Self:
3335
authorized_role=AuthorizedRole(dto["authorized_role"]),
3436
manifest=dto.get("manifest"),
3537
properties=dto.get("properties"),
38+
connectivity=(
39+
DeviceConnectivity.from_dto(dto["connectivity"])
40+
if dto.get("connectivity") is not None
41+
else None
42+
),
3643
)
3744

3845
def to_dto(self) -> dict[str, Any]:
@@ -47,4 +54,7 @@ def to_dto(self) -> dict[str, Any]:
4754
"authorized_role": self.authorized_role.value,
4855
"manifest": self.manifest,
4956
"properties": self.properties,
57+
"connectivity": (
58+
self.connectivity.to_dto() if self.connectivity is not None else None
59+
),
5060
}
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
import dataclasses
2+
import enum
3+
4+
5+
class DeviceConnectivityStatus(enum.Enum):
6+
7+
UNKNOWN = "UNKNOWN"
8+
ONLINE = "ONLINE"
9+
OFFLINE = "OFFLINE"
10+
11+
12+
@dataclasses.dataclass
13+
class DeviceConnectivity:
14+
15+
status: DeviceConnectivityStatus
16+
17+
@classmethod
18+
def from_dto(cls, dto: dict[str, str]) -> "DeviceConnectivity":
19+
return cls(status=DeviceConnectivityStatus(dto.get("status", "UNKNOWN")))
20+
21+
def to_dto(self) -> dict[str, str]:
22+
return {"status": self.status.value}

0 commit comments

Comments
 (0)