Skip to content

Commit 0b8737a

Browse files
committed
fix-hydration
Signed-off-by: Antonio Mendoza Pérez <[email protected]>
1 parent 64379d1 commit 0b8737a

File tree

7 files changed

+69
-38
lines changed

7 files changed

+69
-38
lines changed

‎serverlessworkflow/sdk/databased_switch_state.py

+3-2
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
from serverlessworkflow.sdk.default_condition_def import DefaultConditionDef
77
from serverlessworkflow.sdk.end_data_condition import EndDataCondition
88
from serverlessworkflow.sdk.error import Error
9-
from serverlessworkflow.sdk.hydration import HydratableParameter, UnionTypeOf, ComplexTypeOf, ArrayTypeOf, \
9+
from serverlessworkflow.sdk.hydration import HydratableParameter, ComplexTypeOf, ArrayTypeOf, \
1010
Fields
1111
from serverlessworkflow.sdk.metadata import Metadata
1212
from serverlessworkflow.sdk.state import State
@@ -52,7 +52,8 @@ def f_hydration(p_key, p_value):
5252
return HydratableParameter(value=p_value).hydrateAs(ComplexTypeOf(DataBasedSwitchStateTime0ut))
5353

5454
if p_key == 'dataConditions':
55-
return [DataBasedSwitchState.hydrate_state(v) if type(v) is not (TransitionDataCondition or EndDataCondition) else v for v in p_value]
55+
return [DataBasedSwitchState.hydrate_state(v) if not (
56+
isinstance(v, TransitionDataCondition or EndDataCondition)) else v for v in p_value]
5657

5758
if p_key == 'onErrors':
5859
return HydratableParameter(value=p_value).hydrateAs(ArrayTypeOf(Error))

‎serverlessworkflow/sdk/event_based_switch_state.py

+3-2
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
from serverlessworkflow.sdk.end_event_condition import EndEventCondition
77
from serverlessworkflow.sdk.error import Error
88
from serverlessworkflow.sdk.event_based_switch_state_timeout import EventBasedSwitchStateTimeOut
9-
from serverlessworkflow.sdk.hydration import HydratableParameter, ComplexTypeOf, UnionTypeOf, ArrayTypeOf, \
9+
from serverlessworkflow.sdk.hydration import HydratableParameter, ComplexTypeOf, ArrayTypeOf, \
1010
Fields
1111
from serverlessworkflow.sdk.metadata import Metadata
1212
from serverlessworkflow.sdk.state import State
@@ -52,7 +52,8 @@ def f_hydration(p_key, p_value):
5252
return HydratableParameter(value=p_value).hydrateAs(ComplexTypeOf(EventBasedSwitchStateTimeOut))
5353

5454
if p_key == 'eventConditions':
55-
return [EventBasedSwitchState.hydrate_state(v) if type(v) is not (TransitionEventCondition or EndEventCondition) else v for v in p_value]
55+
return [EventBasedSwitchState.hydrate_state(v) if not (
56+
isinstance(v, TransitionEventCondition or EndEventCondition)) else v for v in p_value]
5657

5758
if p_key == 'onErrors':
5859
return HydratableParameter(value=p_value).hydrateAs(ArrayTypeOf(Error))

‎serverlessworkflow/sdk/function_ref.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ class FunctionRef:
1111

1212
def __init__(self,
1313
refName: str = None,
14-
arguments: dict[str, dict] = None,
14+
arguments: dict[str, any] = None,
1515
selectionSet: str = None,
1616
invoke: str = None,
1717
**kwargs):

‎serverlessworkflow/sdk/hydration.py

+3-1
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,12 @@
11
from __future__ import annotations
22

33
import dataclasses
4+
from abc import ABC, abstractmethod
45
from typing import Any
56

67

7-
class HydratableType:
8+
class HydratableType(ABC):
9+
@abstractmethod
810
def hydrate(self, value):
911
pass
1012

‎serverlessworkflow/sdk/workflow.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -142,7 +142,7 @@ def f_hydration(p_key, p_value):
142142
ArrayTypeOf(AuthDef)]))
143143

144144
if p_key == 'states':
145-
return [Workflow.hydrate_state(v) if type(v) is not State else v for v in p_value]
145+
return [Workflow.hydrate_state(v) if not isinstance(v,State) else v for v in p_value]
146146

