layrz-sdk 3.1.18__tar.gz → 3.1.20__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.

Potentially problematic release.


This version of layrz-sdk might be problematic. Click here for more details.

Files changed (101) hide show
  1. {layrz_sdk-3.1.18 → layrz_sdk-3.1.20}/CHANGELOG.md +16 -0
  2. {layrz_sdk-3.1.18/layrz_sdk.egg-info → layrz_sdk-3.1.20}/PKG-INFO +2 -1
  3. {layrz_sdk-3.1.18 → layrz_sdk-3.1.20}/layrz_sdk/entities/modbus/schema.py +6 -1
  4. {layrz_sdk-3.1.18 → layrz_sdk-3.1.20}/layrz_sdk/entities/modbus/status.py +6 -1
  5. {layrz_sdk-3.1.18 → layrz_sdk-3.1.20}/layrz_sdk/entities/telemetry/assetmessage.py +19 -1
  6. {layrz_sdk-3.1.18 → layrz_sdk-3.1.20}/layrz_sdk/entities/telemetry/devicemessage.py +7 -2
  7. {layrz_sdk-3.1.18 → layrz_sdk-3.1.20/layrz_sdk.egg-info}/PKG-INFO +2 -1
  8. {layrz_sdk-3.1.18 → layrz_sdk-3.1.20}/layrz_sdk.egg-info/requires.txt +1 -0
  9. {layrz_sdk-3.1.18 → layrz_sdk-3.1.20}/pyproject.toml +2 -1
  10. {layrz_sdk-3.1.18 → layrz_sdk-3.1.20}/uv.lock +12 -1
  11. {layrz_sdk-3.1.18 → layrz_sdk-3.1.20}/.github/workflows/checks.yml +0 -0
  12. {layrz_sdk-3.1.18 → layrz_sdk-3.1.20}/.github/workflows/deploy.yml +0 -0
  13. {layrz_sdk-3.1.18 → layrz_sdk-3.1.20}/.gitignore +0 -0
  14. {layrz_sdk-3.1.18 → layrz_sdk-3.1.20}/.vscode/extensions.json +0 -0
  15. {layrz_sdk-3.1.18 → layrz_sdk-3.1.20}/CODE_OF_CONDUCT.md +0 -0
  16. {layrz_sdk-3.1.18 → layrz_sdk-3.1.20}/CONTRIBUTING.md +0 -0
  17. {layrz_sdk-3.1.18 → layrz_sdk-3.1.20}/LICENSE +0 -0
  18. {layrz_sdk-3.1.18 → layrz_sdk-3.1.20}/README.md +0 -0
  19. {layrz_sdk-3.1.18 → layrz_sdk-3.1.20}/layrz_sdk/__init__.py +0 -0
  20. {layrz_sdk-3.1.18 → layrz_sdk-3.1.20}/layrz_sdk/constants.py +0 -0
  21. {layrz_sdk-3.1.18 → layrz_sdk-3.1.20}/layrz_sdk/entities/__init__.py +0 -0
  22. {layrz_sdk-3.1.18 → layrz_sdk-3.1.20}/layrz_sdk/entities/asset.py +0 -0
  23. {layrz_sdk-3.1.18 → layrz_sdk-3.1.20}/layrz_sdk/entities/asset_operation_mode.py +0 -0
  24. {layrz_sdk-3.1.18 → layrz_sdk-3.1.20}/layrz_sdk/entities/broadcast_request.py +0 -0
  25. {layrz_sdk-3.1.18 → layrz_sdk-3.1.20}/layrz_sdk/entities/broadcast_response.py +0 -0
  26. {layrz_sdk-3.1.18 → layrz_sdk-3.1.20}/layrz_sdk/entities/broadcast_result.py +0 -0
  27. {layrz_sdk-3.1.18 → layrz_sdk-3.1.20}/layrz_sdk/entities/broadcast_status.py +0 -0
  28. {layrz_sdk-3.1.18 → layrz_sdk-3.1.20}/layrz_sdk/entities/case.py +0 -0
  29. {layrz_sdk-3.1.18 → layrz_sdk-3.1.20}/layrz_sdk/entities/case_ignored_status.py +0 -0
  30. {layrz_sdk-3.1.18 → layrz_sdk-3.1.20}/layrz_sdk/entities/case_status.py +0 -0
  31. {layrz_sdk-3.1.18 → layrz_sdk-3.1.20}/layrz_sdk/entities/charts/axis_config.py +0 -0
  32. {layrz_sdk-3.1.18 → layrz_sdk-3.1.20}/layrz_sdk/entities/charts/bar_chart.py +0 -0
  33. {layrz_sdk-3.1.18 → layrz_sdk-3.1.20}/layrz_sdk/entities/charts/chart_alignment.py +0 -0
  34. {layrz_sdk-3.1.18 → layrz_sdk-3.1.20}/layrz_sdk/entities/charts/chart_color.py +0 -0
  35. {layrz_sdk-3.1.18 → layrz_sdk-3.1.20}/layrz_sdk/entities/charts/chart_configuration.py +0 -0
  36. {layrz_sdk-3.1.18 → layrz_sdk-3.1.20}/layrz_sdk/entities/charts/chart_data_serie.py +0 -0
  37. {layrz_sdk-3.1.18 → layrz_sdk-3.1.20}/layrz_sdk/entities/charts/chart_data_serie_type.py +0 -0
  38. {layrz_sdk-3.1.18 → layrz_sdk-3.1.20}/layrz_sdk/entities/charts/chart_data_type.py +0 -0
  39. {layrz_sdk-3.1.18 → layrz_sdk-3.1.20}/layrz_sdk/entities/charts/chart_render_technology.py +0 -0
  40. {layrz_sdk-3.1.18 → layrz_sdk-3.1.20}/layrz_sdk/entities/charts/column_chart.py +0 -0
  41. {layrz_sdk-3.1.18 → layrz_sdk-3.1.20}/layrz_sdk/entities/charts/html_chart.py +0 -0
  42. {layrz_sdk-3.1.18 → layrz_sdk-3.1.20}/layrz_sdk/entities/charts/line_chart.py +0 -0
  43. {layrz_sdk-3.1.18 → layrz_sdk-3.1.20}/layrz_sdk/entities/charts/map_center_type.py +0 -0
  44. {layrz_sdk-3.1.18 → layrz_sdk-3.1.20}/layrz_sdk/entities/charts/map_chart.py +0 -0
  45. {layrz_sdk-3.1.18 → layrz_sdk-3.1.20}/layrz_sdk/entities/charts/map_point.py +0 -0
  46. {layrz_sdk-3.1.18 → layrz_sdk-3.1.20}/layrz_sdk/entities/charts/number_chart.py +0 -0
  47. {layrz_sdk-3.1.18 → layrz_sdk-3.1.20}/layrz_sdk/entities/charts/pie_chart.py +0 -0
  48. {layrz_sdk-3.1.18 → layrz_sdk-3.1.20}/layrz_sdk/entities/charts/radar_chart.py +0 -0
  49. {layrz_sdk-3.1.18 → layrz_sdk-3.1.20}/layrz_sdk/entities/charts/radial_bar_chart.py +0 -0
  50. {layrz_sdk-3.1.18 → layrz_sdk-3.1.20}/layrz_sdk/entities/charts/scatter_chart.py +0 -0
  51. {layrz_sdk-3.1.18 → layrz_sdk-3.1.20}/layrz_sdk/entities/charts/scatter_serie.py +0 -0
  52. {layrz_sdk-3.1.18 → layrz_sdk-3.1.20}/layrz_sdk/entities/charts/scatter_serie_item.py +0 -0
  53. {layrz_sdk-3.1.18 → layrz_sdk-3.1.20}/layrz_sdk/entities/charts/table_chart.py +0 -0
  54. {layrz_sdk-3.1.18 → layrz_sdk-3.1.20}/layrz_sdk/entities/charts/table_header.py +0 -0
  55. {layrz_sdk-3.1.18 → layrz_sdk-3.1.20}/layrz_sdk/entities/charts/table_row.py +0 -0
  56. {layrz_sdk-3.1.18 → layrz_sdk-3.1.20}/layrz_sdk/entities/charts/timeline_chart.py +0 -0
  57. {layrz_sdk-3.1.18 → layrz_sdk-3.1.20}/layrz_sdk/entities/charts/timeline_serie.py +0 -0
  58. {layrz_sdk-3.1.18 → layrz_sdk-3.1.20}/layrz_sdk/entities/charts/timeline_serie_item.py +0 -0
  59. {layrz_sdk-3.1.18 → layrz_sdk-3.1.20}/layrz_sdk/entities/checkpoint.py +0 -0
  60. {layrz_sdk-3.1.18 → layrz_sdk-3.1.20}/layrz_sdk/entities/comment.py +0 -0
  61. {layrz_sdk-3.1.18 → layrz_sdk-3.1.20}/layrz_sdk/entities/custom_field.py +0 -0
  62. {layrz_sdk-3.1.18 → layrz_sdk-3.1.20}/layrz_sdk/entities/custom_report_page.py +0 -0
  63. {layrz_sdk-3.1.18 → layrz_sdk-3.1.20}/layrz_sdk/entities/device.py +0 -0
  64. {layrz_sdk-3.1.18 → layrz_sdk-3.1.20}/layrz_sdk/entities/event.py +0 -0
  65. {layrz_sdk-3.1.18 → layrz_sdk-3.1.20}/layrz_sdk/entities/geofence.py +0 -0
  66. {layrz_sdk-3.1.18 → layrz_sdk-3.1.20}/layrz_sdk/entities/last_message.py +0 -0
  67. {layrz_sdk-3.1.18 → layrz_sdk-3.1.20}/layrz_sdk/entities/message.py +0 -0
  68. {layrz_sdk-3.1.18 → layrz_sdk-3.1.20}/layrz_sdk/entities/modbus/__init__.py +0 -0
  69. {layrz_sdk-3.1.18 → layrz_sdk-3.1.20}/layrz_sdk/entities/modbus/config.py +0 -0
  70. {layrz_sdk-3.1.18 → layrz_sdk-3.1.20}/layrz_sdk/entities/modbus/parameter.py +0 -0
  71. {layrz_sdk-3.1.18 → layrz_sdk-3.1.20}/layrz_sdk/entities/modbus/wait.py +0 -0
  72. {layrz_sdk-3.1.18 → layrz_sdk-3.1.20}/layrz_sdk/entities/outbound_service.py +0 -0
  73. {layrz_sdk-3.1.18 → layrz_sdk-3.1.20}/layrz_sdk/entities/position.py +0 -0
  74. {layrz_sdk-3.1.18 → layrz_sdk-3.1.20}/layrz_sdk/entities/presence_type.py +0 -0
  75. {layrz_sdk-3.1.18 → layrz_sdk-3.1.20}/layrz_sdk/entities/report.py +0 -0
  76. {layrz_sdk-3.1.18 → layrz_sdk-3.1.20}/layrz_sdk/entities/report_col.py +0 -0
  77. {layrz_sdk-3.1.18 → layrz_sdk-3.1.20}/layrz_sdk/entities/report_configuration.py +0 -0
  78. {layrz_sdk-3.1.18 → layrz_sdk-3.1.20}/layrz_sdk/entities/report_data_type.py +0 -0
  79. {layrz_sdk-3.1.18 → layrz_sdk-3.1.20}/layrz_sdk/entities/report_format.py +0 -0
  80. {layrz_sdk-3.1.18 → layrz_sdk-3.1.20}/layrz_sdk/entities/report_header.py +0 -0
  81. {layrz_sdk-3.1.18 → layrz_sdk-3.1.20}/layrz_sdk/entities/report_page.py +0 -0
  82. {layrz_sdk-3.1.18 → layrz_sdk-3.1.20}/layrz_sdk/entities/report_row.py +0 -0
  83. {layrz_sdk-3.1.18 → layrz_sdk-3.1.20}/layrz_sdk/entities/sensor.py +0 -0
  84. {layrz_sdk-3.1.18 → layrz_sdk-3.1.20}/layrz_sdk/entities/static_position.py +0 -0
  85. {layrz_sdk-3.1.18 → layrz_sdk-3.1.20}/layrz_sdk/entities/telemetry/__init__.py +0 -0
  86. {layrz_sdk-3.1.18 → layrz_sdk-3.1.20}/layrz_sdk/entities/text_alignment.py +0 -0
  87. {layrz_sdk-3.1.18 → layrz_sdk-3.1.20}/layrz_sdk/entities/trigger.py +0 -0
  88. {layrz_sdk-3.1.18 → layrz_sdk-3.1.20}/layrz_sdk/entities/user.py +0 -0
  89. {layrz_sdk-3.1.18 → layrz_sdk-3.1.20}/layrz_sdk/entities/waypoint.py +0 -0
  90. {layrz_sdk-3.1.18 → layrz_sdk-3.1.20}/layrz_sdk/helpers/__init__.py +0 -0
  91. {layrz_sdk-3.1.18 → layrz_sdk-3.1.20}/layrz_sdk/helpers/color.py +0 -0
  92. {layrz_sdk-3.1.18 → layrz_sdk-3.1.20}/layrz_sdk/lcl/__init__.py +0 -0
  93. {layrz_sdk-3.1.18 → layrz_sdk-3.1.20}/layrz_sdk/lcl/core.py +0 -0
  94. {layrz_sdk-3.1.18 → layrz_sdk-3.1.20}/layrz_sdk/py.typed +0 -0
  95. {layrz_sdk-3.1.18 → layrz_sdk-3.1.20}/layrz_sdk.egg-info/SOURCES.txt +0 -0
  96. {layrz_sdk-3.1.18 → layrz_sdk-3.1.20}/layrz_sdk.egg-info/dependency_links.txt +0 -0
  97. {layrz_sdk-3.1.18 → layrz_sdk-3.1.20}/layrz_sdk.egg-info/top_level.txt +0 -0
  98. {layrz_sdk-3.1.18 → layrz_sdk-3.1.20}/manual_deploy.py +0 -0
  99. {layrz_sdk-3.1.18 → layrz_sdk-3.1.20}/setup.cfg +0 -0
  100. {layrz_sdk-3.1.18 → layrz_sdk-3.1.20}/tests/__init__.py +0 -0
  101. {layrz_sdk-3.1.18 → layrz_sdk-3.1.20}/tests/test_lcl.py +0 -0
