def test_dereference_multiple_result_node():
    with pytest.raises(ValueError, match="Multiple result nodes"):
        ProcessGraphVisitor.dereference_from_node_arguments({
            "node1": {
                "result": True
            },
            "node2": {
                "result": True
            }
        })
Exemplo n.º 2
0
def test_dereference_invalid_node():
    graph = {
        "node1": {},
        "node2": {
            "arguments": {
                "data": {
                    "from_node": "node3"
                }
            },
            "result": True
        }
    }
    with pytest.raises(ValueError, match="not in process graph"):
        ProcessGraphVisitor.dereference_from_node_arguments(graph)
Exemplo n.º 3
0
def test_dereference_list_arg():
    graph = {
        "start": {"process_id": "constant", "arguments": {"x": "2020-02-02"}},
        "end": {"process_id": "constant", "arguments": {"x": "2020-03-03"}},
        "temporal": {
            "process_id": "filter_temporal",
            "arguments": {
                "extent": [{"from_node": "start"}, {"from_node": "end"}],
            },
            "result": True,
        },
    }
    result = ProcessGraphVisitor.dereference_from_node_arguments(graph)
    assert result == "temporal"
    assert graph == {
        "start": {"process_id": "constant", "arguments": {"x": "2020-02-02"}},
        "end": {"process_id": "constant", "arguments": {"x": "2020-03-03"}},
        "temporal": {
            "process_id": "filter_temporal",
            "arguments": {
                "extent": [
                    {"process_id": "constant", "arguments": {"x": "2020-02-02"}},
                    {"process_id": "constant", "arguments": {"x": "2020-03-03"}},
                ],
            },
            "result": True,
        },
    }
Exemplo n.º 4
0
def test_dereference_cycle():
    graph = {
        "node1": {
            "arguments": {
                "data": {"from_node": "node2"},
            },
            "result": True
        },
        "node2": {
            "arguments": {
                "data": {"from_node": "node1"},
            }
        }
    }
    ProcessGraphVisitor.dereference_from_node_arguments(graph)
    assert graph["node1"]["arguments"]["data"]["node"] is graph["node2"]
    assert graph["node2"]["arguments"]["data"]["node"] is graph["node1"]
def test_visit_array_with_dereferenced_nodes():
    graph = {
        'arrayelement1': {
            'arguments': {
                'data': {
                    'from_argument': 'data'
                },
                'index': 2
            },
            'process_id': 'array_element',
            'result': False
        },
        'product1': {
            'process_id': 'product',
            'arguments': {
                'data': [{
                    'from_node': 'arrayelement1'
                }, -1]
            },
            'result': True
        }
    }
    top = ProcessGraphVisitor.dereference_from_node_arguments(graph)
    dereferenced = graph[top]
    assert dereferenced["arguments"]["data"][0]["arguments"]["data"][
        "from_argument"] == "data"

    visitor = ProcessGraphVisitor()
    visitor.leaveProcess = MagicMock()
    visitor.enterArgument = MagicMock()
    visitor.enterArray = MagicMock()
    visitor.arrayElementDone = MagicMock()
    visitor.constantArrayElement = MagicMock()

    visitor.accept(dereferenced)
    assert visitor.leaveProcess.call_args_list == [
        call(process_id='array_element', arguments=ANY),
        call(process_id='product', arguments=ANY)
    ]
    assert visitor.enterArgument.call_args_list == [
        call(argument_id="data", value={'from_argument': 'data'})
    ]
    assert visitor.enterArray.call_args_list == [call(argument_id="data")]
    assert visitor.arrayElementDone.call_args_list == [
        call({
            "process_id": "array_element",
            "arguments": {
                "data": {
                    "from_argument": "data"
                },
                "index": 2
            },
            "result": False
        })
    ]
    assert visitor.constantArrayElement.call_args_list == [call(-1)]
