def test_serialize_graph(): """ +------------+ +------------+ +--------------------+ | Start | | Node2 | | End | |------------| |------------| |--------------------| o in1<0> | +--->o in1<> | % in1 | o in2<0> | | o in2<0> | +--->o in1.1<> | | out o-----+ | out o-----|--->o in1.2<> | | out2 o | | out2 o | o in2<0> | +------------+ | +------------+ | | out o | +------------+ | | out2 o | | Node1 | | +--------------------+ | |------------| | +--->o in1<> | | o in2<0> | | | out o-----+ | out2 o +------------+ """ graph = Graph() start = NodeForTesting(name='Start', graph=graph) n1 = NodeForTesting(name='Node1', graph=graph) n2 = NodeForTesting(name='Node2', graph=graph) end = NodeForTesting(name='End', graph=graph) start.outputs['out'] >> n1.inputs['in1'] start.outputs['out'] >> n2.inputs['in1'] n1.outputs['out'] >> end.inputs['in1']['1'] n2.outputs['out'] >> end.inputs['in1']['2'] serialized = graph.serialize() deserialized = graph.deserialize(serialized).serialize() assert serialized == deserialized
def open(self): json_file = QtWidgets.QFileDialog.getOpenFileName( self, "Open JSON graph file", "", "JSON Files (*.json)")[0] if not json_file: return json_data = None with open(json_file, "r") as f: json_data = json.load(f) graph = Graph.deserialize(json_data) w.load_graph(graph)
def test_serialize_graph(): """Serialize the graph to a json-serializable dictionary.""" start = NodeForTesting('start') n11 = NodeForTesting('11') n12 = NodeForTesting('12') n21 = NodeForTesting('21') n31 = NodeForTesting('31') n32 = NodeForTesting('32') n33 = NodeForTesting('33') end = NodeForTesting('end') # Connect them start.outputs['out'] >> n11.inputs['in1'] start.outputs['out'] >> n21.inputs['in1'] start.outputs['out'] >> n31.inputs['in1'] n31.outputs['out'] >> n32.inputs['in1'] n32.outputs['out'] >> n33.inputs['in1'] n11.outputs['out'] >> n12.inputs['in1'] n33.outputs['out'] >> n12.inputs['in2'] n12.outputs['out'] >> end.inputs['in1'] n21.outputs['out'] >> end.inputs['in2'] nodes = [start, n11, n12, n21, n31, n32, n33, end] graph = Graph(nodes=nodes) serialized = graph.serialize() deserialized = graph.deserialize(serialized) assert len(deserialized.nodes) == len(graph.nodes) assert graph.identifier == deserialized.identifier assert graph.name == deserialized.name # Connections need to be deserialized as well for i in range(len(graph.nodes)): assert graph.nodes[i].identifier == deserialized.nodes[i].identifier # inputs for name, plug in graph.nodes[i].inputs.items(): ds_plug = deserialized.nodes[i].inputs[name] for j in range(len(plug.connections)): connection = plug.connections[j] ds_connection = ds_plug.connections[j] assert ds_connection.name == connection.name assert ds_connection.node.identifier == connection.node.identifier # outputs for name, plug in graph.nodes[i].outputs.items(): ds_plug = deserialized.nodes[i].outputs[name] for j in range(len(plug.connections)): connection = plug.connections[j] ds_connection = ds_plug.connections[j] assert ds_connection.name == connection.name assert ds_connection.node.name == connection.node.name