@@ -1,5 +1,21 @@
1
1
  # Changelog
2
2
 
3
+ ## 3.1.20
4
+
5
+ - Fixed condition of `StrEnum` on Python 3.11, for versions below 3.11 it will use `strenum.StrEnum` instead of `enum.StrEnum`
6
+
7
+ ## 3.1.19
8
+
9
+ - Added serializers for messages
10
+
11
+ ## 3.1.18
12
+
13
+ - Fixes
14
+
15
+ ## 3.1.17
16
+
17
+ - Fixes
18
+
3
19
  ## 3.1.16
4
20
 
5
21
  - Added `primary_id` into `Asset`
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: layrz-sdk
3
- Version: 3.1.18
3
+ Version: 3.1.20
4
4
  Summary: Layrz SDK for Python
5
5
  Author-email: "Golden M, Inc." <software@goldenm.com>
6
6
  Maintainer-email: Kenny Mochizuki <kenny@goldenm.com>, Luis Reyes <lreyes@goldenm.com>, Kasen Li <kli@goldenm.com>
@@ -26,6 +26,7 @@ Requires-Dist: pydantic>=2.10.6
26
26
  Requires-Dist: typing-extensions>=4.10.0
27
27
  Requires-Dist: geopy>=2.4.1
28
28
  Requires-Dist: shapely>=2.1.1
