Skip to content

Commit 67116ec

Browse files
committed
Convert nodes to list of dictionaries
1 parent 2efbdf1 commit 67116ec

File tree

7 files changed

+38
-29
lines changed

7 files changed

+38
-29
lines changed

python_workflow_definition/src/python_workflow_definition/aiida.py

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
import json
66
from aiida import orm
77

8+
from python_workflow_definition.shared import convert_nodes_list_to_dict
89

910

1011
def load_workflow_json(file_name):
@@ -14,7 +15,7 @@ def load_workflow_json(file_name):
1415
wg = WorkGraph()
1516
task_name_mapping = {}
1617

17-
for id, identifier in data["nodes"].items():
18+
for id, identifier in convert_nodes_list_to_dict(nodes_list=data["nodes"]).items():
1819
if isinstance(identifier, str) and "." in identifier:
1920
p, m = identifier.rsplit(".", 1)
2021
mod = import_module(p)
@@ -66,7 +67,7 @@ def load_workflow_json(file_name):
6667

6768
def write_workflow_json(wg, file_name):
6869
from aiida_workgraph.socket import TaskSocketNamespace
69-
data = {"nodes": {}, "edges": []}
70+
data = {"nodes": [], "edges": []}
7071
node_name_mapping = {}
7172
data_node_name_mapping = {}
7273
i = 0
@@ -76,7 +77,7 @@ def write_workflow_json(wg, file_name):
7677

7778
callable_name = executor["callable_name"]
7879
callable_name = f"{executor['module_path']}.{callable_name}"
79-
data["nodes"][str(i)] = callable_name
80+
data["nodes"].append({"id": i, "value": callable_name})
8081
i += 1
8182

8283
for link in wg.links:
@@ -105,7 +106,7 @@ def write_workflow_json(wg, file_name):
105106
raw_value.pop("node_type", None)
106107
else:
107108
raw_value = input.value.value
108-
data["nodes"][str(i)] = raw_value
109+
data["nodes"].append({"id": i, "value": raw_value})
109110
input_node_name = i
110111
data_node_name_mapping[input.value.uuid] = input_node_name
111112
i += 1

python_workflow_definition/src/python_workflow_definition/executorlib.py

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
from inspect import isfunction
44

55

6-
from python_workflow_definition.shared import get_dict, get_list, get_kwargs, get_source_handles
6+
from python_workflow_definition.shared import get_dict, get_list, get_kwargs, get_source_handles, convert_nodes_list_to_dict
77
from python_workflow_definition.purepython import resort_total_lst, group_edges
88

99

@@ -31,7 +31,8 @@ def load_workflow_json(file_name, exe):
3131

3232
edges_new_lst = content["edges"]
3333
nodes_new_dict = {}
34-
for k, v in content["nodes"].items():
34+
35+
for k, v in convert_nodes_list_to_dict(nodes_list=content["nodes"]).items():
3536
if isinstance(v, str) and "." in v:
3637
p, m = v.rsplit('.', 1)
3738
mod = import_module(p)

python_workflow_definition/src/python_workflow_definition/jobflow.py

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
import numpy as np
66
from jobflow import job, Flow
77

8-
from python_workflow_definition.shared import get_dict, get_list, get_kwargs, get_source_handles
8+
from python_workflow_definition.shared import get_dict, get_list, get_kwargs, get_source_handles, convert_nodes_list_to_dict
99

1010

1111
def _get_function_dict(flow):
@@ -173,7 +173,7 @@ def load_workflow_json(file_name):
173173
)
174174

175175
nodes_new_dict = {}
176-
for k, v in content["nodes"].items():
176+
for k, v in convert_nodes_list_to_dict(nodes_list=content["nodes"]).items():
177177
if isinstance(v, str) and "." in v:
178178
p, m = v.rsplit('.', 1)
179179
mod = import_module(p)
@@ -204,14 +204,14 @@ def write_workflow_json(flow, file_name="workflow.json"):
204204
nodes_dict=nodes_dict,
205205
)
206206

207-
nodes_store_dict = {}
207+
nodes_store_lst = []
208208
for k, v in nodes_dict.items():
209209
if isfunction(v):
210-
nodes_store_dict[k] = v.__module__ + "." + v.__name__
210+
nodes_store_lst.append({"id": k, "value": v.__module__ + "." + v.__name__})
211211
elif isinstance(v, np.ndarray):
212-
nodes_store_dict[k] = v.tolist()
212+
nodes_store_lst.append({"id": k, "value": v.tolist()})
213213
else:
214-
nodes_store_dict[k] = v
214+
nodes_store_lst.append({"id": k, "value": v})
215215

