Skip to content

Commit cb81daa

Browse files
committed
chore: add deserialization for execution object
1 parent a5f594a commit cb81daa

1 file changed

Lines changed: 56 additions & 1 deletion

File tree

src/aws_durable_execution_sdk_python_testing/execution.py

Lines changed: 56 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,20 +3,27 @@
33
import json
44
from dataclasses import replace
55
from datetime import UTC, datetime
6-
from typing import TYPE_CHECKING
6+
from typing import TYPE_CHECKING, Any
77
from uuid import uuid4
88

99
from aws_durable_execution_sdk_python.execution import (
1010
DurableExecutionInvocationOutput,
1111
InvocationStatus,
1212
)
1313
from aws_durable_execution_sdk_python.lambda_service import (
14+
CallbackOptions,
15+
ContextOptions,
1416
ErrorObject,
1517
ExecutionDetails,
18+
InvokeOptions,
1619
Operation,
20+
OperationAction,
1721
OperationStatus,
22+
OperationSubType,
1823
OperationType,
1924
OperationUpdate,
25+
StepOptions,
26+
WaitOptions,
2027
)
2128

2229
# Import AWS exceptions
@@ -27,6 +34,54 @@
2734
from aws_durable_execution_sdk_python_testing.token import CheckpointToken
2835

2936

37+
def _operation_update_from_dict(data: dict[str, Any]) -> OperationUpdate:
38+
"""Create OperationUpdate from dictionary data."""
39+
error = ErrorObject.from_dict(data["Error"]) if data.get("Error") else None
40+
41+
context_options = None
42+
if context_data := data.get("ContextOptions"):
43+
context_options = ContextOptions(
44+
replay_children=context_data.get("ReplayChildren", False)
45+
)
46+
47+
step_options = None
48+
if step_data := data.get("StepOptions"):
49+
step_options = StepOptions(
50+
next_attempt_delay_seconds=step_data.get("NextAttemptDelaySeconds")
51+
)
52+
53+
wait_options = None
54+
if wait_data := data.get("WaitOptions"):
55+
wait_options = WaitOptions.from_dict(wait_data)
56+
57+
callback_options = None
58+
if callback_data := data.get("CallbackOptions"):
59+
callback_options = CallbackOptions.from_dict(callback_data)
60+
61+
invoke_options = None
62+
if invoke_data := data.get("InvokeOptions"):
63+
invoke_options = InvokeOptions(
64+
function_name=invoke_data.get("FunctionName", ""),
65+
timeout_seconds=invoke_data.get("TimeoutSeconds"),
66+
)
67+
68+
return OperationUpdate(
69+
operation_id=data["Id"],
70+
operation_type=OperationType(data["Type"]),
71+
action=OperationAction(data["Action"]),
72+
parent_id=data.get("ParentId"),
73+
name=data.get("Name"),
74+
sub_type=OperationSubType(data["SubType"]) if data.get("SubType") else None,
75+
payload=data.get("Payload"),
76+
error=error,
77+
context_options=context_options,
78+
step_options=step_options,
79+
wait_options=wait_options,
80+
callback_options=callback_options,
81+
invoke_options=invoke_options,
82+
)
83+
84+
3085
if TYPE_CHECKING:
3186
from aws_durable_execution_sdk_python_testing.model import (
3287
StartDurableExecutionInput,

0 commit comments

Comments
 (0)