def test_create_wmts_040(api040):
    process_graph = api040.load_json("filter_temporal.json")
    post_data = {
        "type": 'WMTS',
        "process_graph": process_graph,
        "custom_param": 45,
        "title": "My Service",
        "description": "Service description"
    }
    resp = api040.post('/services', json=post_data).assert_status_code(201)
    assert resp.headers['OpenEO-Identifier'] == 'c63d6c27-c4c2-4160-b7bd-9e32f582daec'
    assert resp.headers['Location'].endswith("/services/c63d6c27-c4c2-4160-b7bd-9e32f582daec")

    tiled_viewing_service = api040.collections["S2_FOOBAR"].tiled_viewing_service
    assert tiled_viewing_service.call_count == 1
    ProcessGraphVisitor.dereference_from_node_arguments(process_graph)
    tiled_viewing_service.assert_called_with(
        service_type="WMTS",
        process_graph=process_graph,
        post_data=post_data
    )
Exemplo n.º 7
0
def test_dereference_basic():
    graph = {
        "node1": {},
        "node2": {
            "arguments": {
                "data1": {
                    "from_node": "node1"
                },
                "data2": {
                    "from_node": "node3"
                }
            },
            "result": True
        },
        "node3": {
            "arguments": {
                "data": {
                    "from_node": "node4"
                }
            }
        },
        "node4": {}
    }
    result = ProcessGraphVisitor.dereference_from_node_arguments(graph)

    assert result == "node2"
    assert graph["node1"] == graph["node2"]["arguments"]["data1"]["node"]
    assert graph["node3"] == graph["node2"]["arguments"]["data2"]["node"]
    assert graph["node4"] == graph["node3"]["arguments"]["data"]["node"]
    assert graph == {
        "node1": {},
        "node2": {
            "arguments": {
                "data1": {"from_node": "node1", "node": {}},
                "data2": {"from_node": "node3", "node": {
                    "arguments": {
                        "data": {"from_node": "node4", "node": {}},
                    }
                }},
            },
            "result": True
        },
        "node3": {
            "arguments": {
                "data": {"from_node": "node4", "node": {}},
            }
        },
        "node4": {}

    }
Exemplo n.º 8
0
def evaluate(processGraph: dict, viewingParameters=None) -> ImageCollection:
    """
    Converts the json representation of a (part of a) process graph into the corresponding Python ImageCollection.
    :param processGraph:
    :param viewingParameters:
    :return:  an ImageCollection
    """
    if viewingParameters is None:
        warnings.warn("Blindly assuming 0.4.0")
        viewingParameters = {'version': '0.4.0'}
    # TODO avoid local import
    from openeo.internal.process_graph_visitor import ProcessGraphVisitor
    top_level_node = ProcessGraphVisitor.dereference_from_node_arguments(
        processGraph)
    return convert_node(processGraph[top_level_node], viewingParameters)
Exemplo n.º 9
0
def test_dereference_dict_arg():
    graph = {
        "west": {"process_id": "add", "arguments": {"x": 1, "y": 1}},
        "east": {"process_id": "add", "arguments": {"x": 2, "y": 3}},
        "bbox": {
            "process_id": "filter_bbox",
            "arguments": {
                "extent": {
                    "west": {"from_node": "west"},
                    "east": {"from_node": "east"},
                }
            },
            "result": True,
        }
    }
    result = ProcessGraphVisitor.dereference_from_node_arguments(graph)
    assert result == "bbox"
    assert graph == {
        "west": {"process_id": "add", "arguments": {"x": 1, "y": 1}},
        "east": {"process_id": "add", "arguments": {"x": 2, "y": 3}},
        "bbox": {
            "process_id": "filter_bbox",
            "arguments": {
                "extent": {
                    "west": {
                        "from_node": "west",
                        "node": {"process_id": "add", "arguments": {"x": 1, "y": 1}},
                    },
                    "east": {
                        "from_node": "east",
                        "node": {"process_id": "add", "arguments": {"x": 2, "y": 3}},
                    },
                }
            },
            "result": True,
        }
    }
Exemplo n.º 10
0
def test_dereference_no_result_node():
    with pytest.raises(ValueError, match="does not contain a result node"):
        ProcessGraphVisitor.dereference_from_node_arguments({
            "node1": {},
            "node2": {}
        })