Spaces:
Running
Running
import os | |
import pytest | |
import tempfile | |
from lynxkite.core import workspace | |
def test_save_load(): | |
ws = workspace.Workspace(env="test") | |
ws.nodes.append( | |
workspace.WorkspaceNode( | |
id="1", | |
type="node_type", | |
data=workspace.WorkspaceNodeData(title="Node 1", params={}), | |
position=workspace.Position(x=0, y=0), | |
) | |
) | |
ws.nodes.append( | |
workspace.WorkspaceNode( | |
id="2", | |
type="node_type", | |
data=workspace.WorkspaceNodeData(title="Node 2", params={}), | |
position=workspace.Position(x=0, y=0), | |
) | |
) | |
ws.edges.append( | |
workspace.WorkspaceEdge( | |
id="edge1", | |
source="1", | |
target="2", | |
sourceHandle="", | |
targetHandle="", | |
) | |
) | |
path = os.path.join(tempfile.gettempdir(), "test_workspace.json") | |
try: | |
workspace.save(ws, path) | |
assert os.path.exists(path) | |
loaded_ws = workspace.load(path) | |
assert loaded_ws.env == ws.env | |
assert len(loaded_ws.nodes) == len(ws.nodes) | |
assert len(loaded_ws.edges) == len(ws.edges) | |
sorted_ws_nodes = sorted(ws.nodes, key=lambda x: x.id) | |
sorted_loaded_ws_nodes = sorted(loaded_ws.nodes, key=lambda x: x.id) | |
# We do manual assertion on each attribute because metadata is added at | |
# loading time, which makes the objects different. | |
for node, loaded_node in zip(sorted_ws_nodes, sorted_loaded_ws_nodes): | |
assert node.id == loaded_node.id | |
assert node.type == loaded_node.type | |
assert node.data.title == loaded_node.data.title | |
assert node.data.params == loaded_node.data.params | |
assert node.position.x == loaded_node.position.x | |
assert node.position.y == loaded_node.position.y | |
sorted_ws_edges = sorted(ws.edges, key=lambda x: x.id) | |
sorted_loaded_ws_edges = sorted(loaded_ws.edges, key=lambda x: x.id) | |
for edge, loaded_edge in zip(sorted_ws_edges, sorted_loaded_ws_edges): | |
assert edge.id == loaded_edge.id | |
assert edge.source == loaded_edge.source | |
assert edge.target == loaded_edge.target | |
assert edge.sourceHandle == loaded_edge.sourceHandle | |
assert edge.targetHandle == loaded_edge.targetHandle | |
finally: | |
os.remove(path) | |
def populate_ops_catalog(): | |
from lynxkite.core import ops | |
ops.register_passive_op("test", "Test Operation", []) | |
def test_update_metadata(): | |
ws = workspace.Workspace(env="test") | |
ws.nodes.append( | |
workspace.WorkspaceNode( | |
id="1", | |
type="basic", | |
data=workspace.WorkspaceNodeData(title="Test Operation", params={}), | |
position=workspace.Position(x=0, y=0), | |
) | |
) | |
ws.nodes.append( | |
workspace.WorkspaceNode( | |
id="2", | |
type="basic", | |
data=workspace.WorkspaceNodeData(title="Unknown Operation", params={}), | |
position=workspace.Position(x=0, y=0), | |
) | |
) | |
updated_ws = workspace._update_metadata(ws) | |
assert updated_ws.nodes[0].data.meta.name == "Test Operation" | |
assert updated_ws.nodes[0].data.error is None | |
assert not hasattr(updated_ws.nodes[1].data, "meta") | |
assert updated_ws.nodes[1].data.error == "Unknown operation." | |
def test_update_metadata_with_empty_workspace(): | |
ws = workspace.Workspace(env="test") | |
updated_ws = workspace._update_metadata(ws) | |
assert len(updated_ws.nodes) == 0 | |