layrz-sdk 4.0.36__py3-none-any.whl → 4.1.0__py3-none-any.whl
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.
- layrz_sdk/decorators/func_timing.py +14 -7
- layrz_sdk/entities/action.py +28 -16
- layrz_sdk/entities/action_geofence_ownership.py +0 -2
- layrz_sdk/entities/action_kind.py +0 -2
- layrz_sdk/entities/action_subkind.py +0 -2
- layrz_sdk/entities/asset.py +15 -9
- layrz_sdk/entities/asset_constants.py +10 -9
- layrz_sdk/entities/asset_contact.py +7 -3
- layrz_sdk/entities/asset_operation_mode.py +0 -2
- layrz_sdk/entities/ats_entry.py +11 -4
- layrz_sdk/entities/ats_exit_history.py +21 -19
- layrz_sdk/entities/ats_operation.py +57 -17
- layrz_sdk/entities/ats_possible_entry.py +9 -4
- layrz_sdk/entities/ats_possible_exit.py +19 -9
- layrz_sdk/entities/ats_purchaseorder.py +45 -12
- layrz_sdk/entities/ats_reception.py +16 -4
- layrz_sdk/entities/broadcast/result.py +21 -2
- layrz_sdk/entities/broadcast/service.py +12 -2
- layrz_sdk/entities/case.py +34 -7
- layrz_sdk/entities/charts/axis_config.py +13 -5
- layrz_sdk/entities/charts/bar_chart.py +12 -1
- layrz_sdk/entities/charts/chart_data_serie.py +17 -1
- layrz_sdk/entities/charts/column_chart.py +12 -1
- layrz_sdk/entities/charts/html_chart.py +8 -4
- layrz_sdk/entities/charts/line_chart.py +12 -3
- layrz_sdk/entities/charts/map_chart.py +14 -5
- layrz_sdk/entities/charts/map_point.py +7 -1
- layrz_sdk/entities/charts/number_chart.py +8 -4
- layrz_sdk/entities/charts/pie_chart.py +11 -3
- layrz_sdk/entities/charts/radar_chart.py +11 -3
- layrz_sdk/entities/charts/radial_bar_chart.py +11 -3
- layrz_sdk/entities/charts/scatter_chart.py +12 -3
- layrz_sdk/entities/charts/scatter_serie.py +11 -1
- layrz_sdk/entities/charts/scatter_serie_item.py +7 -1
- layrz_sdk/entities/charts/table_chart.py +7 -3
- layrz_sdk/entities/charts/table_header.py +7 -1
- layrz_sdk/entities/charts/table_row.py +7 -1
- layrz_sdk/entities/charts/timeline_chart.py +11 -3
- layrz_sdk/entities/charts/timeline_serie.py +7 -1
- layrz_sdk/entities/charts/timeline_serie_item.py +7 -1
- layrz_sdk/entities/checkpoint.py +20 -13
- layrz_sdk/entities/command_series_ticket.py +29 -4
- layrz_sdk/entities/comment.py +15 -4
- layrz_sdk/entities/custom_field.py +12 -4
- layrz_sdk/entities/custom_report_page.py +3 -0
- layrz_sdk/entities/destination_phone.py +7 -1
- layrz_sdk/entities/device.py +11 -4
- layrz_sdk/entities/event.py +20 -4
- layrz_sdk/entities/exchange_service.py +12 -4
- layrz_sdk/entities/function.py +11 -4
- layrz_sdk/entities/geofence.py +12 -4
- layrz_sdk/entities/geofence_category.py +0 -2
- layrz_sdk/entities/last_message.py +7 -3
- layrz_sdk/entities/locator.py +16 -2
- layrz_sdk/entities/message.py +16 -9
- layrz_sdk/entities/modbus/config.py +7 -1
- layrz_sdk/entities/modbus/parameter.py +7 -1
- layrz_sdk/entities/modbus/wait.py +11 -1
- layrz_sdk/entities/notification_type.py +0 -2
- layrz_sdk/entities/operation.py +37 -16
- layrz_sdk/entities/operation_case_payload.py +39 -13
- layrz_sdk/entities/operation_payload.py +13 -51
- layrz_sdk/entities/operation_type.py +0 -2
- layrz_sdk/entities/outbound_service.py +11 -4
- layrz_sdk/entities/platform.py +0 -2
- layrz_sdk/entities/position.py +7 -3
- layrz_sdk/entities/preset.py +15 -9
- layrz_sdk/entities/report.py +7 -3
- layrz_sdk/entities/report_col.py +17 -3
- layrz_sdk/entities/report_configuration.py +7 -1
- layrz_sdk/entities/report_data_type.py +1 -3
- layrz_sdk/entities/report_format.py +1 -5
- layrz_sdk/entities/report_header.py +12 -29
- layrz_sdk/entities/report_page.py +7 -3
- layrz_sdk/entities/report_row.py +7 -19
- layrz_sdk/entities/request_type.py +0 -2
- layrz_sdk/entities/sensor.py +11 -4
- layrz_sdk/entities/sensor_mask.py +7 -3
- layrz_sdk/entities/sound_effect.py +0 -2
- layrz_sdk/entities/static_position.py +6 -1
- layrz_sdk/entities/telemetry/assetmessage.py +14 -15
- layrz_sdk/entities/telemetry/devicemessage.py +17 -8
- layrz_sdk/entities/text_alignment.py +0 -2
- layrz_sdk/entities/timezone.py +12 -4
- layrz_sdk/entities/trigger.py +12 -14
- layrz_sdk/entities/trigger_kind.py +1 -5
- layrz_sdk/entities/user.py +11 -4
- layrz_sdk/entities/waypoint.py +38 -16
- layrz_sdk/entities/weekday.py +1 -3
- layrz_sdk/helpers/color.py +1 -6
- layrz_sdk/lcl/core.py +0 -1
- {layrz_sdk-4.0.36.dist-info → layrz_sdk-4.1.0.dist-info}/METADATA +2 -2
- layrz_sdk-4.1.0.dist-info/RECORD +122 -0
- layrz_sdk-4.0.36.dist-info/RECORD +0 -122
- {layrz_sdk-4.0.36.dist-info → layrz_sdk-4.1.0.dist-info}/WHEEL +0 -0
- {layrz_sdk-4.0.36.dist-info → layrz_sdk-4.1.0.dist-info}/licenses/LICENSE +0 -0
- {layrz_sdk-4.0.36.dist-info → layrz_sdk-4.1.0.dist-info}/top_level.txt +0 -0
|
@@ -1,11 +1,17 @@
|
|
|
1
1
|
from datetime import datetime
|
|
2
2
|
|
|
3
|
-
from pydantic import BaseModel, Field
|
|
3
|
+
from pydantic import BaseModel, ConfigDict, Field
|
|
4
4
|
|
|
5
5
|
|
|
6
6
|
class TimelineSerieItem(BaseModel):
|
|
7
7
|
"""Chart Data Serie Item for Timeline Charts"""
|
|
8
8
|
|
|
9
|
+
model_config = ConfigDict(
|
|
10
|
+
validate_by_name=False,
|
|
11
|
+
validate_by_alias=True,
|
|
12
|
+
serialize_by_alias=True,
|
|
13
|
+
)
|
|
14
|
+
|
|
9
15
|
name: str = Field(description='Name of the item')
|
|
10
16
|
start_at: datetime = Field(description='Start date of the item')
|
|
11
17
|
end_at: datetime = Field(description='End date of the item')
|
layrz_sdk/entities/checkpoint.py
CHANGED
|
@@ -1,9 +1,7 @@
|
|
|
1
|
-
"""Checkpoints entitites"""
|
|
2
|
-
|
|
3
1
|
from datetime import datetime
|
|
4
2
|
from enum import StrEnum
|
|
5
3
|
|
|
6
|
-
from pydantic import BaseModel, Field
|
|
4
|
+
from pydantic import BaseModel, ConfigDict, Field, field_serializer
|
|
7
5
|
|
|
8
6
|
from .waypoint import Waypoint, WaypointRef
|
|
9
7
|
|
|
@@ -21,27 +19,36 @@ class CheckpointOperationMode(StrEnum):
|
|
|
21
19
|
class Checkpoint(BaseModel):
|
|
22
20
|
"""Checkpoint entity definition"""
|
|
23
21
|
|
|
24
|
-
model_config =
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
22
|
+
model_config = ConfigDict(
|
|
23
|
+
validate_by_name=False,
|
|
24
|
+
validate_by_alias=True,
|
|
25
|
+
serialize_by_alias=True,
|
|
26
|
+
)
|
|
29
27
|
|
|
30
28
|
pk: int = Field(description='Checkpoint ID')
|
|
31
29
|
asset_id: int = Field(description='Asset ID')
|
|
32
30
|
waypoints: list[Waypoint] = Field(description='List of waypoints', default_factory=list)
|
|
33
31
|
start_at: datetime = Field(description='Checkpoint start date')
|
|
32
|
+
|
|
33
|
+
@field_serializer('start_at', when_used='always')
|
|
34
|
+
def serialize_start_at(self, start_at: datetime) -> float:
|
|
35
|
+
return start_at.timestamp()
|
|
36
|
+
|
|
34
37
|
end_at: datetime = Field(description='Checkpoint end date')
|
|
35
38
|
|
|
39
|
+
@field_serializer('end_at', when_used='always')
|
|
40
|
+
def serialize_end_at(self, end_at: datetime) -> float:
|
|
41
|
+
return end_at.timestamp()
|
|
42
|
+
|
|
36
43
|
|
|
37
44
|
class CheckpointRef(BaseModel):
|
|
38
45
|
"""Checkpoint reference entity definition"""
|
|
39
46
|
|
|
40
|
-
model_config =
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
47
|
+
model_config = ConfigDict(
|
|
48
|
+
validate_by_name=False,
|
|
49
|
+
validate_by_alias=True,
|
|
50
|
+
serialize_by_alias=True,
|
|
51
|
+
)
|
|
45
52
|
|
|
46
53
|
pk: int = Field(description='Checkpoint ID', alias='id')
|
|
47
54
|
name: str = Field(description='Checkpoint name')
|
|
@@ -1,10 +1,8 @@
|
|
|
1
|
-
"""Command Series Ticket entity"""
|
|
2
|
-
|
|
3
1
|
from datetime import datetime
|
|
4
2
|
from enum import StrEnum
|
|
5
3
|
from typing import Any
|
|
6
4
|
|
|
7
|
-
from pydantic import BaseModel, Field
|
|
5
|
+
from pydantic import BaseModel, ConfigDict, Field, field_serializer
|
|
8
6
|
|
|
9
7
|
from layrz_sdk.constants import UTC
|
|
10
8
|
from layrz_sdk.entities.action import Action
|
|
@@ -27,17 +25,35 @@ class CommandSeriesTicketStatus(StrEnum):
|
|
|
27
25
|
class CommandSeriesTicket(BaseModel):
|
|
28
26
|
"""Command Series Ticket definition"""
|
|
29
27
|
|
|
30
|
-
|
|
28
|
+
model_config = ConfigDict(
|
|
29
|
+
validate_by_name=False,
|
|
30
|
+
validate_by_alias=True,
|
|
31
|
+
serialize_by_alias=True,
|
|
32
|
+
)
|
|
33
|
+
|
|
34
|
+
pk: int = Field(
|
|
35
|
+
...,
|
|
36
|
+
description='ID',
|
|
37
|
+
alias='id',
|
|
38
|
+
)
|
|
31
39
|
service_id: int = Field(..., description='Service ID')
|
|
32
40
|
status: CommandSeriesTicketStatus = Field(
|
|
33
41
|
default=CommandSeriesTicketStatus.IN_SERVICE,
|
|
34
42
|
description='Ticket status',
|
|
35
43
|
)
|
|
36
44
|
|
|
45
|
+
@field_serializer('status', when_used='always')
|
|
46
|
+
def serialize_status(self, status: CommandSeriesTicketStatus) -> str:
|
|
47
|
+
return status.value
|
|
48
|
+
|
|
37
49
|
ticket_id: str = Field(..., description='Ticket ID')
|
|
38
50
|
ticket_code: str = Field(..., description='Ticket code')
|
|
39
51
|
ticket_at: datetime = Field(..., description='Ticket creation date')
|
|
40
52
|
|
|
53
|
+
@field_serializer('ticket_at', when_used='always')
|
|
54
|
+
def serialize_ticket_at(self, ticket_at: datetime) -> float:
|
|
55
|
+
return ticket_at.timestamp()
|
|
56
|
+
|
|
41
57
|
source_id: int | None = Field(default=None, description='Source geofence ID')
|
|
42
58
|
source: Geofence | None = Field(default=None, description='Source geofence')
|
|
43
59
|
|
|
@@ -60,7 +76,16 @@ class CommandSeriesTicket(BaseModel):
|
|
|
60
76
|
default_factory=lambda: datetime.now(UTC),
|
|
61
77
|
description='Creation date',
|
|
62
78
|
)
|
|
79
|
+
|
|
80
|
+
@field_serializer('created_at', when_used='always')
|
|
81
|
+
def serialize_created_at(self, created_at: datetime) -> float:
|
|
82
|
+
return created_at.timestamp()
|
|
83
|
+
|
|
63
84
|
updated_at: datetime = Field(
|
|
64
85
|
default_factory=lambda: datetime.now(UTC),
|
|
65
86
|
description='Last update date',
|
|
66
87
|
)
|
|
88
|
+
|
|
89
|
+
@field_serializer('updated_at', when_used='always')
|
|
90
|
+
def serialize_updated_at(self, updated_at: datetime) -> float:
|
|
91
|
+
return updated_at.timestamp()
|
layrz_sdk/entities/comment.py
CHANGED
|
@@ -1,9 +1,7 @@
|
|
|
1
|
-
"""Comment entity"""
|
|
2
|
-
|
|
3
1
|
from datetime import datetime
|
|
4
2
|
from typing import Any
|
|
5
3
|
|
|
6
|
-
from pydantic import BaseModel, Field
|
|
4
|
+
from pydantic import BaseModel, ConfigDict, Field, field_serializer
|
|
7
5
|
|
|
8
6
|
from .user import User
|
|
9
7
|
|
|
@@ -11,11 +9,24 @@ from .user import User
|
|
|
11
9
|
class Comment(BaseModel):
|
|
12
10
|
"""Comment entity"""
|
|
13
11
|
|
|
14
|
-
|
|
12
|
+
model_config = ConfigDict(
|
|
13
|
+
validate_by_name=False,
|
|
14
|
+
validate_by_alias=True,
|
|
15
|
+
serialize_by_alias=True,
|
|
16
|
+
)
|
|
17
|
+
|
|
18
|
+
pk: int = Field(
|
|
19
|
+
description='Comment ID',
|
|
20
|
+
alias='id',
|
|
21
|
+
)
|
|
15
22
|
content: str = Field(description='Comment content')
|
|
16
23
|
user: User | None = Field(description='Operator/User what commented the case. None if system generated')
|
|
17
24
|
submitted_at: datetime = Field(description='Date of comment submission')
|
|
18
25
|
|
|
26
|
+
@field_serializer('submitted_at', when_used='always')
|
|
27
|
+
def serialize_submitted_at(self, submitted_at: datetime) -> float:
|
|
28
|
+
return submitted_at.timestamp()
|
|
29
|
+
|
|
19
30
|
metadata: dict[str, Any] = Field(
|
|
20
31
|
default_factory=dict,
|
|
21
32
|
description='Additional metadata associated with the comment',
|
|
@@ -1,12 +1,20 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
from pydantic import BaseModel, Field
|
|
1
|
+
from pydantic import BaseModel, ConfigDict, Field
|
|
4
2
|
|
|
5
3
|
|
|
6
4
|
class CustomField(BaseModel):
|
|
7
5
|
"""Custom field definition"""
|
|
8
6
|
|
|
9
|
-
|
|
7
|
+
model_config = ConfigDict(
|
|
8
|
+
validate_by_name=False,
|
|
9
|
+
validate_by_alias=True,
|
|
10
|
+
serialize_by_alias=True,
|
|
11
|
+
)
|
|
12
|
+
|
|
13
|
+
pk: int | None = Field(
|
|
14
|
+
default=None,
|
|
15
|
+
description='Primary key of the custom field',
|
|
16
|
+
alias='id',
|
|
17
|
+
)
|
|
10
18
|
name: str = Field(description='Defines the name of the custom field')
|
|
11
19
|
value: str = Field(description='Defines the value of the custom field')
|
|
12
20
|
is_fixed: bool = Field(default=False, description='Defines if the custom field is fixed or not')
|
|
@@ -1,11 +1,17 @@
|
|
|
1
1
|
from typing import Self
|
|
2
2
|
|
|
3
|
-
from pydantic import BaseModel, Field
|
|
3
|
+
from pydantic import BaseModel, ConfigDict, Field
|
|
4
4
|
|
|
5
5
|
|
|
6
6
|
class DestinationPhone(BaseModel):
|
|
7
7
|
"""Destination Phone"""
|
|
8
8
|
|
|
9
|
+
model_config = ConfigDict(
|
|
10
|
+
validate_by_name=False,
|
|
11
|
+
validate_by_alias=True,
|
|
12
|
+
serialize_by_alias=True,
|
|
13
|
+
)
|
|
14
|
+
|
|
9
15
|
phone_number: str = Field(
|
|
10
16
|
...,
|
|
11
17
|
description='Defines the phone number for Twilio notifications',
|
layrz_sdk/entities/device.py
CHANGED
|
@@ -1,8 +1,6 @@
|
|
|
1
|
-
"""Device entitiy"""
|
|
2
|
-
|
|
3
1
|
from typing import Any
|
|
4
2
|
|
|
5
|
-
from pydantic import BaseModel, Field, field_validator
|
|
3
|
+
from pydantic import BaseModel, ConfigDict, Field, field_validator
|
|
6
4
|
|
|
7
5
|
from .modbus import ModbusConfig
|
|
8
6
|
|
|
@@ -10,7 +8,16 @@ from .modbus import ModbusConfig
|
|
|
10
8
|
class Device(BaseModel):
|
|
11
9
|
"""Device entity"""
|
|
12
10
|
|
|
13
|
-
|
|
11
|
+
model_config = ConfigDict(
|
|
12
|
+
validate_by_name=False,
|
|
13
|
+
validate_by_alias=True,
|
|
14
|
+
serialize_by_alias=True,
|
|
15
|
+
)
|
|
16
|
+
|
|
17
|
+
pk: int = Field(
|
|
18
|
+
description='Defines the primary key of the device',
|
|
19
|
+
alias='id',
|
|
20
|
+
)
|
|
14
21
|
name: str = Field(description='Defines the name of the device')
|
|
15
22
|
ident: str = Field(description='Defines the identifier of the device')
|
|
16
23
|
protocol_id: int | None = Field(
|
layrz_sdk/entities/event.py
CHANGED
|
@@ -1,8 +1,6 @@
|
|
|
1
|
-
"""Event entity"""
|
|
2
|
-
|
|
3
1
|
from datetime import datetime
|
|
4
2
|
|
|
5
|
-
from pydantic import BaseModel, Field
|
|
3
|
+
from pydantic import BaseModel, ConfigDict, Field, field_serializer
|
|
6
4
|
|
|
7
5
|
from .geofence import Geofence
|
|
8
6
|
from .message import Message
|
|
@@ -13,10 +11,28 @@ from .trigger import Trigger
|
|
|
13
11
|
class Event(BaseModel):
|
|
14
12
|
"""Event entity definition"""
|
|
15
13
|
|
|
16
|
-
|
|
14
|
+
model_config = ConfigDict(
|
|
15
|
+
validate_by_name=False,
|
|
16
|
+
validate_by_alias=True,
|
|
17
|
+
serialize_by_alias=True,
|
|
18
|
+
)
|
|
19
|
+
|
|
20
|
+
pk: int = Field(
|
|
21
|
+
description='Event ID',
|
|
22
|
+
alias='id',
|
|
23
|
+
)
|
|
17
24
|
trigger: Trigger = Field(description='Event trigger')
|
|
18
25
|
asset_id: int = Field(description='Asset ID')
|
|
19
26
|
message: Message = Field(description='Message')
|
|
20
27
|
activated_at: datetime = Field(description='Event activation date')
|
|
28
|
+
|
|
29
|
+
@field_serializer('activated_at', when_used='always')
|
|
30
|
+
def serialize_activated_at(self, activated_at: datetime) -> float:
|
|
31
|
+
return activated_at.timestamp()
|
|
32
|
+
|
|
21
33
|
geofence: Geofence | None = Field(default=None, description='Geofence object')
|
|
22
34
|
presence_type: PresenceType | None = Field(default=None, description='Presence type object')
|
|
35
|
+
|
|
36
|
+
@field_serializer('presence_type', when_used='always')
|
|
37
|
+
def serialize_presence_type(self, presence_type: PresenceType | None) -> str | None:
|
|
38
|
+
return presence_type.value if presence_type else None
|
|
@@ -1,14 +1,22 @@
|
|
|
1
|
-
"""Exchange Service entity"""
|
|
2
|
-
|
|
3
1
|
from typing import Any
|
|
4
2
|
|
|
5
|
-
from pydantic import BaseModel, Field
|
|
3
|
+
from pydantic import BaseModel, ConfigDict, Field
|
|
6
4
|
|
|
7
5
|
|
|
8
6
|
class ExchangeService(BaseModel):
|
|
9
7
|
"""Exchange service definition"""
|
|
10
8
|
|
|
11
|
-
|
|
9
|
+
model_config = ConfigDict(
|
|
10
|
+
validate_by_name=False,
|
|
11
|
+
validate_by_alias=True,
|
|
12
|
+
serialize_by_alias=True,
|
|
13
|
+
)
|
|
14
|
+
|
|
15
|
+
pk: int = Field(
|
|
16
|
+
...,
|
|
17
|
+
description='Service ID',
|
|
18
|
+
alias='id',
|
|
19
|
+
)
|
|
12
20
|
name: str = Field(..., description='Service name')
|
|
13
21
|
credentials: dict[str, Any] = Field(
|
|
14
22
|
description='Service credentials',
|
layrz_sdk/entities/function.py
CHANGED
|
@@ -1,9 +1,7 @@
|
|
|
1
|
-
"""Geofence entity"""
|
|
2
|
-
|
|
3
1
|
from datetime import timedelta
|
|
4
2
|
from typing import Any
|
|
5
3
|
|
|
6
|
-
from pydantic import BaseModel, Field
|
|
4
|
+
from pydantic import BaseModel, ConfigDict, Field
|
|
7
5
|
|
|
8
6
|
from .asset import Asset
|
|
9
7
|
|
|
@@ -11,7 +9,16 @@ from .asset import Asset
|
|
|
11
9
|
class Function(BaseModel):
|
|
12
10
|
"""Function entity"""
|
|
13
11
|
|
|
14
|
-
|
|
12
|
+
model_config = ConfigDict(
|
|
13
|
+
validate_by_name=False,
|
|
14
|
+
validate_by_alias=True,
|
|
15
|
+
serialize_by_alias=True,
|
|
16
|
+
)
|
|
17
|
+
|
|
18
|
+
pk: int = Field(
|
|
19
|
+
description='Defines the primary key of the Function',
|
|
20
|
+
alias='id',
|
|
21
|
+
)
|
|
15
22
|
name: str = Field(description='Name of the function')
|
|
16
23
|
|
|
17
24
|
maximum_time: timedelta | None = Field(
|
layrz_sdk/entities/geofence.py
CHANGED
|
@@ -1,14 +1,22 @@
|
|
|
1
|
-
"""Geofence entity"""
|
|
2
|
-
|
|
3
1
|
from typing import Any
|
|
4
2
|
|
|
5
|
-
from pydantic import BaseModel, Field
|
|
3
|
+
from pydantic import BaseModel, ConfigDict, Field
|
|
6
4
|
|
|
7
5
|
|
|
8
6
|
class Geofence(BaseModel):
|
|
9
7
|
"""Geofence entity"""
|
|
10
8
|
|
|
11
|
-
|
|
9
|
+
model_config = ConfigDict(
|
|
10
|
+
validate_by_name=False,
|
|
11
|
+
validate_by_alias=True,
|
|
12
|
+
serialize_by_alias=True,
|
|
13
|
+
)
|
|
14
|
+
|
|
15
|
+
pk: int = Field(
|
|
16
|
+
...,
|
|
17
|
+
description='Defines the primary key of the geofence',
|
|
18
|
+
alias='id',
|
|
19
|
+
)
|
|
12
20
|
name: str = Field(..., description='Defines the name of the geofence')
|
|
13
21
|
color: str = Field(..., description='Defines the color of the geofence')
|
|
14
22
|
|
|
@@ -1,6 +1,4 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
from pydantic import BaseModel, Field
|
|
1
|
+
from pydantic import BaseModel, ConfigDict, Field
|
|
4
2
|
|
|
5
3
|
from .asset import Asset
|
|
6
4
|
from .message import Message
|
|
@@ -9,4 +7,10 @@ from .message import Message
|
|
|
9
7
|
class LastMessage(Message, BaseModel):
|
|
10
8
|
"""LastMessage definition"""
|
|
11
9
|
|
|
10
|
+
model_config = ConfigDict(
|
|
11
|
+
validate_by_name=False,
|
|
12
|
+
validate_by_alias=True,
|
|
13
|
+
serialize_by_alias=True,
|
|
14
|
+
)
|
|
15
|
+
|
|
12
16
|
asset: Asset = Field(description='Defines the asset of the last message')
|
layrz_sdk/entities/locator.py
CHANGED
|
@@ -2,7 +2,7 @@ from datetime import datetime
|
|
|
2
2
|
from typing import Any
|
|
3
3
|
from uuid import UUID
|
|
4
4
|
|
|
5
|
-
from pydantic import BaseModel, Field, field_serializer, field_validator
|
|
5
|
+
from pydantic import BaseModel, ConfigDict, Field, field_serializer, field_validator
|
|
6
6
|
|
|
7
7
|
from .asset import Asset
|
|
8
8
|
from .geofence import Geofence
|
|
@@ -10,6 +10,11 @@ from .trigger import Trigger
|
|
|
10
10
|
|
|
11
11
|
|
|
12
12
|
class LocatorMqttConfig(BaseModel):
|
|
13
|
+
model_config = ConfigDict(
|
|
14
|
+
validate_by_name=False,
|
|
15
|
+
validate_by_alias=True,
|
|
16
|
+
serialize_by_alias=True,
|
|
17
|
+
)
|
|
13
18
|
host: str = Field(..., description='Defines the MQTT host of the locator')
|
|
14
19
|
port: int = Field(..., description='Defines the MQTT port of the locator')
|
|
15
20
|
username: str | None = Field(default=None, description='Defines the MQTT username of the locator')
|
|
@@ -18,7 +23,16 @@ class LocatorMqttConfig(BaseModel):
|
|
|
18
23
|
|
|
19
24
|
|
|
20
25
|
class Locator(BaseModel):
|
|
21
|
-
|
|
26
|
+
model_config = ConfigDict(
|
|
27
|
+
validate_by_name=False,
|
|
28
|
+
validate_by_alias=True,
|
|
29
|
+
serialize_by_alias=True,
|
|
30
|
+
)
|
|
31
|
+
pk: str = Field(
|
|
32
|
+
...,
|
|
33
|
+
description='Defines the primary key of the locator',
|
|
34
|
+
alias='id',
|
|
35
|
+
)
|
|
22
36
|
|
|
23
37
|
@field_validator('pk', mode='before')
|
|
24
38
|
def validate_pk(cls, v: Any) -> str:
|
layrz_sdk/entities/message.py
CHANGED
|
@@ -1,9 +1,7 @@
|
|
|
1
|
-
"""Message entity"""
|
|
2
|
-
|
|
3
1
|
from datetime import datetime
|
|
4
2
|
from typing import Any
|
|
5
3
|
|
|
6
|
-
from pydantic import BaseModel, Field, field_validator
|
|
4
|
+
from pydantic import BaseModel, ConfigDict, Field, field_serializer, field_validator
|
|
7
5
|
|
|
8
6
|
from layrz_sdk.constants import UTC
|
|
9
7
|
from layrz_sdk.entities.geofence import Geofence
|
|
@@ -13,13 +11,17 @@ from layrz_sdk.entities.position import Position
|
|
|
13
11
|
class Message(BaseModel):
|
|
14
12
|
"""Message definition"""
|
|
15
13
|
|
|
16
|
-
model_config =
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
14
|
+
model_config = ConfigDict(
|
|
15
|
+
validate_by_name=False,
|
|
16
|
+
validate_by_alias=True,
|
|
17
|
+
serialize_by_alias=True,
|
|
18
|
+
)
|
|
21
19
|
|
|
22
|
-
pk: int = Field(
|
|
20
|
+
pk: int = Field(
|
|
21
|
+
...,
|
|
22
|
+
description='Message ID',
|
|
23
|
+
alias='id',
|
|
24
|
+
)
|
|
23
25
|
asset_id: int = Field(..., description='Asset ID')
|
|
24
26
|
position: Position = Field(
|
|
25
27
|
default_factory=lambda: Position(),
|
|
@@ -38,6 +40,11 @@ class Message(BaseModel):
|
|
|
38
40
|
description='Timestamp when the message was received',
|
|
39
41
|
)
|
|
40
42
|
|
|
43
|
+
@field_serializer('received_at', when_used='always')
|
|
44
|
+
def serialize_received_at(self, value: datetime) -> float:
|
|
45
|
+
"""Serialize received_at to a timestamp."""
|
|
46
|
+
return value.timestamp()
|
|
47
|
+
|
|
41
48
|
geofences: list[Geofence] = Field(
|
|
42
49
|
default_factory=list,
|
|
43
50
|
description='List of geofences associated with the message',
|
|
@@ -1,9 +1,15 @@
|
|
|
1
|
-
from pydantic import BaseModel, Field
|
|
1
|
+
from pydantic import BaseModel, ConfigDict, Field
|
|
2
2
|
|
|
3
3
|
from .parameter import ModbusParameter
|
|
4
4
|
|
|
5
5
|
|
|
6
6
|
class ModbusConfig(BaseModel):
|
|
7
|
+
model_config = ConfigDict(
|
|
8
|
+
validate_by_name=False,
|
|
9
|
+
validate_by_alias=True,
|
|
10
|
+
serialize_by_alias=True,
|
|
11
|
+
)
|
|
12
|
+
|
|
7
13
|
port_id: str = Field(
|
|
8
14
|
...,
|
|
9
15
|
description='Port ID for Modbus communication',
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
from typing import Any
|
|
2
2
|
|
|
3
|
-
from pydantic import BaseModel, Field, field_validator
|
|
3
|
+
from pydantic import BaseModel, ConfigDict, Field, field_validator
|
|
4
4
|
|
|
5
5
|
from .schema import ModbusSchema
|
|
6
6
|
|
|
@@ -8,6 +8,12 @@ from .schema import ModbusSchema
|
|
|
8
8
|
class ModbusParameter(BaseModel):
|
|
9
9
|
"""Modbus parameter model"""
|
|
10
10
|
|
|
11
|
+
model_config = ConfigDict(
|
|
12
|
+
validate_by_name=False,
|
|
13
|
+
validate_by_alias=True,
|
|
14
|
+
serialize_by_alias=True,
|
|
15
|
+
)
|
|
16
|
+
|
|
11
17
|
schema_: ModbusSchema = Field(
|
|
12
18
|
...,
|
|
13
19
|
description='Modbus schema',
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
from typing import Any
|
|
2
2
|
|
|
3
|
-
from pydantic import BaseModel, Field, field_validator
|
|
3
|
+
from pydantic import BaseModel, ConfigDict, Field, field_serializer, field_validator
|
|
4
4
|
|
|
5
5
|
from .schema import ModbusSchema
|
|
6
6
|
from .status import ModbusStatus
|
|
@@ -9,11 +9,21 @@ from .status import ModbusStatus
|
|
|
9
9
|
class ModbusWait(BaseModel):
|
|
10
10
|
"""Modbus parameter model"""
|
|
11
11
|
|
|
12
|
+
model_config = ConfigDict(
|
|
13
|
+
validate_by_name=False,
|
|
14
|
+
validate_by_alias=True,
|
|
15
|
+
serialize_by_alias=True,
|
|
16
|
+
)
|
|
17
|
+
|
|
12
18
|
status: ModbusStatus = Field(
|
|
13
19
|
...,
|
|
14
20
|
description='Status of the Modbus command',
|
|
15
21
|
)
|
|
16
22
|
|
|
23
|
+
@field_serializer('status', when_used='always')
|
|
24
|
+
def serialize_status(self, status: ModbusStatus) -> str:
|
|
25
|
+
return status.value
|
|
26
|
+
|
|
17
27
|
structure: ModbusSchema = Field(
|
|
18
28
|
...,
|
|
19
29
|
description='Modbus structure schema',
|