216216
with open(file_name, "w") as f:
217-
json.dump({"nodes": nodes_store_dict, "edges": edges_lst}, f)
217+
json.dump({"nodes": nodes_store_lst, "edges": edges_lst}, f)

python_workflow_definition/src/python_workflow_definition/purepython.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
from inspect import isfunction
44

55

6-
from python_workflow_definition.shared import get_dict, get_list, get_kwargs, get_source_handles
6+
from python_workflow_definition.shared import get_dict, get_list, get_kwargs, get_source_handles, convert_nodes_list_to_dict
77

88

99
def resort_total_lst(total_lst, nodes_dict):
@@ -55,7 +55,7 @@ def load_workflow_json(file_name):
5555

5656
edges_new_lst = content["edges"]
5757
nodes_new_dict = {}
58-
for k, v in content["nodes"].items():
58+
for k, v in convert_nodes_list_to_dict(nodes_list=content["nodes"]).items():
5959
if isinstance(v, str) and "." in v:
6060
p, m = v.rsplit('.', 1)
6161
mod = import_module(p)

python_workflow_definition/src/python_workflow_definition/pyiron_base.py

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
from pyiron_base import job
77
from pyiron_base.project.delayed import DelayedObject
88

9-
from python_workflow_definition.shared import get_kwargs, get_source_handles
9+
from python_workflow_definition.shared import get_kwargs, get_source_handles, convert_nodes_list_to_dict
1010

1111

1212
def _resort_total_lst(total_lst, nodes_dict):
@@ -181,7 +181,7 @@ def load_workflow_json(project, file_name):
181181

182182
edges_new_lst = content["edges"]
183183
nodes_new_dict = {}
184-
for k, v in content["nodes"].items():
184+
for k, v in convert_nodes_list_to_dict(nodes_list=content["nodes"]).items():
185185
if isinstance(v, str) and "." in v:
186186
p, m = v.rsplit('.', 1)
187187
if p == "python_workflow_definition.shared":
@@ -211,17 +211,17 @@ def write_workflow_json(delayed_object, file_name="workflow.json"):
211211
nodes_new_dict = _get_nodes(connection_dict=connection_dict, delayed_object_updated_dict=delayed_object_updated_dict)
212212
edges_new_lst = _get_edges_dict(edges_lst=edges_lst, nodes_dict=nodes_dict, connection_dict=connection_dict, lookup_dict=lookup_dict)
213213

214-
nodes_store_dict = {}
214+
nodes_store_lst = []
215215
for k, v in nodes_new_dict.items():
216216
if isfunction(v):
217217
mod = v.__module__
218218
if mod == "python_workflow_definition.pyiron_base":
219219
mod = "python_workflow_definition.shared"
220-
nodes_store_dict[k] = mod + "." + v.__name__
220+
nodes_store_lst.append({"id": k, "value": mod + "." + v.__name__})
221221
elif isinstance(v, np.ndarray):
222-
nodes_store_dict[k] = v.tolist()
222+
nodes_store_lst.append({"id": k, "value": v.tolist()})
223223
else:
224-
nodes_store_dict[k] = v
224+
nodes_store_lst.append({"id": k, "value": v})
225225

226226
with open(file_name, "w") as f:
227-
json.dump({"nodes": nodes_store_dict, "edges": edges_new_lst}, f)
227+
json.dump({"nodes": nodes_store_lst, "edges": edges_new_lst}, f)

python_workflow_definition/src/python_workflow_definition/shared.py

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,4 +22,11 @@ def get_source_handles(edges_lst):
2222
return {
2323
k: list(range(len(v))) if len(v) > 1 and all([el is None for el in v]) else v
2424
for k, v in source_handle_dict.items()
25-
}
25+
}
26+
27+
28+
def convert_nodes_list_to_dict(nodes_list):
29+
return {
30+
str(el["id"]): el["value"]
31+
for el in sorted(nodes_list, key=lambda d: d["id"])
32+
}

workflow_simple.json

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
11
{
2-
"nodes": {
3-
"0": "simple_workflow.add_x_and_y",
4-
"1": "simple_workflow.add_x_and_y_and_z",
5-
"2": 1,
6-
"3": 2
7-
},
2+
"nodes": [
3+
{"id": 0, "value": "simple_workflow.add_x_and_y"},
4+
{"id": 1, "value": "simple_workflow.add_x_and_y_and_z"},
5+
{"id": 2, "value": 1},
6+
{"id": 3, "value": 2}
7+
],
88
"edges": [
99
{"tn": 0, "th": "x", "sn": 2, "sh": null},
1010
{"tn": 0, "th": "y", "sn": 3, "sh": null},

0 commit comments

Comments
 (0)