Esempio n. 1
0
def test_class_name_restored_after_deserialization(clear_default_graph):
    """Serialization also stored the location of the function."""
    node = function_for_testing(graph=None)
    data = json.dumps(node.to_json())
    deserialized_node = INode.from_json(json.loads(data))

    assert node.class_name == "function_for_testing"
    assert deserialized_node.class_name == "function_for_testing"
Esempio n. 2
0
def test_serialize_function_node(clear_default_graph):
    """Serialization also stored the location of the function."""
    node = function_for_testing(graph=None)
    data = json.dumps(node.to_json())
    deserialized_node = INode.from_json(json.loads(data))
    assert node.__doc__ == deserialized_node.__doc__
    assert node.name == deserialized_node.name
    assert node.inputs.keys() == deserialized_node.inputs.keys()
    assert node.outputs.keys() == deserialized_node.outputs.keys()
    assert node.evaluate() == deserialized_node.evaluate()
Esempio n. 3
0
def _evaluate_node_in_process(identifier, nodes_data):
    """Evaluate a node when multiprocessing.

    1. Deserializing the node from the given nodes_data dict
    2. Retrieving upstream data from the nodes_data dict
    3. Evaluating the node
    4. Serializing the results back into the nodes_data

    Args:
        identifier (str): The identifier of the node to evaluate
        nodes_data (dict): Used like a "database" to store the nodes
    """
    from flowpipe.node import INode

    data = nodes_data[identifier]
    node = INode.from_json(data)

    for name, input_plug in data["inputs"].items():
        for input_identifier, output_plug in input_plug["connections"].items():
            upstream_node = INode.from_json(nodes_data[input_identifier])
            node.inputs[name].value = upstream_node.outputs[output_plug].value
        for sub_name, sub_plug in input_plug["sub_plugs"].items():
            for sub_id, sub_output in sub_plug["connections"].items():
                upstream_node = INode.from_json(nodes_data[sub_id])
                node.inputs[name][
                    sub_name
                ].value = upstream_node.all_outputs()[sub_output].value

    node.evaluate()

    for name, plug in node.outputs.items():
        data["outputs"][name]["value"] = plug.value
        for sub_name, sub_plug in plug._sub_plugs.items():
            if sub_name not in data["outputs"][name]["sub_plugs"]:
                data["outputs"][name]["sub_plugs"][
                    sub_name
                ] = sub_plug.serialize()
            data["outputs"][name]["sub_plugs"][sub_name][
                "value"
            ] = sub_plug.value

    nodes_data[identifier] = data
Esempio n. 4
0
def test_deserialize_from_json(mock_inspect, clear_default_graph):
    """De-serialize the node from json."""
    node1 = SquareNode('Node1')
    node2 = SquareFunctionNode(name='Node2')
    node1.inputs['in1'].value = 1
    node1.outputs['out'] >> node2.inputs['in1']
    node1.outputs['compound_out']['key'] >> node2.inputs['compound_in']['key']
    node1.outputs['compound_out']['1'] >> node2.inputs['compound_in']['1']

    node1.outputs['out'].value = 'value'
    node1.outputs['compound_out']['key'].value = 'value_key'
    node1.outputs['compound_out']['1'].value = 'value_1'

    node2.outputs['out'].value = 'value'
    node2.outputs['compound_out']['key'].value = 'value_key'
    node2.outputs['compound_out']['1'].value = 'value_1'

    deserialized_data = INode.from_json(node1.to_json()).to_json()
    assert deserialized_data == {
        'inputs': {
            'compound_in': {
                'connections': {},
                'name': 'compound_in',
                'value': None,
                'sub_plugs': {}
            },
            'in1': {
                'connections': {},
                'name': 'in1',
                'value': 1,
                'sub_plugs': {}
            }
        },
        'name': 'Node1',
        'outputs': {
            'compound_out': {
                'connections': {},
                'name': 'compound_out',
                'value': None,
                'sub_plugs': {
                    'key': {
                        'connections': {},
                        'name': 'compound_out.key',
                        'value': 'value_key'
                    },
                    '1': {
                        'connections': {},
                        'name': 'compound_out.1',
                        'value': 'value_1'
                    }
                }
            },
            'out': {
                'connections': {},
                'name': 'out',
                'value': 'value',
                'sub_plugs': {}
            }
        },
        'metadata': {},
        'module': 'test_node',
        'file_location': '/path/to/node/implementation.py',
        'identifier': node1.identifier,
        'cls': 'SquareNode'
    }

    deserialized_data2 = INode.from_json(node2.to_json()).to_json()
    assert deserialized_data2 == {
        'inputs': {
            'compound_in': {
                'connections': {},
                'name': 'compound_in',
                'value': None,
                'sub_plugs': {
                    '1': {
                        'connections': {},
                        'name': 'compound_in.1',
                        'value': 'value_1'
                    },
                    'key': {
                        'connections': {},
                        'name': 'compound_in.key',
                        'value': 'value_key'
                    }
                }
            },
            'in1': {
                'connections': {},
                'name': 'in1',
                'value': 'value',
                'sub_plugs': {}
            }
        },
        'name': 'Node2',
        'outputs': {
            'compound_out': {
                'connections': {},
                'name': 'compound_out',
                'value': None,
                'sub_plugs': {
                    'key': {
                        'connections': {},
                        'name': 'compound_out.key',
                        'value': 'value_key'
                    },
                    '1': {
                        'connections': {},
                        'name': 'compound_out.1',
                        'value': 'value_1'
                    }
                }
            },
            'out': {
                'connections': {},
                'name': 'out',
                'value': 'value',
                'sub_plugs': {}
            }
        },
        'metadata': {},
        'module': 'flowpipe.node',
        'file_location': '/path/to/node/implementation.py',
        'identifier': node2.identifier,
        'cls': 'FunctionNode',
        'func': {
            'module': 'test_node',
            'name': 'SquareFunctionNode'
        }
    }
