ul-data-logger-api-sdk 3.3.5__tar.gz → 3.4.0__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.
Files changed (17) hide show
  1. {ul_data_logger_api_sdk-3.3.5 → ul_data_logger_api_sdk-3.4.0}/PKG-INFO +1 -1
  2. {ul_data_logger_api_sdk-3.3.5 → ul_data_logger_api_sdk-3.4.0}/data_logger_api_sdk.py +9 -16
  3. {ul_data_logger_api_sdk-3.3.5 → ul_data_logger_api_sdk-3.4.0}/pyproject.toml +1 -1
  4. ul_data_logger_api_sdk-3.4.0/types/api_bs_device_links.py +15 -0
  5. ul_data_logger_api_sdk-3.3.5/types/api_bs_device_links.py +0 -30
  6. {ul_data_logger_api_sdk-3.3.5 → ul_data_logger_api_sdk-3.4.0}/.gitignore +0 -0
  7. {ul_data_logger_api_sdk-3.3.5 → ul_data_logger_api_sdk-3.4.0}/__init__.py +0 -0
  8. {ul_data_logger_api_sdk-3.3.5 → ul_data_logger_api_sdk-3.4.0}/data_logger_sdk_config.py +0 -0
  9. {ul_data_logger_api_sdk-3.3.5 → ul_data_logger_api_sdk-3.4.0}/py.typed +0 -0
  10. {ul_data_logger_api_sdk-3.3.5 → ul_data_logger_api_sdk-3.4.0}/types/__init__.py +0 -0
  11. {ul_data_logger_api_sdk-3.3.5 → ul_data_logger_api_sdk-3.4.0}/types/api_base_stations.py +0 -0
  12. {ul_data_logger_api_sdk-3.3.5 → ul_data_logger_api_sdk-3.4.0}/types/api_bs_traffic_stats.py +0 -0
  13. {ul_data_logger_api_sdk-3.3.5 → ul_data_logger_api_sdk-3.4.0}/types/api_device_data_history.py +0 -0
  14. {ul_data_logger_api_sdk-3.3.5 → ul_data_logger_api_sdk-3.4.0}/types/api_last_bs_data_by_device_macs.py +0 -0
  15. {ul_data_logger_api_sdk-3.3.5 → ul_data_logger_api_sdk-3.4.0}/types/api_packet_types.py +0 -0
  16. {ul_data_logger_api_sdk-3.3.5 → ul_data_logger_api_sdk-3.4.0}/types/api_protocol_types.py +0 -0
  17. {ul_data_logger_api_sdk-3.3.5 → ul_data_logger_api_sdk-3.4.0}/types/api_uplink_signal.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: ul-data-logger-api-sdk
3
- Version: 3.3.5
3
+ Version: 3.4.0
4
4
  Summary: Data logger API sdk
5
5
  Author: Unic-lab
6
6
  License-Expression: MIT
@@ -25,7 +25,7 @@ from data_logger_api_sdk.types.api_base_stations import (
25
25
  ApiBaseStationSystemLogResponse,
26
26
  ApiBaseStationSystemLogsListResult,
27
27
  )
28
- from data_logger_api_sdk.types.api_bs_device_links import ApiBsDeviceLinkResponse, ApiBsDeviceLinksListResult
28
+ from data_logger_api_sdk.types.api_bs_device_links import ApiBsDeviceLinkResponse
29
29
  from data_logger_api_sdk.types.api_bs_traffic_stats import ApiBsTrafficStatsResponse, ApiDeviceTrafficStatsQuery
30
30
  from data_logger_api_sdk.types.api_uplink_signal import (
31
31
  ApiDeviceUplinkSignalLatestResponse,
@@ -213,34 +213,27 @@ class DataLoggerApiSdk:
213
213
  )
214
214
  return ApiDeviceUplinkSignalsListResult(items=items, total_count=total_count)
215
215
 
