Skip to content

Commit e47b8a2

Browse files
author
Alan Christie
committed
feat: Major refactor of API responses (to align with DM)
1 parent 04e60a7 commit e47b8a2

File tree

7 files changed

+89
-104
lines changed

7 files changed

+89
-104
lines changed

tests/instance_launcher.py

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -74,7 +74,6 @@ def launch(self, launch_parameters: LaunchParameters) -> LaunchResult:
7474
response, _ = self._api_adapter.get_running_workflow_step(
7575
running_workflow_step_id=launch_parameters.running_workflow_step_id
7676
)
77-
assert "running_workflow_step" in response
7877
# Now simulate the creation of a Task and Instance record
7978
response = self._api_adapter.create_instance(
8079
running_workflow_step_id=launch_parameters.running_workflow_step_id

tests/test_test_api_adapter.py

Lines changed: 23 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,7 @@ def test_get_workflow():
5353
wf, _ = utaa.get_workflow(workflow_id=wfid)
5454

5555
# Assert
56-
assert wf["workflow"]["name"] == "blah"
56+
assert wf["name"] == "blah"
5757

5858

5959
def test_create_running_workflow():
@@ -90,10 +90,9 @@ def test_get_running_workflow():
9090
response, _ = utaa.get_running_workflow(running_workflow_id=rwfid)
9191

9292
# Assert
93-
rwf = response["running_workflow"]
94-
assert not rwf["done"]
95-
assert rwf["workflow"] == wfid
96-
assert rwf["variables"] == {"x": 1}
93+
assert not response["done"]
94+
assert response["workflow"]["id"] == wfid
95+
assert response["variables"] == {"x": 1}
9796

9897

9998
def test_set_running_workflow_done_when_success():
@@ -113,10 +112,10 @@ def test_set_running_workflow_done_when_success():
113112

114113
# Assert
115114
response, _ = utaa.get_running_workflow(running_workflow_id=rwfid)
116-
assert response["running_workflow"]["done"]
117-
assert response["running_workflow"]["success"]
118-
assert response["running_workflow"]["error"] is None
119-
assert response["running_workflow"]["error_msg"] is None
115+
assert response["done"]
116+
assert response["success"]
117+
assert response["error"] is None
118+
assert response["error_msg"] is None
120119

121120

122121
def test_set_running_workflow_done_when_failed():
@@ -138,10 +137,10 @@ def test_set_running_workflow_done_when_failed():
138137

139138
# Assert
140139
response, _ = utaa.get_running_workflow(running_workflow_id=rwfid)
141-
assert response["running_workflow"]["done"]
142-
assert not response["running_workflow"]["success"]
143-
assert response["running_workflow"]["error"] == 1
144-
assert response["running_workflow"]["error_msg"] == "Bang!"
140+
assert response["done"]
141+
assert not response["success"]
142+
assert response["error"] == 1
143+
assert response["error_msg"] == "Bang!"
145144

146145

147146
def test_create_running_workflow_step():
@@ -184,10 +183,10 @@ def test_set_running_workflow_step_done_when_success():
184183

185184
# Assert
186185
response, _ = utaa.get_running_workflow_step(running_workflow_step_id=rwfsid)
187-
assert response["running_workflow_step"]["done"]
188-
assert response["running_workflow_step"]["success"]
189-
assert response["running_workflow_step"]["error"] is None
190-
assert response["running_workflow_step"]["error_msg"] is None
186+
assert response["done"]
187+
assert response["success"]
188+
assert response["error"] is None
189+
assert response["error_msg"] is None
191190

192191

193192
def test_set_running_workflow_step_done_when_failed():
@@ -212,10 +211,10 @@ def test_set_running_workflow_step_done_when_failed():
212211

213212
# Assert
214213
response, _ = utaa.get_running_workflow_step(running_workflow_step_id=rwfsid)
215-
assert response["running_workflow_step"]["done"]
216-
assert not response["running_workflow_step"]["success"]
217-
assert response["running_workflow_step"]["error"] == 1
218-
assert response["running_workflow_step"]["error_msg"] == "Bang!"
214+
assert response["done"]
215+
assert not response["success"]
216+
assert response["error"] == 1
217+
assert response["error_msg"] == "Bang!"
219218

220219

221220
def test_get_running_workflow_step():
@@ -239,10 +238,9 @@ def test_get_running_workflow_step():
239238
response, _ = utaa.get_running_workflow_step(running_workflow_step_id=rwfsid)
240239

241240
# Assert
242-
rwfs = response["running_workflow_step"]
243-
assert rwfs["step"] == "step-1"
244-
assert not rwfs["done"]
245-
assert rwfs["running_workflow"] == rwfid
241+
assert response["step"] == "step-1"
242+
assert not response["done"]
243+
assert response["running_workflow"] == rwfid
246244

247245

248246
def test_create_instance():

tests/test_test_instance_launcher.py

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,3 @@
1-
import json
2-
31
import pytest
42

53
pytestmark = pytest.mark.unit

tests/test_workflow_engine_examples.py

Lines changed: 13 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -62,13 +62,12 @@ def start_workflow(md, da, workflow_file_name, variables) -> str:
6262
with open(workflow_path, "r", encoding="utf8") as wf_file:
6363
wf_definition = yaml.load(wf_file, Loader=yaml.FullLoader)
6464
assert wf_definition
65-
wfid = da.create_workflow(workflow_definition=wf_definition)
66-
assert wfid
67-
print(f"Created workflow definition {wfid}")
65+
wf_response = da.create_workflow(workflow_definition=wf_definition)
66+
print(f"Created workflow definition {wf_response}")
6867
# 2.
6968
response = da.create_running_workflow(
7069
user_id="dlister",
71-
workflow_id=wfid,
70+
workflow_id=wf_response["id"],
7271
project_id=TEST_PROJECT_ID,
7372
variables=variables,
7473
)
@@ -111,9 +110,7 @@ def wait_for_workflow(
111110
done = False
112111
while not done:
113112
response, _ = da.get_running_workflow(running_workflow_id=r_wfid)
114-
assert "running_workflow" in response
115-
r_wf = response["running_workflow"]
116-
if r_wf["done"]:
113+
if response["done"]:
117114
done = True
118115
else:
119116
attempts += 1
@@ -122,8 +119,8 @@ def wait_for_workflow(
122119
time.sleep(completion_poll_period_s)
123120
# When we get here the workflow must have finished (not timed-out),
124121
# and it must have passed (or failed) according the the caller's expectation.
125-
assert r_wf["done"]
126-
assert r_wf["success"] == expect_success
122+
assert response["done"]
123+
assert response["success"] == expect_success
127124

128125

129126
def test_workflow_engine_example_two_step_nop(basic_engine):
@@ -141,8 +138,8 @@ def test_workflow_engine_example_two_step_nop(basic_engine):
141138
response = da.get_running_workflow_steps(running_workflow_id=r_wfid)
142139
assert response["count"] == 2
143140
for step in response["running_workflow_steps"]:
144-
assert step["running_workflow_step"]["done"]
145-
assert step["running_workflow_step"]["success"]
141+
assert step["done"]
142+
assert step["success"]
146143

147144

148145
def test_workflow_engine_example_nop_fail(basic_engine):
@@ -158,8 +155,8 @@ def test_workflow_engine_example_nop_fail(basic_engine):
158155
# Check we only have one RunningWorkflowStep, and it failed
159156
response = da.get_running_workflow_steps(running_workflow_id=r_wfid)
160157
assert response["count"] == 1
161-
assert response["running_workflow_steps"][0]["running_workflow_step"]["done"]
162-
assert not response["running_workflow_steps"][0]["running_workflow_step"]["success"]
158+
assert response["running_workflow_steps"][0]["done"]
159+
assert not response["running_workflow_steps"][0]["success"]
163160

164161

165162
def test_workflow_engine_example_smiles_to_file(basic_engine):
@@ -180,8 +177,9 @@ def test_workflow_engine_example_smiles_to_file(basic_engine):
180177
# Additional, detailed checks...
181178
# Check we only have one RunningWorkflowStep, and it succeeded
182179
response = da.get_running_workflow_steps(running_workflow_id=r_wfid)
180+
print(f"^^^^^^ response={response}")
183181
assert response["count"] == 1
184-
assert response["running_workflow_steps"][0]["running_workflow_step"]["done"]
185-
assert response["running_workflow_steps"][0]["running_workflow_step"]["success"]
182+
assert response["running_workflow_steps"][0]["done"]
183+
assert response["running_workflow_steps"][0]["success"]
186184
# This test should generate a file in the simulated project directory
187185
assert project_file_exists(output_file)

tests/wapi_adapter.py

Lines changed: 13 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -83,9 +83,9 @@ def get_workflow(self, *, workflow_id: str) -> dict[str, Any]:
8383
workflow = Unpickler(pickle_file).load()
8484
UnitTestWorkflowAPIAdapter.lock.release()
8585

86-
response = (
87-
{"workflow": workflow[workflow_id]} if workflow_id in workflow else {}
88-
)
86+
response = workflow[workflow_id] if workflow_id in workflow else {}
87+
if response:
88+
response["id"] = workflow_id
8989
return response, 0
9090

9191
def get_running_workflow(self, *, running_workflow_id: str) -> dict[str, Any]:
@@ -96,7 +96,9 @@ def get_running_workflow(self, *, running_workflow_id: str) -> dict[str, Any]:
9696

9797
if running_workflow_id not in running_workflow:
9898
return {}
99-
return {"running_workflow": running_workflow[running_workflow_id]}, 0
99+
response = running_workflow[running_workflow_id]
100+
response["id"] = running_workflow_id
101+
return response, 0
100102

101103
def set_running_workflow_done(
102104
self,
@@ -155,9 +157,9 @@ def get_running_workflow_step(
155157

156158
if running_workflow_step_id not in running_workflow_step:
157159
return {}, 0
158-
return {
159-
"running_workflow_step": running_workflow_step[running_workflow_step_id]
160-
}, 0
160+
response = running_workflow_step[running_workflow_step_id]
161+
response["id"] = running_workflow_step_id
162+
return response, 0
161163

162164
def set_running_workflow_step_done(
163165
self,
@@ -243,8 +245,8 @@ def create_running_workflow(
243245
"user_api_token": "123456789",
244246
"done": False,
245247
"success": False,
246-
"workflow": workflow_id,
247-
"project_id": project_id,
248+
"workflow": {"id": workflow_id},
249+
"project": {"id": project_id},
248250
"variables": variables,
249251
}
250252
running_workflow[running_workflow_id] = record
@@ -282,6 +284,7 @@ def get_running_workflow_steps(self, *, running_workflow_id: str) -> dict[str, A
282284
steps = []
283285
for key, value in running_workflow_step.items():
284286
if value["running_workflow"] == running_workflow_id:
285-
item = {"running_workflow_step": value, "id": key}
287+
item = value
288+
item["id"] = key
286289
steps.append(item)
287290
return {"count": len(steps), "running_workflow_steps": steps}

workflow/workflow_abc.py

Lines changed: 6 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -83,14 +83,12 @@ def get_workflow(
8383
"""Get a Workflow Record by ID."""
8484
# If present this should return:
8585
# {
86-
# "workflow": {
87-
# "name": "workflow-name",
88-
# "steps": [
89-
# {
90-
# "name": "step-name"
91-
# }
92-
# ]
93-
# }
86+
# "name": "workflow-name",
87+
# "steps": [
88+
# {
89+
# "name": "step-name"
90+
# }
91+
# ]
9492
# }
9593
# If not present an empty dictionary should be returned.
9694
#
@@ -106,7 +104,6 @@ def get_running_workflow(
106104
"""Get a RunningWorkflow Record"""
107105
# Should return:
108106
# {
109-
# "running_workflow": {
110107
# "name": "workflow-name",
111108
# "user_id": "alan",
112109
# "user_api_token": "123456789",
@@ -124,7 +121,6 @@ def get_running_workflow(
124121
# "x": 1,
125122
# "y": 2,
126123
# },
127-
# }
128124
# }
129125
# If not present an empty dictionary should be returned.
130126

@@ -160,7 +156,6 @@ def get_running_workflow_step(
160156
"""Get a RunningWorkflowStep Record"""
161157
# Should return:
162158
# {
163-
# "running_workflow_step": {
164159
# "step:": "step-1234",
165160
# "done": False,
166161
# "success": false,
@@ -169,7 +164,6 @@ def get_running_workflow_step(
169164
# "running_workflow": {
170165
# "id": "r-workflow-00000000-0000-0000-0000-000000000001"
171166
# },
172-
# },
173167
# }
174168
# If not present an empty dictionary should be returned.
175169

0 commit comments

Comments
 (0)