layrz-sdk 4.0.30__tar.gz → 4.0.31__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.
- {layrz_sdk-4.0.30 → layrz_sdk-4.0.31}/CHANGELOG.md +5 -0
- {layrz_sdk-4.0.30/layrz_sdk.egg-info → layrz_sdk-4.0.31}/PKG-INFO +1 -1
- {layrz_sdk-4.0.30 → layrz_sdk-4.0.31}/layrz_sdk/entities/operation_payload.py +84 -21
- {layrz_sdk-4.0.30 → layrz_sdk-4.0.31/layrz_sdk.egg-info}/PKG-INFO +1 -1
- {layrz_sdk-4.0.30 → layrz_sdk-4.0.31}/pyproject.toml +1 -1
- {layrz_sdk-4.0.30 → layrz_sdk-4.0.31}/uv.lock +1 -1
- {layrz_sdk-4.0.30 → layrz_sdk-4.0.31}/.github/workflows/checks.yml +0 -0
- {layrz_sdk-4.0.30 → layrz_sdk-4.0.31}/.github/workflows/deploy.yml +0 -0
- {layrz_sdk-4.0.30 → layrz_sdk-4.0.31}/.gitignore +0 -0
- {layrz_sdk-4.0.30 → layrz_sdk-4.0.31}/.vscode/extensions.json +0 -0
- {layrz_sdk-4.0.30 → layrz_sdk-4.0.31}/CODE_OF_CONDUCT.md +0 -0
- {layrz_sdk-4.0.30 → layrz_sdk-4.0.31}/CONTRIBUTING.md +0 -0
- {layrz_sdk-4.0.30 → layrz_sdk-4.0.31}/LICENSE +0 -0
- {layrz_sdk-4.0.30 → layrz_sdk-4.0.31}/README.md +0 -0
- {layrz_sdk-4.0.30 → layrz_sdk-4.0.31}/layrz_sdk/__init__.py +0 -0
- {layrz_sdk-4.0.30 → layrz_sdk-4.0.31}/layrz_sdk/constants.py +0 -0
- {layrz_sdk-4.0.30 → layrz_sdk-4.0.31}/layrz_sdk/decorators/__init__.py +0 -0
- {layrz_sdk-4.0.30 → layrz_sdk-4.0.31}/layrz_sdk/decorators/func_timing.py +0 -0
- {layrz_sdk-4.0.30 → layrz_sdk-4.0.31}/layrz_sdk/entities/__init__.py +0 -0
- {layrz_sdk-4.0.30 → layrz_sdk-4.0.31}/layrz_sdk/entities/action.py +0 -0
- {layrz_sdk-4.0.30 → layrz_sdk-4.0.31}/layrz_sdk/entities/action_geofence_ownership.py +0 -0
- {layrz_sdk-4.0.30 → layrz_sdk-4.0.31}/layrz_sdk/entities/action_kind.py +0 -0
- {layrz_sdk-4.0.30 → layrz_sdk-4.0.31}/layrz_sdk/entities/action_subkind.py +0 -0
- {layrz_sdk-4.0.30 → layrz_sdk-4.0.31}/layrz_sdk/entities/asset.py +0 -0
- {layrz_sdk-4.0.30 → layrz_sdk-4.0.31}/layrz_sdk/entities/asset_constants.py +0 -0
- {layrz_sdk-4.0.30 → layrz_sdk-4.0.31}/layrz_sdk/entities/asset_contact.py +0 -0
- {layrz_sdk-4.0.30 → layrz_sdk-4.0.31}/layrz_sdk/entities/asset_operation_mode.py +0 -0
- {layrz_sdk-4.0.30 → layrz_sdk-4.0.31}/layrz_sdk/entities/ats_entry.py +0 -0
- {layrz_sdk-4.0.30 → layrz_sdk-4.0.31}/layrz_sdk/entities/ats_exit_history.py +0 -0
- {layrz_sdk-4.0.30 → layrz_sdk-4.0.31}/layrz_sdk/entities/ats_operation.py +0 -0
- {layrz_sdk-4.0.30 → layrz_sdk-4.0.31}/layrz_sdk/entities/ats_possible_entry.py +0 -0
- {layrz_sdk-4.0.30 → layrz_sdk-4.0.31}/layrz_sdk/entities/ats_possible_exit.py +0 -0
- {layrz_sdk-4.0.30 → layrz_sdk-4.0.31}/layrz_sdk/entities/ats_purchaseorder.py +0 -0
- {layrz_sdk-4.0.30 → layrz_sdk-4.0.31}/layrz_sdk/entities/ats_reception.py +0 -0
- {layrz_sdk-4.0.30 → layrz_sdk-4.0.31}/layrz_sdk/entities/broadcast/__init__.py +0 -0
- {layrz_sdk-4.0.30 → layrz_sdk-4.0.31}/layrz_sdk/entities/broadcast/payload.py +0 -0
- {layrz_sdk-4.0.30 → layrz_sdk-4.0.31}/layrz_sdk/entities/broadcast/request.py +0 -0
- {layrz_sdk-4.0.30 → layrz_sdk-4.0.31}/layrz_sdk/entities/broadcast/response.py +0 -0
- {layrz_sdk-4.0.30 → layrz_sdk-4.0.31}/layrz_sdk/entities/broadcast/result.py +0 -0
- {layrz_sdk-4.0.30 → layrz_sdk-4.0.31}/layrz_sdk/entities/broadcast/service.py +0 -0
- {layrz_sdk-4.0.30 → layrz_sdk-4.0.31}/layrz_sdk/entities/broadcast/status.py +0 -0
- {layrz_sdk-4.0.30 → layrz_sdk-4.0.31}/layrz_sdk/entities/case.py +0 -0
- {layrz_sdk-4.0.30 → layrz_sdk-4.0.31}/layrz_sdk/entities/case_ignored_status.py +0 -0
- {layrz_sdk-4.0.30 → layrz_sdk-4.0.31}/layrz_sdk/entities/case_status.py +0 -0
- {layrz_sdk-4.0.30 → layrz_sdk-4.0.31}/layrz_sdk/entities/charts/axis_config.py +0 -0
- {layrz_sdk-4.0.30 → layrz_sdk-4.0.31}/layrz_sdk/entities/charts/bar_chart.py +0 -0
- {layrz_sdk-4.0.30 → layrz_sdk-4.0.31}/layrz_sdk/entities/charts/chart_alignment.py +0 -0
- {layrz_sdk-4.0.30 → layrz_sdk-4.0.31}/layrz_sdk/entities/charts/chart_color.py +0 -0
- {layrz_sdk-4.0.30 → layrz_sdk-4.0.31}/layrz_sdk/entities/charts/chart_configuration.py +0 -0
- {layrz_sdk-4.0.30 → layrz_sdk-4.0.31}/layrz_sdk/entities/charts/chart_data_serie.py +0 -0
- {layrz_sdk-4.0.30 → layrz_sdk-4.0.31}/layrz_sdk/entities/charts/chart_data_serie_type.py +0 -0
- {layrz_sdk-4.0.30 → layrz_sdk-4.0.31}/layrz_sdk/entities/charts/chart_data_type.py +0 -0
- {layrz_sdk-4.0.30 → layrz_sdk-4.0.31}/layrz_sdk/entities/charts/chart_render_technology.py +0 -0
- {layrz_sdk-4.0.30 → layrz_sdk-4.0.31}/layrz_sdk/entities/charts/column_chart.py +0 -0
- {layrz_sdk-4.0.30 → layrz_sdk-4.0.31}/layrz_sdk/entities/charts/html_chart.py +0 -0
- {layrz_sdk-4.0.30 → layrz_sdk-4.0.31}/layrz_sdk/entities/charts/line_chart.py +0 -0
- {layrz_sdk-4.0.30 → layrz_sdk-4.0.31}/layrz_sdk/entities/charts/map_center_type.py +0 -0
- {layrz_sdk-4.0.30 → layrz_sdk-4.0.31}/layrz_sdk/entities/charts/map_chart.py +0 -0
- {layrz_sdk-4.0.30 → layrz_sdk-4.0.31}/layrz_sdk/entities/charts/map_point.py +0 -0
- {layrz_sdk-4.0.30 → layrz_sdk-4.0.31}/layrz_sdk/entities/charts/number_chart.py +0 -0
- {layrz_sdk-4.0.30 → layrz_sdk-4.0.31}/layrz_sdk/entities/charts/pie_chart.py +0 -0
- {layrz_sdk-4.0.30 → layrz_sdk-4.0.31}/layrz_sdk/entities/charts/radar_chart.py +0 -0
- {layrz_sdk-4.0.30 → layrz_sdk-4.0.31}/layrz_sdk/entities/charts/radial_bar_chart.py +0 -0
- {layrz_sdk-4.0.30 → layrz_sdk-4.0.31}/layrz_sdk/entities/charts/scatter_chart.py +0 -0
- {layrz_sdk-4.0.30 → layrz_sdk-4.0.31}/layrz_sdk/entities/charts/scatter_serie.py +0 -0
- {layrz_sdk-4.0.30 → layrz_sdk-4.0.31}/layrz_sdk/entities/charts/scatter_serie_item.py +0 -0
- {layrz_sdk-4.0.30 → layrz_sdk-4.0.31}/layrz_sdk/entities/charts/table_chart.py +0 -0
- {layrz_sdk-4.0.30 → layrz_sdk-4.0.31}/layrz_sdk/entities/charts/table_header.py +0 -0
- {layrz_sdk-4.0.30 → layrz_sdk-4.0.31}/layrz_sdk/entities/charts/table_row.py +0 -0
- {layrz_sdk-4.0.30 → layrz_sdk-4.0.31}/layrz_sdk/entities/charts/timeline_chart.py +0 -0
- {layrz_sdk-4.0.30 → layrz_sdk-4.0.31}/layrz_sdk/entities/charts/timeline_serie.py +0 -0
- {layrz_sdk-4.0.30 → layrz_sdk-4.0.31}/layrz_sdk/entities/charts/timeline_serie_item.py +0 -0
- {layrz_sdk-4.0.30 → layrz_sdk-4.0.31}/layrz_sdk/entities/checkpoint.py +0 -0
- {layrz_sdk-4.0.30 → layrz_sdk-4.0.31}/layrz_sdk/entities/command_series_ticket.py +0 -0
- {layrz_sdk-4.0.30 → layrz_sdk-4.0.31}/layrz_sdk/entities/comment.py +0 -0
- {layrz_sdk-4.0.30 → layrz_sdk-4.0.31}/layrz_sdk/entities/custom_field.py +0 -0
- {layrz_sdk-4.0.30 → layrz_sdk-4.0.31}/layrz_sdk/entities/custom_report_page.py +0 -0
- {layrz_sdk-4.0.30 → layrz_sdk-4.0.31}/layrz_sdk/entities/destination_phone.py +0 -0
- {layrz_sdk-4.0.30 → layrz_sdk-4.0.31}/layrz_sdk/entities/device.py +0 -0
- {layrz_sdk-4.0.30 → layrz_sdk-4.0.31}/layrz_sdk/entities/event.py +0 -0
- {layrz_sdk-4.0.30 → layrz_sdk-4.0.31}/layrz_sdk/entities/exchange_service.py +0 -0
- {layrz_sdk-4.0.30 → layrz_sdk-4.0.31}/layrz_sdk/entities/function.py +0 -0
- {layrz_sdk-4.0.30 → layrz_sdk-4.0.31}/layrz_sdk/entities/geofence.py +0 -0
- {layrz_sdk-4.0.30 → layrz_sdk-4.0.31}/layrz_sdk/entities/geofence_category.py +0 -0
- {layrz_sdk-4.0.30 → layrz_sdk-4.0.31}/layrz_sdk/entities/last_message.py +0 -0
- {layrz_sdk-4.0.30 → layrz_sdk-4.0.31}/layrz_sdk/entities/locator.py +0 -0
- {layrz_sdk-4.0.30 → layrz_sdk-4.0.31}/layrz_sdk/entities/message.py +0 -0
- {layrz_sdk-4.0.30 → layrz_sdk-4.0.31}/layrz_sdk/entities/modbus/__init__.py +0 -0
- {layrz_sdk-4.0.30 → layrz_sdk-4.0.31}/layrz_sdk/entities/modbus/config.py +0 -0
- {layrz_sdk-4.0.30 → layrz_sdk-4.0.31}/layrz_sdk/entities/modbus/parameter.py +0 -0
- {layrz_sdk-4.0.30 → layrz_sdk-4.0.31}/layrz_sdk/entities/modbus/schema.py +0 -0
- {layrz_sdk-4.0.30 → layrz_sdk-4.0.31}/layrz_sdk/entities/modbus/status.py +0 -0
- {layrz_sdk-4.0.30 → layrz_sdk-4.0.31}/layrz_sdk/entities/modbus/wait.py +0 -0
- {layrz_sdk-4.0.30 → layrz_sdk-4.0.31}/layrz_sdk/entities/notification_type.py +0 -0
- {layrz_sdk-4.0.30 → layrz_sdk-4.0.31}/layrz_sdk/entities/operation.py +0 -0
- {layrz_sdk-4.0.30 → layrz_sdk-4.0.31}/layrz_sdk/entities/operation_case_payload.py +0 -0
- {layrz_sdk-4.0.30 → layrz_sdk-4.0.31}/layrz_sdk/entities/operation_type.py +0 -0
- {layrz_sdk-4.0.30 → layrz_sdk-4.0.31}/layrz_sdk/entities/outbound_service.py +0 -0
- {layrz_sdk-4.0.30 → layrz_sdk-4.0.31}/layrz_sdk/entities/platform.py +0 -0
- {layrz_sdk-4.0.30 → layrz_sdk-4.0.31}/layrz_sdk/entities/position.py +0 -0
- {layrz_sdk-4.0.30 → layrz_sdk-4.0.31}/layrz_sdk/entities/presence_type.py +0 -0
- {layrz_sdk-4.0.30 → layrz_sdk-4.0.31}/layrz_sdk/entities/preset.py +0 -0
- {layrz_sdk-4.0.30 → layrz_sdk-4.0.31}/layrz_sdk/entities/report.py +0 -0
- {layrz_sdk-4.0.30 → layrz_sdk-4.0.31}/layrz_sdk/entities/report_col.py +0 -0
- {layrz_sdk-4.0.30 → layrz_sdk-4.0.31}/layrz_sdk/entities/report_configuration.py +0 -0
- {layrz_sdk-4.0.30 → layrz_sdk-4.0.31}/layrz_sdk/entities/report_data_type.py +0 -0
- {layrz_sdk-4.0.30 → layrz_sdk-4.0.31}/layrz_sdk/entities/report_format.py +0 -0
- {layrz_sdk-4.0.30 → layrz_sdk-4.0.31}/layrz_sdk/entities/report_header.py +0 -0
- {layrz_sdk-4.0.30 → layrz_sdk-4.0.31}/layrz_sdk/entities/report_page.py +0 -0
- {layrz_sdk-4.0.30 → layrz_sdk-4.0.31}/layrz_sdk/entities/report_row.py +0 -0
- {layrz_sdk-4.0.30 → layrz_sdk-4.0.31}/layrz_sdk/entities/request_type.py +0 -0
- {layrz_sdk-4.0.30 → layrz_sdk-4.0.31}/layrz_sdk/entities/sensor.py +0 -0
- {layrz_sdk-4.0.30 → layrz_sdk-4.0.31}/layrz_sdk/entities/sensor_mask.py +0 -0
- {layrz_sdk-4.0.30 → layrz_sdk-4.0.31}/layrz_sdk/entities/sound_effect.py +0 -0
- {layrz_sdk-4.0.30 → layrz_sdk-4.0.31}/layrz_sdk/entities/static_position.py +0 -0
- {layrz_sdk-4.0.30 → layrz_sdk-4.0.31}/layrz_sdk/entities/telemetry/__init__.py +0 -0
- {layrz_sdk-4.0.30 → layrz_sdk-4.0.31}/layrz_sdk/entities/telemetry/assetmessage.py +0 -0
- {layrz_sdk-4.0.30 → layrz_sdk-4.0.31}/layrz_sdk/entities/telemetry/devicemessage.py +0 -0
- {layrz_sdk-4.0.30 → layrz_sdk-4.0.31}/layrz_sdk/entities/text_alignment.py +0 -0
- {layrz_sdk-4.0.30 → layrz_sdk-4.0.31}/layrz_sdk/entities/timezone.py +0 -0
- {layrz_sdk-4.0.30 → layrz_sdk-4.0.31}/layrz_sdk/entities/trigger.py +0 -0
- {layrz_sdk-4.0.30 → layrz_sdk-4.0.31}/layrz_sdk/entities/trigger_kind.py +0 -0
- {layrz_sdk-4.0.30 → layrz_sdk-4.0.31}/layrz_sdk/entities/user.py +0 -0
- {layrz_sdk-4.0.30 → layrz_sdk-4.0.31}/layrz_sdk/entities/waypoint.py +0 -0
- {layrz_sdk-4.0.30 → layrz_sdk-4.0.31}/layrz_sdk/entities/weekday.py +0 -0
- {layrz_sdk-4.0.30 → layrz_sdk-4.0.31}/layrz_sdk/helpers/__init__.py +0 -0
- {layrz_sdk-4.0.30 → layrz_sdk-4.0.31}/layrz_sdk/helpers/color.py +0 -0
- {layrz_sdk-4.0.30 → layrz_sdk-4.0.31}/layrz_sdk/lcl/__init__.py +0 -0
- {layrz_sdk-4.0.30 → layrz_sdk-4.0.31}/layrz_sdk/lcl/core.py +0 -0
- {layrz_sdk-4.0.30 → layrz_sdk-4.0.31}/layrz_sdk/py.typed +0 -0
- {layrz_sdk-4.0.30 → layrz_sdk-4.0.31}/layrz_sdk.egg-info/SOURCES.txt +0 -0
- {layrz_sdk-4.0.30 → layrz_sdk-4.0.31}/layrz_sdk.egg-info/dependency_links.txt +0 -0
- {layrz_sdk-4.0.30 → layrz_sdk-4.0.31}/layrz_sdk.egg-info/requires.txt +0 -0
- {layrz_sdk-4.0.30 → layrz_sdk-4.0.31}/layrz_sdk.egg-info/top_level.txt +0 -0
- {layrz_sdk-4.0.30 → layrz_sdk-4.0.31}/manual_deploy.py +0 -0
- {layrz_sdk-4.0.30 → layrz_sdk-4.0.31}/setup.cfg +0 -0
- {layrz_sdk-4.0.30 → layrz_sdk-4.0.31}/tests/__init__.py +0 -0
- {layrz_sdk-4.0.30 → layrz_sdk-4.0.31}/tests/test_lcl.py +0 -0
|
@@ -1,5 +1,10 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## 4.0.31
|
|
4
|
+
|
|
5
|
+
- Refined `OperationPayload` serialization to rely on field serializers, ensuring nested models, enums, datetimes, and timedeltas dump with the expected API shape.
|
|
6
|
+
- Allowed passing Twilio host phone data as dictionaries when constructing `OperationPayload`.
|
|
7
|
+
|
|
3
8
|
## 4.0.30
|
|
4
9
|
|
|
5
10
|
- Added a validation for `pk` field in `Locator` entity to ensure it is always a string, converting from `int` or `UUID` if necessary.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: layrz-sdk
|
|
3
|
-
Version: 4.0.
|
|
3
|
+
Version: 4.0.31
|
|
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>, Miguel Zauzich <miguel@goldenm.com>, Angel Prieto <aprieto@goldenm.com>
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
from datetime import datetime, timedelta
|
|
4
4
|
from typing import Any, Self
|
|
5
5
|
|
|
6
|
-
from pydantic import BaseModel, Field, field_validator
|
|
6
|
+
from pydantic import BaseModel, Field, field_serializer, field_validator
|
|
7
7
|
|
|
8
8
|
from layrz_sdk.entities.asset import Asset
|
|
9
9
|
from layrz_sdk.entities.destination_phone import DestinationPhone
|
|
@@ -22,29 +22,16 @@ from layrz_sdk.entities.trigger import Trigger
|
|
|
22
22
|
class OperationPayload(BaseModel):
|
|
23
23
|
"""Operation Payload entity"""
|
|
24
24
|
|
|
25
|
-
model_config = {
|
|
26
|
-
'json_encoders': {
|
|
27
|
-
timedelta: lambda v: v.total_seconds(),
|
|
28
|
-
datetime: lambda v: v.timestamp(),
|
|
29
|
-
Asset: lambda v: v.model_dump(by_alias=True, exclude_none=True),
|
|
30
|
-
Trigger: lambda v: v.model_dump(by_alias=True, exclude_none=True),
|
|
31
|
-
Operation: lambda v: v.model_dump(by_alias=True, exclude_none=True),
|
|
32
|
-
Geofence: lambda v: v.model_dump(by_alias=True, exclude_none=True),
|
|
33
|
-
OperationType: lambda v: v.value,
|
|
34
|
-
HttpRequestType: lambda v: v.value,
|
|
35
|
-
TwilioNotificationType: lambda v: v.value,
|
|
36
|
-
SoundEffect: lambda v: v.value,
|
|
37
|
-
Platform: lambda v: v.value,
|
|
38
|
-
PresenceType: lambda v: v.value,
|
|
39
|
-
},
|
|
40
|
-
}
|
|
41
|
-
|
|
42
25
|
kind: OperationType = Field(
|
|
43
26
|
...,
|
|
44
27
|
description='Defines the kind of the operation',
|
|
45
28
|
alias='operationType',
|
|
46
29
|
)
|
|
47
30
|
|
|
31
|
+
@field_serializer('kind', when_used='always')
|
|
32
|
+
def serialize_kind(self, value: OperationType) -> str:
|
|
33
|
+
return value.value
|
|
34
|
+
|
|
48
35
|
asset: Asset = Field(..., description='Defines the asset associated with the operation')
|
|
49
36
|
|
|
50
37
|
@field_validator('asset', mode='before')
|
|
@@ -52,7 +39,7 @@ class OperationPayload(BaseModel):
|
|
|
52
39
|
"""Serialize asset to a dictionary"""
|
|
53
40
|
if isinstance(value, Asset):
|
|
54
41
|
return Asset(
|
|
55
|
-
id=value.pk,
|
|
42
|
+
id=value.pk, # ty: ignore
|
|
56
43
|
name=value.name,
|
|
57
44
|
operation_mode=value.operation_mode,
|
|
58
45
|
vin=value.vin,
|
|
@@ -66,6 +53,11 @@ class OperationPayload(BaseModel):
|
|
|
66
53
|
|
|
67
54
|
raise ValueError('Asset must be an instance of Asset or a dictionary')
|
|
68
55
|
|
|
56
|
+
@field_serializer('asset', when_used='always')
|
|
57
|
+
def serialize_asset_field(self, value: Asset) -> dict[str, Any]:
|
|
58
|
+
"""Serialize asset to a dictionary"""
|
|
59
|
+
return value.model_dump(by_alias=True)
|
|
60
|
+
|
|
69
61
|
trigger: Trigger = Field(..., description='Defines the trigger associated with the operation')
|
|
70
62
|
|
|
71
63
|
@field_validator('trigger', mode='before')
|
|
@@ -73,7 +65,7 @@ class OperationPayload(BaseModel):
|
|
|
73
65
|
"""Serialize trigger to a dictionary"""
|
|
74
66
|
if isinstance(value, Trigger):
|
|
75
67
|
return Trigger(
|
|
76
|
-
id=value.pk,
|
|
68
|
+
id=value.pk, # ty: ignore
|
|
77
69
|
name=value.name,
|
|
78
70
|
code=value.code,
|
|
79
71
|
)
|
|
@@ -83,6 +75,11 @@ class OperationPayload(BaseModel):
|
|
|
83
75
|
|
|
84
76
|
raise ValueError('Trigger must be an instance of Trigger or a dictionary')
|
|
85
77
|
|
|
78
|
+
@field_serializer('trigger', when_used='always')
|
|
79
|
+
def serialize_trigger_field(self, value: Trigger) -> dict[str, Any]:
|
|
80
|
+
"""Serialize trigger to a dictionary"""
|
|
81
|
+
return value.model_dump(by_alias=True)
|
|
82
|
+
|
|
86
83
|
operation: Operation = Field(..., description='Defines the operation associated with the payload')
|
|
87
84
|
|
|
88
85
|
@field_validator('operation', mode='before')
|
|
@@ -90,7 +87,7 @@ class OperationPayload(BaseModel):
|
|
|
90
87
|
"""Serialize operation to a dictionary"""
|
|
91
88
|
if isinstance(value, Operation):
|
|
92
89
|
return Operation(
|
|
93
|
-
id=value.pk,
|
|
90
|
+
id=value.pk, # ty: ignore
|
|
94
91
|
name=value.name,
|
|
95
92
|
operation_type=value.kind,
|
|
96
93
|
timezone=value.timezone,
|
|
@@ -101,12 +98,21 @@ class OperationPayload(BaseModel):
|
|
|
101
98
|
|
|
102
99
|
raise ValueError('Operation must be an instance of Operation or a dictionary')
|
|
103
100
|
|
|
101
|
+
@field_serializer('operation', when_used='always')
|
|
102
|
+
def serialize_operation_field(self, value: Operation) -> dict[str, Any]:
|
|
103
|
+
"""Serialize operation to a dictionary"""
|
|
104
|
+
return value.model_dump(by_alias=True)
|
|
105
|
+
|
|
104
106
|
activated_at: datetime = Field(
|
|
105
107
|
...,
|
|
106
108
|
description='Defines the date when the operation was activated',
|
|
107
109
|
alias='activatedAt',
|
|
108
110
|
)
|
|
109
111
|
|
|
112
|
+
@field_serializer('activated_at', when_used='always')
|
|
113
|
+
def serialize_activated_at(self, value: datetime) -> float:
|
|
114
|
+
return value.timestamp()
|
|
115
|
+
|
|
110
116
|
position: dict[str, Any] = Field(
|
|
111
117
|
default_factory=dict,
|
|
112
118
|
description='Defines the position of the operation',
|
|
@@ -122,18 +128,36 @@ class OperationPayload(BaseModel):
|
|
|
122
128
|
description='Defines the geofence of the operation',
|
|
123
129
|
)
|
|
124
130
|
|
|
131
|
+
@field_serializer('geofence', when_used='always')
|
|
132
|
+
def serialize_geofence(self, value: Geofence | None) -> Any:
|
|
133
|
+
if value is None:
|
|
134
|
+
return None
|
|
135
|
+
return value.model_dump(by_alias=True)
|
|
136
|
+
|
|
125
137
|
presence_type: PresenceType | None = Field(
|
|
126
138
|
default=None,
|
|
127
139
|
description='Defines the presence type of the operation',
|
|
128
140
|
alias='presenceType',
|
|
129
141
|
)
|
|
130
142
|
|
|
143
|
+
@field_serializer('presence_type', when_used='always')
|
|
144
|
+
def serialize_presence_type(self, value: PresenceType | None) -> Any:
|
|
145
|
+
if value is None:
|
|
146
|
+
return None
|
|
147
|
+
return value.value
|
|
148
|
+
|
|
131
149
|
case_: OperationCasePayload | None = Field(
|
|
132
150
|
default=None,
|
|
133
151
|
description='Defines the case of the operation',
|
|
134
152
|
alias='case',
|
|
135
153
|
)
|
|
136
154
|
|
|
155
|
+
@field_serializer('case_', when_used='always')
|
|
156
|
+
def serialize_case(self, value: OperationCasePayload | None) -> Any:
|
|
157
|
+
if value is None:
|
|
158
|
+
return None
|
|
159
|
+
return value.model_dump(by_alias=True)
|
|
160
|
+
|
|
137
161
|
language_id: int = Field(
|
|
138
162
|
default=2,
|
|
139
163
|
description='Defines the language ID of the operation',
|
|
@@ -167,6 +191,13 @@ class OperationPayload(BaseModel):
|
|
|
167
191
|
description='Defines the HTTP method of the operation',
|
|
168
192
|
alias='method',
|
|
169
193
|
)
|
|
194
|
+
|
|
195
|
+
@field_serializer('http_method', when_used='always')
|
|
196
|
+
def serialize_http_method(self, value: HttpRequestType | None) -> Any:
|
|
197
|
+
if value is None:
|
|
198
|
+
return None
|
|
199
|
+
return value.value
|
|
200
|
+
|
|
170
201
|
http_headers: list[dict[str, Any]] = Field(
|
|
171
202
|
default_factory=list,
|
|
172
203
|
description='Defines the headers of the operation',
|
|
@@ -215,18 +246,38 @@ class OperationPayload(BaseModel):
|
|
|
215
246
|
|
|
216
247
|
return []
|
|
217
248
|
|
|
249
|
+
@field_serializer('destinations', when_used='always')
|
|
250
|
+
def serialize_destinations_field(self, value: list[DestinationPhone]) -> list[dict[str, Any]]:
|
|
251
|
+
"""Serialize destinations to a list of dictionaries"""
|
|
252
|
+
return [dest.model_dump(by_alias=True) for dest in value]
|
|
253
|
+
|
|
218
254
|
twilio_host_phone: DestinationPhone | None = Field(
|
|
219
255
|
default=None,
|
|
220
256
|
description='Defines the host phone number for Twilio notifications',
|
|
221
257
|
alias='hostPhone',
|
|
222
258
|
)
|
|
223
259
|
|
|
260
|
+
@field_validator('twilio_host_phone', mode='before')
|
|
261
|
+
def serialize_twilio_host_phone(cls, value: Any) -> DestinationPhone | None:
|
|
262
|
+
"""Serialize host phone to a DestinationPhone"""
|
|
263
|
+
if isinstance(value, DestinationPhone):
|
|
264
|
+
return value
|
|
265
|
+
|
|
266
|
+
if isinstance(value, dict):
|
|
267
|
+
return DestinationPhone.model_validate(value)
|
|
268
|
+
|
|
269
|
+
return None
|
|
270
|
+
|
|
224
271
|
twilio_notification_type: TwilioNotificationType = Field(
|
|
225
272
|
default=TwilioNotificationType.SMS,
|
|
226
273
|
description='Defines the Twilio notification type of the operation',
|
|
227
274
|
alias='notificationType',
|
|
228
275
|
)
|
|
229
276
|
|
|
277
|
+
@field_serializer('twilio_notification_type', when_used='always')
|
|
278
|
+
def serialize_twilio_notification_type(self, value: TwilioNotificationType) -> str:
|
|
279
|
+
return value.value
|
|
280
|
+
|
|
230
281
|
username: str | None = Field(
|
|
231
282
|
default=None,
|
|
232
283
|
description='Defines the username for the operation',
|
|
@@ -262,6 +313,10 @@ class OperationPayload(BaseModel):
|
|
|
262
313
|
alias='pushPlatforms',
|
|
263
314
|
)
|
|
264
315
|
|
|
316
|
+
@field_serializer('push_platforms', when_used='always')
|
|
317
|
+
def serialize_push_platforms(self, value: list[Platform]) -> list[str]:
|
|
318
|
+
return [platform.value for platform in value]
|
|
319
|
+
|
|
265
320
|
## For usage of In-app notifications operations
|
|
266
321
|
destinations_ids: list[int] = Field(
|
|
267
322
|
default_factory=list,
|
|
@@ -274,6 +329,10 @@ class OperationPayload(BaseModel):
|
|
|
274
329
|
alias='soundEffect',
|
|
275
330
|
)
|
|
276
331
|
|
|
332
|
+
@field_serializer('sound_effect', when_used='always')
|
|
333
|
+
def serialize_sound_effect(self, value: SoundEffect) -> str:
|
|
334
|
+
return value.value
|
|
335
|
+
|
|
277
336
|
sound_effect_uri: str | None = Field(
|
|
278
337
|
default=None,
|
|
279
338
|
description='Defines the sound effect URI for the operation',
|
|
@@ -301,3 +360,7 @@ class OperationPayload(BaseModel):
|
|
|
301
360
|
if isinstance(value, (int, float)):
|
|
302
361
|
return timedelta(seconds=value)
|
|
303
362
|
return timedelta(seconds=0)
|
|
363
|
+
|
|
364
|
+
@field_serializer('duration', when_used='always')
|
|
365
|
+
def serialize_duration(self, value: timedelta) -> float:
|
|
366
|
+
return value.total_seconds()
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: layrz-sdk
|
|
3
|
-
Version: 4.0.
|
|
3
|
+
Version: 4.0.31
|
|
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>, Miguel Zauzich <miguel@goldenm.com>, Angel Prieto <aprieto@goldenm.com>
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|