216
- def get_bs_device_links(
216
+ def get_bs_device_links_for_bs(
217
217
  self,
218
+ bs_id: UUID,
218
219
  start_at: datetime,
219
220
  end_at: datetime | None = None,
220
- limit: int = 500,
221
- after_bs_id: UUID | None = None,
222
- after_device_id: UUID | None = None,
223
- ) -> ApiBsDeviceLinksListResult:
224
- """GET /bs-device-links — связи «мак ↔ БС» за период («когда-либо» при start_at из далёкого прошлого).
221
+ ) -> List[ApiBsDeviceLinkResponse]:
222
+ """GET /bs-device-links?bs_id=… — связи «мак ↔ БС» одной БС за окно (~90 дней ночного синка).
225
223
 
226
- Keyset-пагинация по (bs_id, device_id): курсор — последняя пара
227
- предыдущей страницы; без курсора (первая страница) приходит и
228
- total_count. Обход до пустой страницы — для ночного синка слоя
229
- «Объекты и устройства».
224
+ Ответ капится сервером (DL_BS_LINKS_PER_BS_LIMIT, при переполнении
225
+ дробится окно); дедуп между под-окнами — на потребителе.
230
226
  """
231
- query: Dict[str, Any] = {"start_at": start_at.isoformat(), "limit": limit}
227
+ query: Dict[str, Any] = {"bs_id": str(bs_id), "start_at": start_at.isoformat()}
232
228
  if end_at is not None:
233
229
  query["end_at"] = end_at.isoformat()
234
- if after_bs_id is not None and after_device_id is not None:
235
- query["after_bs_id"] = str(after_bs_id)
236
- query["after_device_id"] = str(after_device_id)
237
230
  response = self._api.request(
238
231
  method=ApiMethod.GET,
239
232
  path="/bs-device-links",
240
233
  json=None,
241
234
  q=query,
242
235
  ).typed(List[ApiBsDeviceLinkResponse]).check()
243
- return ApiBsDeviceLinksListResult(items=response.payload, total_count=response.total_count)
236
+ return response.payload
244
237
 
245
238
  def get_base_station(
246
239
  self,
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
4
4
 
5
5
  [project]
6
6
  name = "ul-data-logger-api-sdk"
7
- version = "3.3.5"
7
+ version = "3.4.0"
8
8
  description = "Data logger API sdk"
9
9
  license = "MIT"
10
10
  requires-python = ">=3.14"
@@ -0,0 +1,15 @@
1
+ from pydantic import UUID4
2
+ from ul_api_utils.api_resource.api_response import JsonApiResponsePayload
3
+
4
+
5
+ class ApiBsDeviceLinkResponse(JsonApiResponsePayload):
6
+ """Связь «мак ↔ БС» за период: элемент ответа GET /bs-device-links.
7
+
8
+ bs_id — идентификатор БС Data Logger (у потребителя unified API —
9
+ external_bs_id); bs_identifier — серийный номер БС.
10
+ """
11
+
12
+ device_network_mac: int
13
+ bs_id: UUID4
14
+ device_id: UUID4
15
+ bs_identifier: str
@@ -1,30 +0,0 @@
1
- from typing import List, NamedTuple, Optional
2
-
3
- from pydantic import UUID4
4
- from ul_api_utils.api_resource.api_response import JsonApiResponsePayload
5
-
6
-
7
- class ApiBsDeviceLinkResponse(JsonApiResponsePayload):
8
- """Связь «мак ↔ БС» за период: элемент ответа GET /bs-device-links.
9
-
10
- Пара существует, если БС когда-либо получала пакет устройства в
11
- запрошенном окне (дистинкт по журналу device_log). bs_id — идентификатор
12
- БС Data Logger (у потребителя unified API это external_bs_id);
13
- bs_identifier — её серийный номер.
14
- """
15
-
16
- device_network_mac: int
17
- bs_id: UUID4
18
- device_id: UUID4
19
- bs_identifier: str
20
-
21
-
22
- class ApiBsDeviceLinksListResult(NamedTuple):
23
- """Результат спискового вызова: страница элементов и total_count.
24
-
25
- total_count приходит только на первой странице (без курсора); дальше —
26
- None, обход идёт до пустой страницы.
27
- """
28
-
29
- items: List[ApiBsDeviceLinkResponse]
30
- total_count: Optional[int]