29
+ Requires-Dist: strenum>=0.4.15
29
30
  Dynamic: license-file
30
31
 
31
32
  # Layrz SDK
@@ -1,4 +1,9 @@
1
- from enum import StrEnum
1
+ import sys
2
+
3
+ if sys.version_info >= (3, 11):
4
+ from enum import StrEnum
5
+ else:
6
+ from strenum import StrEnum
2
7
 
3
8
 
4
9
  class ModbusSchema(StrEnum):
@@ -1,4 +1,9 @@
1
- from enum import StrEnum
1
+ import sys
2
+
3
+ if sys.version_info >= (3, 11):
4
+ from enum import StrEnum
5
+ else:
6
+ from strenum import StrEnum
2
7
 
3
8
 
4
9
  class ModbusStatus(StrEnum):
@@ -15,7 +15,7 @@ else:
15
15
  from typing_extensions import Self
16
16
 
17
17
  from geopy.distance import geodesic
18
- from pydantic import BaseModel, Field
18
+ from pydantic import BaseModel, Field, field_serializer
19
19
  from shapely.geometry import MultiPoint
20
20
 
21
21
  from layrz_sdk.constants import UTC
@@ -28,6 +28,14 @@ from layrz_sdk.entities.telemetry.devicemessage import DeviceMessage
28
28
  class AssetMessage(BaseModel):