147147
if p_key == 'functions':
148148
return HydratableParameter(value=p_value).hydrateAs(UnionTypeOf([SimpleTypeOf(str),
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
import unittest
2+
3+
from serverlessworkflow.sdk.event_based_switch_state import EventBasedSwitchState
4+
from serverlessworkflow.sdk.transition_event_condition import TransitionEventCondition
5+
6+
7+
class TestEventBasedSwitchState(unittest.TestCase):
8+
def test_programmatically_create_object(self):
9+
event_based_switch_state = EventBasedSwitchState(eventConditions=[TransitionEventCondition(
10+
name="Hold Book",
11+
eventRef="Hold Book Event",
12+
transition="Request Hold"
13+
14+
)])
15+
16+
self.assertTrue(isinstance(event_based_switch_state.eventConditions[0], TransitionEventCondition))

‎tests/serverlessworkflow/sdk/test_workflow.py

+42-31
Original file line numberDiff line numberDiff line change
@@ -4,45 +4,46 @@
44
from os import listdir
55

66
from serverlessworkflow.sdk.action import Action
7+
from serverlessworkflow.sdk.action_data_filter import ActionDataFilter
78
from serverlessworkflow.sdk.function import Function
89
from serverlessworkflow.sdk.function_ref import FunctionRef
10+
from serverlessworkflow.sdk.operation_state import OperationState
911
from serverlessworkflow.sdk.workflow import Workflow
1012

1113

1214
class TestWorkflow(unittest.TestCase):
13-
workflow = Workflow(id_="greeting",
14-
name="Greeting Workflow",
15-
description="Greet Someone",
16-
version='1.0',
17-
specVersion='0.8',
18-
start="Greet",
19-
states=[
20-
{
21-
"name": "Greet",
22-
"type": "operation",
23-
"actions": [
24-
{
25-
"functionRef": {
26-
"refName": "greetingFunction",
27-
"arguments": {
28-
"name": "${ .person.name }"
29-
}
30-
},
31-
"actionDataFilter": {
32-
"results": "${ .greeting }"
33-
}
34-
}
35-
],
36-
"end": True
15+
workflow = Workflow(
16+
id_="greeting",
17+
name="Greeting Workflow",
18+
description="Greet Someone",
19+
version='1.0',
20+
specVersion='0.8',
21+
start="Greet",
22+
states=[
23+
OperationState(
24+
name="Greet",
25+
type="operation",
26+
actions=[
27+
Action(
28+
functionRef=FunctionRef(
29+
refName="greetingFunction",
30+
arguments={
31+
"name": "${ .person.name }"
3732
}
38-
],
39-
functions=[
40-
{
41-
"name": "greetingFunction",
42-
"operation": "file://myapis/greetingapis.json#greeting"
43-
}
44-
]
33+
),
34+
actionDataFilter=ActionDataFilter(
35+
results="${ .greeting }"
4536
)
37+
)
38+
],
39+
end=True
40+
)
41+
],
42+
functions=[
43+
Function(name="greetingFunction",
44+
operation="file://myapis/greetingapis.json#greeting")
45+
]
46+
)
4647

4748
def test_workflow_to_json(self):
4849
expected = """{
@@ -106,6 +107,16 @@ def test_workflow_to_yaml(self):
106107
"""
107108
self.assertEqual(expected, self.workflow.to_yaml())
108109

110+
def test_programmatically_create_workflow(self):
111+
112+
self.assertEqual("greeting", self.workflow.id)
113+
self.assertEqual("operation", self.workflow.states[0].type)
114+
self.assertTrue(isinstance(self.workflow.states[0], OperationState))
115+
self.assertEqual(True, self.workflow.states[0].end)
116+
self.assertTrue(isinstance(self.workflow.states[0].actions[0], Action))
117+
self.assertTrue(isinstance(self.workflow.states[0].actions[0].functionRef, FunctionRef))
118+
self.assertTrue(isinstance(self.workflow.functions[0], Function))
119+
109120
def test_workflow_from_source_json(self):
110121
examples_dir = os.path.join(os.path.dirname(__file__), '../../examples')
111122
examples = listdir(examples_dir)

0 commit comments

Comments
 (0)