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 | |