Skip to content

Commit 0a4d5b2

Browse files
author
Alan Christie
committed
feat: Better running workflow and step records (errors and messages)
1 parent 47d77d6 commit 0a4d5b2

File tree

3 files changed

+101
-9
lines changed

3 files changed

+101
-9
lines changed

tests/api_adapter.py

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -149,7 +149,12 @@ def create_running_workflow(
149149
return {"id": running_workflow_id}
150150

151151
def set_running_workflow_done(
152-
self, *, running_workflow_id: str, success: bool
152+
self,
153+
*,
154+
running_workflow_id: str,
155+
success: bool,
156+
error: Optional[int] = None,
157+
error_msg: Optional[str] = None,
153158
) -> None:
154159
UnitTestAPIAdapter.lock.acquire()
155160
with open(_RUNNING_WORKFLOW_PICKLE_FILE, "rb") as pickle_file:
@@ -158,6 +163,8 @@ def set_running_workflow_done(
158163
assert running_workflow_id in running_workflow
159164
running_workflow[running_workflow_id]["done"] = True
160165
running_workflow[running_workflow_id]["success"] = success
166+
running_workflow[running_workflow_id]["error"] = error
167+
running_workflow[running_workflow_id]["error_msg"] = error_msg
161168

162169
with open(_RUNNING_WORKFLOW_PICKLE_FILE, "wb") as pickle_file:
163170
Pickler(pickle_file).dump(running_workflow)
@@ -213,7 +220,12 @@ def get_running_workflow_step(
213220
}
214221

215222
def set_running_workflow_step_done(
216-
self, *, running_workflow_step_id: str, success: bool
223+
self,
224+
*,
225+
running_workflow_step_id: str,
226+
success: bool,
227+
error: Optional[int] = None,
228+
error_msg: Optional[str] = None,
217229
) -> None:
218230
UnitTestAPIAdapter.lock.acquire()
219231
with open(_RUNNING_WORKFLOW_STEP_PICKLE_FILE, "rb") as pickle_file:
@@ -222,6 +234,8 @@ def set_running_workflow_step_done(
222234
assert running_workflow_step_id in running_workflow_step
223235
running_workflow_step[running_workflow_step_id]["done"] = True
224236
running_workflow_step[running_workflow_step_id]["success"] = success
237+
running_workflow_step[running_workflow_step_id]["error"] = error
238+
running_workflow_step[running_workflow_step_id]["error_msg"] = error_msg
225239

226240
with open(_RUNNING_WORKFLOW_STEP_PICKLE_FILE, "wb") as pickle_file:
227241
Pickler(pickle_file).dump(running_workflow_step)

tests/test_test_api_adapter.py

Lines changed: 61 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -126,6 +126,8 @@ def test_set_running_workflow_done_when_success():
126126
response = utaa.get_running_workflow(running_workflow_id=rwfid)
127127
assert response["running_workflow"]["done"]
128128
assert response["running_workflow"]["success"]
129+
assert response["running_workflow"]["error"] is None
130+
assert response["running_workflow"]["error_msg"] is None
129131

130132

131133
def test_set_running_workflow_done_when_failed():
@@ -141,12 +143,16 @@ def test_set_running_workflow_done_when_failed():
141143
rwfid = response["id"]
142144

143145
# Act
144-
utaa.set_running_workflow_done(running_workflow_id=rwfid, success=False)
146+
utaa.set_running_workflow_done(
147+
running_workflow_id=rwfid, success=False, error=1, error_msg="Bang!"
148+
)
145149

146150
# Assert
147151
response = utaa.get_running_workflow(running_workflow_id=rwfid)
148152
assert response["running_workflow"]["done"]
149153
assert not response["running_workflow"]["success"]
154+
assert response["running_workflow"]["error"] == 1
155+
assert response["running_workflow"]["error_msg"] == "Bang!"
150156

151157

152158
def test_create_running_workflow_step():
@@ -169,6 +175,60 @@ def test_create_running_workflow_step():
169175
assert response["id"] == "r-workflow-step-00000000-0000-0000-0000-000000000001"
170176

171177

178+
def test_set_running_workflow_step_done_when_success():
179+
# Arrange
180+
utaa = UnitTestAPIAdapter()
181+
response = utaa.create_workflow(workflow_definition={"name": "blah"})
182+
response = utaa.create_running_workflow(
183+
user_id="dlister",
184+
workflow_id=response["id"],
185+
project_id=TEST_PROJECT_ID,
186+
variables={},
187+
)
188+
response = utaa.create_running_workflow_step(
189+
running_workflow_id=response["id"], step="step-1"
190+
)
191+
rwfsid = response["id"]
192+
193+
# Act
194+
utaa.set_running_workflow_step_done(running_workflow_step_id=rwfsid, success=True)
195+
196+
# Assert
197+
response = utaa.get_running_workflow_step(running_workflow_step_id=rwfsid)
198+
assert response["running_workflow_step"]["done"]
199+
assert response["running_workflow_step"]["success"]
200+
assert response["running_workflow_step"]["error"] is None
201+
assert response["running_workflow_step"]["error_msg"] is None
202+
203+
204+
def test_set_running_workflow_step_done_when_failed():
205+
# Arrange
206+
utaa = UnitTestAPIAdapter()
207+
response = utaa.create_workflow(workflow_definition={"name": "blah"})
208+
response = utaa.create_running_workflow(
209+
user_id="dlister",
210+
workflow_id=response["id"],
211+
project_id=TEST_PROJECT_ID,
212+
variables={},
213+
)
214+
response = utaa.create_running_workflow_step(
215+
running_workflow_id=response["id"], step="step-1"
216+
)
217+
rwfsid = response["id"]
218+
219+
# Act
220+
utaa.set_running_workflow_step_done(
221+
running_workflow_step_id=rwfsid, success=False, error=1, error_msg="Bang!"
222+
)
223+
224+
# Assert
225+
response = utaa.get_running_workflow_step(running_workflow_step_id=rwfsid)
226+
assert response["running_workflow_step"]["done"]
227+
assert not response["running_workflow_step"]["success"]
228+
assert response["running_workflow_step"]["error"] == 1
229+
assert response["running_workflow_step"]["error_msg"] == "Bang!"
230+
231+
172232
def test_get_running_workflow_step():
173233
# Arrange
174234
utaa = UnitTestAPIAdapter()

workflow/workflow_abc.py

Lines changed: 24 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -108,9 +108,15 @@ def create_running_workflow(
108108

109109
@abstractmethod
110110
def set_running_workflow_done(
111-
self, *, running_workflow_id: str, success: bool
111+
self,
112+
*,
113+
running_workflow_id: str,
114+
success: bool,
115+
error: Optional[int] = None,
116+
error_msg: Optional[str] = None,
112117
) -> None:
113-
"""Set the success value for a RunningWorkflow Record"""
118+
"""Set the success value for a RunningWorkflow Record.
119+
If not successful an error code and message should be provided."""
114120

115121
@abstractmethod
116122
def get_running_workflow(self, *, running_workflow_id: str) -> Dict[str, Any]:
@@ -121,6 +127,8 @@ def get_running_workflow(self, *, running_workflow_id: str) -> Dict[str, Any]:
121127
# "user_id": "alan",
122128
# "done": False,
123129
# "success": false,
130+
# "error": None,
131+
# "error_msg": None,
124132
# "workflow": {"id": "workflow-000"},
125133
# "project_id": "project-000",
126134
# "variables": {"x": 1, "y": 2},
@@ -151,15 +159,23 @@ def get_running_workflow_step(
151159
# "step:": "step-1234",
152160
# "done": False,
153161
# "success": false,
154-
# "running_workflow": "r-workflow-000",
162+
# "error": None,
163+
# "error_msg": None,
164+
# "running_workflow": "r-workflow-00000000-0000-0000-0000-000000000001",
155165
# },
156166
# }
157167

158168
@abstractmethod
159169
def set_running_workflow_step_done(
160-
self, *, running_workflow_step_id: str, success: bool
170+
self,
171+
*,
172+
running_workflow_step_id: str,
173+
success: bool,
174+
error: Optional[int] = None,
175+
error_msg: Optional[str] = None,
161176
) -> None:
162-
"""Set the success value for a RunningWorkflowStep Record"""
177+
"""Set the success value for a RunningWorkflowStep Record,
178+
If not successful an error code and message should be provided."""
163179

164180
@abstractmethod
165181
def get_running_workflow_steps(
@@ -176,7 +192,9 @@ def get_running_workflow_steps(
176192
# "step:": "step-1234",
177193
# "done": False,
178194
# "success": false,
179-
# "workflow": "workflow-000",
195+
# "error": None,
196+
# "error_msg": None,
197+
# "workflow": "workflow-00000000-0000-0000-0000-000000000001",
180198
# }
181199
# ...
182200
# ]

0 commit comments

Comments
 (0)