ul-data-logger-api-sdk 2.0.0__tar.gz → 2.0.2__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {ul-data-logger-api-sdk-2.0.0 → ul-data-logger-api-sdk-2.0.2}/PKG-INFO +1 -1
- {ul-data-logger-api-sdk-2.0.0 → ul-data-logger-api-sdk-2.0.2}/data_logger_api_sdk/data_logger_api_sdk.py +34 -2
- ul-data-logger-api-sdk-2.0.2/data_logger_api_sdk/types/api_bs_traffic_stats.py +8 -0
- ul-data-logger-api-sdk-2.0.2/data_logger_api_sdk/types/api_last_bs_data_by_device_macs.py +48 -0
- {ul-data-logger-api-sdk-2.0.0 → ul-data-logger-api-sdk-2.0.2}/pyproject.toml +3 -0
- {ul-data-logger-api-sdk-2.0.0 → ul-data-logger-api-sdk-2.0.2}/setup.py +9 -9
- {ul-data-logger-api-sdk-2.0.0 → ul-data-logger-api-sdk-2.0.2}/ul_data_logger_api_sdk.egg-info/PKG-INFO +1 -1
- {ul-data-logger-api-sdk-2.0.0 → ul-data-logger-api-sdk-2.0.2}/ul_data_logger_api_sdk.egg-info/SOURCES.txt +2 -0
- {ul-data-logger-api-sdk-2.0.0 → ul-data-logger-api-sdk-2.0.2}/README.md +0 -0
- {ul-data-logger-api-sdk-2.0.0 → ul-data-logger-api-sdk-2.0.2}/data_logger_api_sdk/__init__.py +0 -0
- {ul-data-logger-api-sdk-2.0.0 → ul-data-logger-api-sdk-2.0.2}/data_logger_api_sdk/data_logger_sdk_config.py +0 -0
- {ul-data-logger-api-sdk-2.0.0 → ul-data-logger-api-sdk-2.0.2}/data_logger_api_sdk/py.typed +0 -0
- {ul-data-logger-api-sdk-2.0.0 → ul-data-logger-api-sdk-2.0.2}/data_logger_api_sdk/types/__init__.py +0 -0
- {ul-data-logger-api-sdk-2.0.0 → ul-data-logger-api-sdk-2.0.2}/data_logger_api_sdk/types/api_device_data_history.py +0 -0
- {ul-data-logger-api-sdk-2.0.0 → ul-data-logger-api-sdk-2.0.2}/data_logger_api_sdk/types/api_packet_types.py +0 -0
- {ul-data-logger-api-sdk-2.0.0 → ul-data-logger-api-sdk-2.0.2}/data_logger_api_sdk/types/api_protocol_types.py +0 -0
- {ul-data-logger-api-sdk-2.0.0 → ul-data-logger-api-sdk-2.0.2}/setup.cfg +0 -0
- {ul-data-logger-api-sdk-2.0.0 → ul-data-logger-api-sdk-2.0.2}/ul_data_logger_api_sdk.egg-info/dependency_links.txt +0 -0
- {ul-data-logger-api-sdk-2.0.0 → ul-data-logger-api-sdk-2.0.2}/ul_data_logger_api_sdk.egg-info/requires.txt +0 -0
- {ul-data-logger-api-sdk-2.0.0 → ul-data-logger-api-sdk-2.0.2}/ul_data_logger_api_sdk.egg-info/top_level.txt +0 -0
|
@@ -2,14 +2,17 @@ import json
|
|
|
2
2
|
import time
|
|
3
3
|
from datetime import datetime
|
|
4
4
|
from functools import lru_cache
|
|
5
|
-
from typing import List, Type
|
|
5
|
+
from typing import Any, List, Type
|
|
6
|
+
from uuid import UUID
|
|
6
7
|
|
|
7
8
|
from ul_api_utils.internal_api.internal_api import InternalApi
|
|
8
9
|
from ul_api_utils.internal_api.internal_api_response import TPyloadType
|
|
9
10
|
from ul_api_utils.utils.api_method import ApiMethod
|
|
10
11
|
|
|
11
12
|
from data_logger_api_sdk.data_logger_sdk_config import DataLoggerApiSdkConfig
|
|
13
|
+
from data_logger_api_sdk.types.api_bs_traffic_stats import ApiBsTrafficStatsResponse
|
|
12
14
|
from data_logger_api_sdk.types.api_device_data_history import ApiDeviceDataHistoryBody, ApiDeviceDataHistoryResponse
|
|
15
|
+
from data_logger_api_sdk.types.api_last_bs_data_by_device_macs import ApiDeviceLastBsDataResponse, ApiDeviceMacsListBodyModel
|
|
13
16
|
from data_logger_api_sdk.types.api_packet_types import ApiPacketTypesListResponse
|
|
14
17
|
from data_logger_api_sdk.types.api_protocol_types import ApiProtocolTypesListResponse
|
|
15
18
|
|
|
@@ -28,12 +31,14 @@ class DataLoggerApiSdk:
|
|
|
28
31
|
endpoint: str,
|
|
29
32
|
typed_as: Type[TPyloadType],
|
|
30
33
|
body: str | None,
|
|
34
|
+
query: dict[str, Any] | None = None,
|
|
31
35
|
) -> TPyloadType:
|
|
32
36
|
return (
|
|
33
37
|
self._api.request(
|
|
34
38
|
method=method,
|
|
35
39
|
path=endpoint,
|
|
36
40
|
json=json.loads(body) if body is not None else None,
|
|
41
|
+
q=query,
|
|
37
42
|
)
|
|
38
43
|
.typed(typed_as)
|
|
39
44
|
.check()
|
|
@@ -46,9 +51,10 @@ class DataLoggerApiSdk:
|
|
|
46
51
|
path: str,
|
|
47
52
|
typed: Type[TPyloadType],
|
|
48
53
|
body: str | None = None,
|
|
54
|
+
query: dict[str, Any] | None = None,
|
|
49
55
|
) -> TPyloadType:
|
|
50
56
|
ttl_status = round(time.time() / self._config.cache_ttl_s)
|
|
51
|
-
return self.request_payload(ttl_status, method, path, typed, body) # type: ignore # Type[TPyloadType] is hashable
|
|
57
|
+
return self.request_payload(ttl_status, method, path, typed, body, query) # type: ignore # Type[TPyloadType] is hashable
|
|
52
58
|
|
|
53
59
|
def get_protocol_types_list(self, mac: int) -> List[str]:
|
|
54
60
|
return self._get_cache_post_payload(
|
|
@@ -85,3 +91,29 @@ class DataLoggerApiSdk:
|
|
|
85
91
|
List[ApiDeviceDataHistoryResponse], # type: ignore
|
|
86
92
|
api_device_history_body,
|
|
87
93
|
)
|
|
94
|
+
|
|
95
|
+
def get_last_bs_data_by_device_macs(
|
|
96
|
+
self,
|
|
97
|
+
macs: set[int],
|
|
98
|
+
) -> List[ApiDeviceLastBsDataResponse]:
|
|
99
|
+
return self._get_cache_post_payload(
|
|
100
|
+
ApiMethod.POST,
|
|
101
|
+
"/devices/last-bs-data",
|
|
102
|
+
List[ApiDeviceLastBsDataResponse], # type: ignore
|
|
103
|
+
ApiDeviceMacsListBodyModel(macs=macs).model_dump_json(),
|
|
104
|
+
)
|
|
105
|
+
|
|
106
|
+
def get_bs_traffic_stats(
|
|
107
|
+
self,
|
|
108
|
+
base_station_id: UUID,
|
|
109
|
+
start_at: datetime,
|
|
110
|
+
end_at: datetime,
|
|
111
|
+
) -> List[ApiBsTrafficStatsResponse]:
|
|
112
|
+
return self._get_cache_post_payload(
|
|
113
|
+
ApiMethod.POST,
|
|
114
|
+
f"/base-stations/{base_station_id}/traffic-stats",
|
|
115
|
+
List[ApiBsTrafficStatsResponse], # type: ignore
|
|
116
|
+
None,
|
|
117
|
+
{"start_at": start_at, "end_at": end_at},
|
|
118
|
+
)
|
|
119
|
+
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
from datetime import datetime, timedelta, timezone
|
|
2
|
+
from typing import List, Set
|
|
3
|
+
|
|
4
|
+
from pydantic import UUID4, BaseModel, Field
|
|
5
|
+
from ul_api_utils.api_resource.api_response import JsonApiResponsePayload
|
|
6
|
+
from ul_api_utils.api_resource.api_response_payload_alias import ApiBaseModelPayloadResponse
|
|
7
|
+
|
|
8
|
+
BASE_STATION__INACTIVITY_LIMIT = timedelta(minutes=10)
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
class ApiDeviceMacsListBodyModel(BaseModel):
|
|
12
|
+
macs: Set[int] = Field(title="Macs", description="list of device macs", min_length=1)
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
class SdrConfigDataResponse(JsonApiResponsePayload):
|
|
16
|
+
baud_rate: int
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
class BsResponse(ApiBaseModelPayloadResponse):
|
|
20
|
+
api_user_modified_id: UUID4 | None = None
|
|
21
|
+
note: str
|
|
22
|
+
|
|
23
|
+
type: str
|
|
24
|
+
serial_number: int
|
|
25
|
+
|
|
26
|
+
latest_log_datetime: datetime | None = None
|
|
27
|
+
latest_geo_latitude: float | None = None
|
|
28
|
+
latest_geo_longitude: float | None = None
|
|
29
|
+
latest_soft_version: str | None = None
|
|
30
|
+
latest_geo_is_actual: bool | None = None
|
|
31
|
+
|
|
32
|
+
sdr_config_data_list: List[SdrConfigDataResponse] | None = None
|
|
33
|
+
|
|
34
|
+
|
|
35
|
+
@property
|
|
36
|
+
def status_ok(self) -> bool:
|
|
37
|
+
if self.latest_log_datetime is None:
|
|
38
|
+
return False
|
|
39
|
+
if self.latest_log_datetime.tzinfo is None:
|
|
40
|
+
self.latest_log_datetime = self.latest_log_datetime.replace(tzinfo=timezone.utc)
|
|
41
|
+
return (datetime.now(tz=timezone.utc) - self.latest_log_datetime) < BASE_STATION__INACTIVITY_LIMIT
|
|
42
|
+
|
|
43
|
+
|
|
44
|
+
class ApiDeviceLastBsDataResponse(JsonApiResponsePayload):
|
|
45
|
+
mac: int
|
|
46
|
+
latest_signal_rssi: int | None = None
|
|
47
|
+
latest_signal_snr: int | None = None
|
|
48
|
+
bs: BsResponse | None = None
|
|
@@ -115,6 +115,9 @@ extend-ignore = [
|
|
|
115
115
|
"FBT001", # Checks for the use of boolean positional arguments in function definitions, as determined by the presence of a bool type hint
|
|
116
116
|
"PERF203", # Checks for uses of except handling via try-except within for and while loops
|
|
117
117
|
"A005", # Checks if module shadows a Python standard-library module
|
|
118
|
+
"C420", # Unnecessary dict comprehension for iterable; use dict.fromkeys instead
|
|
119
|
+
"LOG015", # {}() call on root logger
|
|
120
|
+
"TC006", # Add quotes to type expression in typing.cast()
|
|
118
121
|
]
|
|
119
122
|
|
|
120
123
|
[tool.ruff.lint.mccabe]
|
|
@@ -13,7 +13,7 @@ if sys.argv:
|
|
|
13
13
|
sys.argv.remove("broker_sdk")
|
|
14
14
|
setup(
|
|
15
15
|
name="ul-data-logger-sdk",
|
|
16
|
-
version="3.0.
|
|
16
|
+
version="3.0.4",
|
|
17
17
|
description="Data logger sdk",
|
|
18
18
|
author="Unic-lab",
|
|
19
19
|
long_description=long_description,
|
|
@@ -39,17 +39,17 @@ if sys.argv:
|
|
|
39
39
|
install_requires=[
|
|
40
40
|
"ul-unipipeline>=2.0.0",
|
|
41
41
|
# "ul-data-aggregator-sdk>=8.13.2",
|
|
42
|
-
# "ul-py-tool==2.1.
|
|
43
|
-
# "ul-api-utils==8.1.
|
|
42
|
+
# "ul-py-tool==2.1.3,
|
|
43
|
+
# "ul-api-utils==8.1.9",
|
|
44
44
|
# "ul-db-utils==4.0.2",
|
|
45
|
-
# "ul-data-gateway-sdk==1.0.
|
|
45
|
+
# "ul-data-gateway-sdk==1.0.6",
|
|
46
46
|
],
|
|
47
47
|
)
|
|
48
48
|
elif "api_sdk" in set(sys.argv):
|
|
49
49
|
sys.argv.remove("api_sdk")
|
|
50
50
|
setup(
|
|
51
51
|
name="ul-data-logger-api-sdk",
|
|
52
|
-
version="2.0.
|
|
52
|
+
version="2.0.2",
|
|
53
53
|
description="Data logger API sdk",
|
|
54
54
|
author="Unic-lab",
|
|
55
55
|
long_description=long_description,
|
|
@@ -76,9 +76,9 @@ if sys.argv:
|
|
|
76
76
|
"ul-unipipeline>=2.0.0",
|
|
77
77
|
"tqdm==4.66.1",
|
|
78
78
|
# "ul-data-aggregator-sdk>=8.13.2",
|
|
79
|
-
# "ul-py-tool==2.1.
|
|
80
|
-
# "ul-api-utils==
|
|
81
|
-
# "ul-db-utils==
|
|
82
|
-
# "ul-data-gateway-sdk==1.0.
|
|
79
|
+
# "ul-py-tool==2.1.4,
|
|
80
|
+
# "ul-api-utils==9.1.1",
|
|
81
|
+
# "ul-db-utils==5.1.0",
|
|
82
|
+
# "ul-data-gateway-sdk==1.0.6",
|
|
83
83
|
],
|
|
84
84
|
)
|
|
@@ -6,7 +6,9 @@ data_logger_api_sdk/data_logger_api_sdk.py
|
|
|
6
6
|
data_logger_api_sdk/data_logger_sdk_config.py
|
|
7
7
|
data_logger_api_sdk/py.typed
|
|
8
8
|
data_logger_api_sdk/types/__init__.py
|
|
9
|
+
data_logger_api_sdk/types/api_bs_traffic_stats.py
|
|
9
10
|
data_logger_api_sdk/types/api_device_data_history.py
|
|
11
|
+
data_logger_api_sdk/types/api_last_bs_data_by_device_macs.py
|
|
10
12
|
data_logger_api_sdk/types/api_packet_types.py
|
|
11
13
|
data_logger_api_sdk/types/api_protocol_types.py
|
|
12
14
|
ul_data_logger_api_sdk.egg-info/PKG-INFO
|
|
File without changes
|
{ul-data-logger-api-sdk-2.0.0 → ul-data-logger-api-sdk-2.0.2}/data_logger_api_sdk/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{ul-data-logger-api-sdk-2.0.0 → ul-data-logger-api-sdk-2.0.2}/data_logger_api_sdk/types/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|