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