ul-data-logger-api-sdk 3.1.1__tar.gz → 3.3.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.
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: ul-data-logger-api-sdk
3
- Version: 3.1.1
3
+ Version: 3.3.0
4
4
  Summary: Data logger API sdk
5
5
  Author: Unic-lab
6
6
  License-Expression: MIT
@@ -13,6 +13,7 @@ from data_logger_api_sdk.data_logger_sdk_config import DataLoggerApiSdkConfig
13
13
  from data_logger_api_sdk.types.api_base_stations import (
14
14
  ApiBaseStationDetailResponse,
15
15
  ApiBaseStationDeviceLogsResponse,
16
+ ApiBaseStationDeviceLogsStatResponse,
16
17
  ApiBaseStationDevicesResponse,
17
18
  ApiBaseStationLogsStatForIntervalsResponse,
18
19
  ApiBaseStationLogsStatResponse,
@@ -193,13 +194,21 @@ class DataLoggerApiSdk:
193
194
  self,
194
195
  base_station_id: UUID,
195
196
  log_stat_days: int = 0,
197
+ exclude_log_types: List[str] | None = None,
196
198
  ) -> ApiBaseStationDetailResponse:
197
- """GET /base-stations/<uuid> — карточка базовой станции Data Logger."""
199
+ """GET /base-stations/<uuid> — карточка базовой станции Data Logger.
200
+
201
+ exclude_log_types исключает типы из logs_stat (например, ['heartbit']);
202
+ без него счётчики включают служебные heartbeat-логи.
203
+ """
204
+ query: Dict[str, Any] = {"log_stat_days": log_stat_days}
205
+ if exclude_log_types:
206
+ query["exclude_log_types"] = exclude_log_types
198
207
  return self._request_payload_once(
199
208
  ApiMethod.GET,
200
209
  f"/base-stations/{base_station_id}",
201
210
  ApiBaseStationDetailResponse,
202
- {"log_stat_days": log_stat_days},
211
+ query,
203
212
  )
204
213
 
205
214
  def get_base_station_logs(
@@ -209,13 +218,23 @@ class DataLoggerApiSdk:
209
218
  end_at: datetime | None = None,
210
219
  limit: int = 100,
211
220
  offset: int = 0,
221
+ exclude_log_types: List[str] | None = None,
222
+ sort: str | None = None,
212
223
  ) -> ApiBaseStationLogsListResult:
213
- """GET /base-stations/<uuid>/logs — журнал логов базовой станции."""
224
+ """GET /base-stations/<uuid>/logs — журнал логов базовой станции.
225
+
226
+ exclude_log_types передаётся стандартным filter-параметром
227
+ (например, ['heartbit'] прячет служебные heartbeat-логи).
228
+ """
214
229
  query: Dict[str, Any] = {"limit": limit, "offset": offset}
215
230
  if start_at is not None:
216
231
  query["start_at"] = start_at.isoformat()
217
232
  if end_at is not None:
218
233
  query["end_at"] = end_at.isoformat()
234
+ if exclude_log_types:
235
+ query["filter"] = json.dumps([{"name": "log_type", "op": "not_in", "val": exclude_log_types}])
236
+ if sort:
237
+ query["sort"] = sort
219
238
  items, total_count = self._request_list_payload_once(
220
239
  ApiMethod.GET,
221
240
  f"/base-stations/{base_station_id}/logs",
@@ -224,6 +243,18 @@ class DataLoggerApiSdk:
224
243
  )
225
244
  return ApiBaseStationLogsListResult(items=items, total_count=total_count)
226
245
 
246
+ def get_base_station_log(
247
+ self,
248
+ base_station_id: UUID,
249
+ log_id: UUID,
250
+ ) -> ApiBaseStationLogResponse:
251
+ """GET /base-stations/<uuid>/logs/<uuid> — конкретный лог базовой станции."""
252
+ return self._request_payload_once(
253
+ ApiMethod.GET,
254
+ f"/base-stations/{base_station_id}/logs/{log_id}",
255
+ ApiBaseStationLogResponse,
256
+ )
257
+
227
258
  def get_base_station_system_logs(
228
259
  self,
229
260
  base_station_id: UUID,
@@ -250,13 +281,37 @@ class DataLoggerApiSdk:
250
281
  self,
251
282
  base_station_id: UUID,
252
283
  day: date,
284
+ exclude_log_types: List[str] | None = None,
253
285
  ) -> ApiBaseStationLogsStatResponse:
254
- """GET /base-stations/<uuid>/logs-stat — статистика логов базовой станции за сутки."""
286
+ """GET /base-stations/<uuid>/logs-stat — статистика логов базовой станции за сутки.
287
+
288
+ exclude_log_types исключает типы из поминутных счётчиков (['heartbit'] прячет heartbeat).
289
+ """
290
+ query: Dict[str, Any] = {"day": day.isoformat()}
291
+ if exclude_log_types:
292
+ query["exclude_log_types"] = exclude_log_types
255
293
  return self._request_payload_once(
256
294
  ApiMethod.GET,
257
295
  f"/base-stations/{base_station_id}/logs-stat",
258
296
  ApiBaseStationLogsStatResponse,
259
- {"day": day.isoformat()},
297
+ query,
298
+ )
299
+
300
+ def get_base_station_device_logs_stat(
301
+ self,
302
+ base_station_id: UUID,
303
+ start_at: datetime,
304
+ end_at: datetime | None = None,
305
+ ) -> ApiBaseStationDeviceLogsStatResponse:
306
+ """GET /base-stations/<uuid>/device-logs-stat — число логов устройств БС по дням."""
307
+ query: Dict[str, Any] = {"start_at": start_at.isoformat()}
308
+ if end_at is not None:
309
+ query["end_at"] = end_at.isoformat()
310
+ return self._request_payload_once(
311
+ ApiMethod.GET,
312
+ f"/base-stations/{base_station_id}/device-logs-stat",
313
+ ApiBaseStationDeviceLogsStatResponse,
314
+ query,
260
315
  )
261
316
 
262
317
  def get_base_station_logs_stat_for_intervals(
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
4
4
 
5
5
  [project]
6
6
  name = "ul-data-logger-api-sdk"
7
- version = "3.1.1"
7
+ version = "3.3.0"
8
8
  description = "Data logger API sdk"
9
9
  license = "MIT"
10
10
  requires-python = ">=3.14"
@@ -1,4 +1,4 @@
1
- from datetime import datetime
1
+ from datetime import date, datetime
2
2
  from typing import Any, Dict, List, NamedTuple, Tuple
3
3
 
4
4
  from pydantic.types import UUID4
@@ -110,6 +110,12 @@ class ApiBaseStationLogsStatForIntervalsResponse(JsonApiResponsePayload):
110
110
  stats: List[datetime]
111
111
 
112
112
 
113
+ class ApiBaseStationDeviceLogsStatResponse(JsonApiResponsePayload):
114
+ """Ответ GET /base-stations/<uuid>/device-logs-stat: число логов устройств по дням."""
115
+
116
+ stats: List[Tuple[date, int]]
117
+
118
+
113
119
  class ApiBaseStationDeviceResponse(JsonApiResponsePayload):
114
120
  """Элемент devices ответа GET /base-stations/<uuid>/devices (ApiDeviceResponse без вложенной БС)."""
115
121