Esempio n. 5
0
def test_deserialize_from_json(mock_inspect, clear_default_graph):
    """De-serialize the node from json."""
    node1 = SquareNode("Node1")
    node2 = SquareFunctionNode(name="Node2")
    node1.inputs["in1"].value = 1
    node1.outputs["out"] >> node2.inputs["in1"]
    node1.outputs["compound_out"]["key"] >> node2.inputs["compound_in"]["key"]
    node1.outputs["compound_out"]["1"] >> node2.inputs["compound_in"]["1"]

    node1.outputs["out"].value = "value"
    node1.outputs["compound_out"]["key"].value = "value_key"
    node1.outputs["compound_out"]["1"].value = "value_1"

    node2.outputs["out"].value = "value"
    node2.outputs["compound_out"]["key"].value = "value_key"
    node2.outputs["compound_out"]["1"].value = "value_1"

    deserialized_data = INode.from_json(node1.to_json()).to_json()
    assert deserialized_data == {
        "inputs": {
            "compound_in": {
                "connections": {},
                "name": "compound_in",
                "value": None,
                "sub_plugs": {},
            },
            "in1": {
                "connections": {},
                "name": "in1",
                "value": 1,
                "sub_plugs": {},
            },
        },
        "name": "Node1",
        "outputs": {
            "compound_out": {
                "connections": {},
                "name": "compound_out",
                "value": None,
                "sub_plugs": {
                    "key": {
                        "connections": {},
                        "name": "compound_out.key",
                        "value": "value_key",
                    },
                    "1": {
                        "connections": {},
                        "name": "compound_out.1",
                        "value": "value_1",
                    },
                },
            },
            "out": {
                "connections": {},
                "name": "out",
                "value": "value",
                "sub_plugs": {},
            },
        },
        "metadata": {},
        "module": "test_node",
        "file_location": "/path/to/node/implementation.py",
        "identifier": node1.identifier,
        "cls": "SquareNode",
    }

    deserialized_data2 = INode.from_json(node2.to_json()).to_json()
    assert deserialized_data2 == {
        "inputs": {
            "compound_in": {
                "connections": {},
                "name": "compound_in",
                "value": None,
                "sub_plugs": {
                    "1": {
                        "connections": {},
                        "name": "compound_in.1",
                        "value": "value_1",
                    },
                    "key": {
                        "connections": {},
                        "name": "compound_in.key",
                        "value": "value_key",
                    },
                },
            },
            "in1": {
                "connections": {},
                "name": "in1",
                "value": "value",
                "sub_plugs": {},
            },
        },
        "name": "Node2",
        "outputs": {
            "compound_out": {
                "connections": {},
                "name": "compound_out",
                "value": None,
                "sub_plugs": {
                    "key": {
                        "connections": {},
                        "name": "compound_out.key",
                        "value": "value_key",
                    },
                    "1": {
                        "connections": {},
                        "name": "compound_out.1",
                        "value": "value_1",
                    },
                },
            },
            "out": {
                "connections": {},
                "name": "out",
                "value": "value",
                "sub_plugs": {},
            },
        },
        "metadata": {},
        "module": "flowpipe.node",
        "file_location": "/path/to/node/implementation.py",
        "identifier": node2.identifier,
        "cls": "FunctionNode",
        "func": {"module": "test_node", "name": "SquareFunctionNode"},
    }