29
29
  """Asset message model"""
30
30
 
31
+ model_config = {
32
+ 'json_encoders': {
33
+ datetime: lambda v: v.timestamp(),
34
+ timedelta: lambda v: v.total_seconds(),
35
+ Position: lambda v: json.loads(v.model_dump_json(exclude_none=True)),
36
+ }
37
+ }
38
+
31
39
  pk: int | None = Field(
32
40
  default=None,
33
41
  description='Message ID',
@@ -69,11 +77,21 @@ class AssetMessage(BaseModel):
69
77
  description='Timestamp when the message was received',
70
78
  )
71
79
 
80
+ @field_serializer('received_at')
81
+ def serialize_received_at(self: Self, value: datetime) -> float:
82
+ """Serialize received_at to a timestamp."""
83
+ return value.timestamp()
84
+
72
85
  elapsed_time: timedelta = Field(
73
86
  default_factory=lambda: timedelta(seconds=0),
74
87
  description='Elapsed time since the last message',
75
88
  )
76
89
 
90
+ @field_serializer('elapsed_time')
91
+ def serialize_elapsed_time(self: Self, value: timedelta) -> float:
92
+ """Serialize elapsed_time to total seconds."""
93
+ return value.total_seconds()
94
+
77
95
  @property
78
96
  def datum_gis(self: Self) -> int:
