mirror of
https://github.com/alicevision/Meshroom.git
synced 2025-06-15 17:21:56 +02:00
79 lines
3.2 KiB
Python
79 lines
3.2 KiB
Python
#!/usr/bin/env python
|
|
# coding:utf-8
|
|
import os
|
|
import tempfile
|
|
|
|
import meshroom.multiview
|
|
from meshroom.core.graph import loadGraph
|
|
from meshroom.core.node import Node
|
|
|
|
|
|
def test_pipeline():
|
|
meshroom.core.initNodes()
|
|
meshroom.core.initPipelines()
|
|
|
|
graph1InputFiles = ["/non/existing/file1", "/non/existing/file2"]
|
|
graph1 = loadGraph(meshroom.core.pipelineTemplates["appendTextAndFiles"])
|
|
graph1.name = "graph1"
|
|
graph1AppendText1 = graph1.node("AppendText_1")
|
|
graph1AppendText1.input.value = graph1InputFiles[0]
|
|
graph1AppendText2 = graph1.node("AppendText_2")
|
|
graph1AppendText2.input.value = graph1InputFiles[1]
|
|
|
|
assert graph1.findNode("AppendFiles").input.value == graph1AppendText1.output.value
|
|
assert graph1.findNode("AppendFiles").input2.value == graph1AppendText2.output.value
|
|
assert graph1.findNode("AppendFiles").input3.value == graph1InputFiles[0]
|
|
assert graph1.findNode("AppendFiles").input4.value == graph1InputFiles[1]
|
|
|
|
assert not graph1AppendText1.input.isDefault
|
|
assert graph1AppendText2.input.getPrimitiveValue() == graph1InputFiles[1]
|
|
|
|
graph2InputFiles = ["/non/existing/file", ""]
|
|
graph2 = loadGraph(meshroom.core.pipelineTemplates["appendTextAndFiles"])
|
|
graph2.name = "graph2"
|
|
graph2AppendText1 = graph2.node("AppendText_1")
|
|
graph2AppendText1.input.value = graph2InputFiles[0]
|
|
graph2AppendText2 = graph2.node("AppendText_2")
|
|
graph2AppendText2.input.value = graph2InputFiles[1]
|
|
|
|
# Ensure that all output UIDs are different as the input is different:
|
|
# graph1 != graph2
|
|
for node in graph1.nodes:
|
|
otherNode = graph2.node(node.name)
|
|
for key, attr in node.attributes.items():
|
|
if attr.isOutput and attr.enabled:
|
|
otherAttr = otherNode.attribute(key)
|
|
assert attr.uid() != otherAttr.uid()
|
|
|
|
# Test serialization/deserialization on both graphs
|
|
for graph in [graph1, graph2]:
|
|
filename = tempfile.mktemp()
|
|
graph.save(filename)
|
|
loadedGraph = loadGraph(filename)
|
|
os.remove(filename)
|
|
# Check that all nodes have been properly de-serialized
|
|
# - Same node set
|
|
assert sorted([n.name for n in loadedGraph.nodes]) == sorted([n.name for n in graph.nodes])
|
|
# - No compatibility issues
|
|
assert all(isinstance(n, Node) for n in loadedGraph.nodes)
|
|
# - Same UIDs for every node
|
|
assert sorted([n._uid for n in loadedGraph.nodes]) == sorted([n._uid for n in graph.nodes])
|
|
|
|
# Graph 2b, set with identical parameters as graph 2
|
|
graph2b = loadGraph(meshroom.core.pipelineTemplates["appendTextAndFiles"])
|
|
graph2b.name = "graph2b"
|
|
graph2bAppendText1 = graph2b.node("AppendText_1")
|
|
graph2bAppendText1.input.value = graph2InputFiles[0]
|
|
graph2bAppendText2 = graph2b.node("AppendText_2")
|
|
graph2bAppendText2.input.value = graph2InputFiles[1]
|
|
|
|
# Ensure that graph2 == graph2b
|
|
nodes, edges = graph2.dfsOnFinish()
|
|
for node in nodes:
|
|
otherNode = graph2b.node(node.name)
|
|
for key, attr in node.attributes.items():
|
|
otherAttr = otherNode.attribute(key)
|
|
if attr.isOutput and attr.enabled:
|
|
assert attr.uid() == otherAttr.uid()
|
|
else:
|
|
assert attr.uid() == otherAttr.uid()
|