Meshroom/tests/test_pipeline.py
Candice Bentéjac 28042dd2ad [tests] Harmonize and clean-up syntax across test files
Also comply more with PEP8 linting rules.
2025-06-05 14:40:09 +02:00

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