79
97
  """Get the GIS datum of the message."""
@@ -15,7 +15,7 @@ if sys.version_info >= (3, 11):
15
15
  else:
16
16
  from typing_extensions import Self
17
17
 
18
- from pydantic import BaseModel, Field
18
+ from pydantic import BaseModel, Field, field_serializer
19
19
 
20
20
  from layrz_sdk.constants import REJECTED_KEYS, UTC
21
21
  from layrz_sdk.entities.device import Device
@@ -59,6 +59,11 @@ class DeviceMessage(BaseModel):
59
59
  description='Timestamp when the message was received',
60
60
  )
61
61
 
62
+ @field_serializer('received_at')
63
+ def serialize_received_at(self: Self, value: datetime) -> float:
64
+ """Serialize received_at to a timestamp."""
65
+ return value.timestamp()
66
+
62
67
  @property
63
68
  def datum_gis(self: Self) -> int:
64
69
  """Get the GIS datum of the message."""
@@ -105,7 +110,7 @@ class DeviceMessage(BaseModel):
105
110
  return cls(
106
111
  ident=device.ident,
107
112
  device_id=device.pk,
108
- protocol_id=device.protocol_id,
113
+ protocol_id=device.protocol_id, # type: ignore
109
114
  position=position,
110
115
  payload=payload,
111
116
  received_at=received_at,
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: layrz-sdk
3
- Version: 3.1.18
3
+ Version: 3.1.20
4
4
  Summary: Layrz SDK for Python
5
5
  Author-email: "Golden M, Inc." <software@goldenm.com>
6
6
  Maintainer-email: Kenny Mochizuki <kenny@goldenm.com>, Luis Reyes <lreyes@goldenm.com>, Kasen Li <kli@goldenm.com>
@@ -26,6 +26,7 @@ Requires-Dist: pydantic>=2.10.6
26
26
  Requires-Dist: typing-extensions>=4.10.0
27
27
  Requires-Dist: geopy>=2.4.1
28
28
  Requires-Dist: shapely>=2.1.1
29
+ Requires-Dist: strenum>=0.4.15
29
30
  Dynamic: license-file
30
31
 
31
32
  # Layrz SDK
@@ -5,3 +5,4 @@ pydantic>=2.10.6
5
5
  typing-extensions>=4.10.0
6
6
  geopy>=2.4.1
7
7
  shapely>=2.1.1
8
+ strenum>=0.4.15
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "layrz-sdk"
3
- version = "3.1.18"
3
+ version = "3.1.20"
4
4
  description = "Layrz SDK for Python"
5
5
  authors = [
6
6
  {name = "Golden M, Inc.", email = "software@goldenm.com"}
@@ -42,6 +42,7 @@ dependencies = [
42
42
  "typing-extensions>=4.10.0",
43
43
  "geopy>=2.4.1",
44
44
  "shapely>=2.1.1",
45
+ "strenum>=0.4.15",
45
46
  ]
46
47
 
47
48
  [project.urls]
@@ -343,13 +343,14 @@ wheels = [
343
343
 
344
344
  [[package]]
345
345
  name = "layrz-sdk"
346
- version = "3.1.18"
346
+ version = "3.1.20"
347
347
  source = { editable = "." }
348
348
  dependencies = [
349
349
  { name = "geopy" },
350
350
  { name = "pydantic" },
351
351
  { name = "requests" },
352
352
  { name = "shapely" },
353
+ { name = "strenum" },
353
354
  { name = "typing-extensions" },
354
355
  { name = "tzdata" },
355
356
  { name = "xlsxwriter" },
@@ -371,6 +372,7 @@ requires-dist = [
371
372
  { name = "pydantic", specifier = ">=2.10.6" },
372
373
  { name = "requests" },
373
374
  { name = "shapely", specifier = ">=2.1.1" },
375
+ { name = "strenum", specifier = ">=0.4.15" },
374
376
  { name = "typing-extensions", specifier = ">=4.10.0" },
375
377
  { name = "tzdata" },
376
378
  { name = "xlsxwriter" },
@@ -943,6 +945,15 @@ wheels = [
943
945
  { url = "https://files.pythonhosted.org/packages/ea/f1/5e9b3ba5c7aa7ebfaf269657e728067d16a7c99401c7973ddf5f0cf121bd/shapely-2.1.1-cp313-cp313t-win_amd64.whl", hash = "sha256:8cb8f17c377260452e9d7720eeaf59082c5f8ea48cf104524d953e5d36d4bdb7", size = 1723061, upload-time = "2025-05-19T11:04:40.082Z" },
944
946
  ]
945
947
 
948
+ [[package]]
949
+ name = "strenum"
950
+ version = "0.4.15"
951
+ source = { registry = "https://pypi.org/simple" }
952
+ sdist = { url = "https://files.pythonhosted.org/packages/85/ad/430fb60d90e1d112a62ff57bdd1f286ec73a2a0331272febfddd21f330e1/StrEnum-0.4.15.tar.gz", hash = "sha256:878fb5ab705442070e4dd1929bb5e2249511c0bcf2b0eeacf3bcd80875c82eff", size = 23384, upload-time = "2023-06-29T22:02:58.399Z" }
953
+ wheels = [
954
+ { url = "https://files.pythonhosted.org/packages/81/69/297302c5f5f59c862faa31e6cb9a4cd74721cd1e052b38e464c5b402df8b/StrEnum-0.4.15-py3-none-any.whl", hash = "sha256:a30cda4af7cc6b5bf52c8055bc4bf4b2b6b14a93b574626da33df53cf7740659", size = 8851, upload-time = "2023-06-29T22:02:56.947Z" },
955
+ ]
956
+
946
957
  [[package]]
947
958
  name = "tomli"
948
959
  version = "2.2.1"
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes