Meshroom/tests/test_templatesVersion.py
Candice Bentéjac b470078667 [tests] Add checks on internal attributes in the templatesVersion test
If some internal attributes are saved in the templates, their description
should be checked just like the input attributes to ensure there are no
conflicts.
2023-02-15 08:36:14 +00:00

58 lines
2.2 KiB
Python

#!/usr/bin/env python
# coding:utf-8
from meshroom.core.graph import Graph
from meshroom.core import pipelineTemplates, Version
from meshroom.core.node import CompatibilityIssue, CompatibilityNode
import json
import meshroom
def test_templateVersions():
"""
This test checks that there is no compatibility issue with the nodes saved in the template files.
It fails when an upgrade of a templates is needed. Any template can still be opened even if its
nodes are not up-to-date, as they will be automatically upgraded.
"""
assert len(pipelineTemplates) >= 1
for _, path in pipelineTemplates.items():
with open(path) as jsonFile:
fileData = json.load(jsonFile)
graphData = fileData.get(Graph.IO.Keys.Graph, fileData)
assert isinstance(graphData, dict)
header = fileData.get(Graph.IO.Keys.Header, {})
assert header.get("template", False)
nodesVersions = header.get(Graph.IO.Keys.NodesVersions, {})
for _, nodeData in graphData.items():
nodeType = nodeData["nodeType"]
assert nodeType in meshroom.core.nodesDesc
nodeDesc = meshroom.core.nodesDesc[nodeType]
currentNodeVersion = meshroom.core.nodeVersion(nodeDesc)
inputs = nodeData.get("inputs", {})
internalInputs = nodeData.get("internalInputs", {})
version = nodesVersions.get(nodeType, None)
compatibilityIssue = None
if version and currentNodeVersion and Version(version).major != Version(currentNodeVersion).major:
compatibilityIssue = CompatibilityIssue.VersionConflict
else:
for attrName, value in inputs.items():
if not CompatibilityNode.attributeDescFromName(nodeDesc.inputs, attrName, value):
compatibilityIssue = CompatibilityIssue.DescriptionConflict
break
for attrName, value in internalInputs.items():
if not CompatibilityNode.attributeDescFromName(nodeDesc.internalInputs, attrName, value):
compatibilityIssue = CompatibilityIssue.DescriptionConflict
break
assert compatibilityIssue is None