From 98d90dae81276b72af0872a12af61c02467fcce9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Candice=20Bent=C3=A9jac?= Date: Thu, 22 May 2025 16:17:20 +0200 Subject: [PATCH] [core] plugins: Rename `getNodePlugin...` to `getRegisteredNodePlugin...` This prevents ambiguities between `NodePlugin` objects that have been registered (and are thus instantiable) and those that belong to `Plugin` objects but have not been registered. --- meshroom/core/node.py | 6 +++--- meshroom/core/nodeFactory.py | 2 +- meshroom/core/plugins.py | 4 ++-- meshroom/core/test.py | 4 ++-- meshroom/ui/app.py | 2 +- meshroom/ui/reconstruction.py | 4 ++-- tests/test_compatibility.py | 12 ++++++------ 7 files changed, 17 insertions(+), 17 deletions(-) diff --git a/meshroom/core/node.py b/meshroom/core/node.py index 6d608ab4..ddf8931d 100644 --- a/meshroom/core/node.py +++ b/meshroom/core/node.py @@ -642,9 +642,9 @@ class BaseNode(BaseObject): self.nodePlugin: plugins.Plugin = None # instantiate node description if nodeType is valid - if meshroom.core.pluginManager.getNodePlugin(nodeType): - self.nodeDesc = meshroom.core.pluginManager.getNodePlugin(nodeType).nodeDescriptor() - self.nodePlugin = meshroom.core.pluginManager.getNodePlugin(nodeType) + if meshroom.core.pluginManager.getRegisteredNodePlugin(nodeType): + self.nodeDesc = meshroom.core.pluginManager.getRegisteredNodePlugin(nodeType).nodeDescriptor() + self.nodePlugin = meshroom.core.pluginManager.getRegisteredNodePlugin(nodeType) self.packageName: str = "" self.packageVersion: str = "" diff --git a/meshroom/core/nodeFactory.py b/meshroom/core/nodeFactory.py index 1b3e678f..ed4c8977 100644 --- a/meshroom/core/nodeFactory.py +++ b/meshroom/core/nodeFactory.py @@ -56,7 +56,7 @@ class _NodeCreator: self.uid = self.nodeData.get("uid", None) self.nodeDesc = None if meshroom.core.pluginManager.isRegistered(self.nodeType): - self.nodeDesc = meshroom.core.pluginManager.getNodePlugin(self.nodeType).nodeDescriptor + self.nodeDesc = meshroom.core.pluginManager.getRegisteredNodePlugin(self.nodeType).nodeDescriptor def create(self) -> Union[Node, CompatibilityNode]: compatibilityIssue = self._checkCompatibilityIssues() diff --git a/meshroom/core/plugins.py b/meshroom/core/plugins.py index 027fe3fb..ac8c92a9 100644 --- a/meshroom/core/plugins.py +++ b/meshroom/core/plugins.py @@ -262,14 +262,14 @@ class NodePluginManager(BaseObject): if not self.getPlugin(plugin.name): self._plugins[plugin.name] = plugin - def getNodePlugins(self) -> dict[str: NodePlugin]: + def getRegisteredNodePlugins(self) -> dict[str: NodePlugin]: """ Return a dictionary containing all the registered NodePlugins, with {key, value} = {name, NodePlugin}. """ return self._nodePlugins - def getNodePlugin(self, name: str) -> NodePlugin: + def getRegisteredNodePlugin(self, name: str) -> NodePlugin: """ Return the NodePlugin object that has been registered under the name "name" if it exists. diff --git a/meshroom/core/test.py b/meshroom/core/test.py index 5bd92435..2ea2a1c0 100644 --- a/meshroom/core/test.py +++ b/meshroom/core/test.py @@ -31,7 +31,7 @@ def checkTemplateVersions(path: str, nodesAlreadyLoaded: bool = False) -> bool: if not meshroom.core.pluginManager.isRegistered(nodeType): return False - nodeDesc = meshroom.core.pluginManager.getNodePlugin(nodeType) + nodeDesc = meshroom.core.pluginManager.getRegisteredNodePlugin(nodeType) currentNodeVersion = meshroom.core.nodeVersion(nodeDesc) inputs = nodeData.get("inputs", {}) @@ -60,7 +60,7 @@ def checkTemplateVersions(path: str, nodesAlreadyLoaded: bool = False) -> bool: finally: if not nodesAlreadyLoaded: - nodePlugins = meshroom.core.pluginManager.getNodePlugins() + nodePlugins = meshroom.core.pluginManager.getRegisteredNodePlugins() for node in nodePlugins: meshroom.core.pluginManager.unregisterNode(node) diff --git a/meshroom/ui/app.py b/meshroom/ui/app.py index 275ceae0..37a44c97 100644 --- a/meshroom/ui/app.py +++ b/meshroom/ui/app.py @@ -261,7 +261,7 @@ class MeshroomApp(QApplication): self.engine.addImportPath(qmlDir) # expose available node types that can be instantiated - self.engine.rootContext().setContextProperty("_nodeTypes", {n: {"category": pluginManager.getNodePlugins()[n].nodeDescriptor.category} for n in sorted(pluginManager.getNodePlugins().keys())}) + self.engine.rootContext().setContextProperty("_nodeTypes", {n: {"category": pluginManager.getRegisteredNodePlugins()[n].nodeDescriptor.category} for n in sorted(pluginManager.getRegisteredNodePlugins().keys())}) # instantiate Reconstruction object self._undoStack = commands.UndoStack(self) diff --git a/meshroom/ui/reconstruction.py b/meshroom/ui/reconstruction.py index 7e61a07e..1d05ec08 100755 --- a/meshroom/ui/reconstruction.py +++ b/meshroom/ui/reconstruction.py @@ -537,7 +537,7 @@ class Reconstruction(UIGraph): # For all nodes declared to be accessed by the UI usedNodeTypes = {j for i in self.activeNodeCategories.values() for j in i} allUiNodes = set(self.uiNodes) | usedNodeTypes - allLoadedNodeTypes = set(meshroom.core.pluginManager.getNodePlugins().keys()) + allLoadedNodeTypes = set(meshroom.core.pluginManager.getRegisteredNodePlugins().keys()) for nodeType in allUiNodes: self._activeNodes.add(ActiveNode(nodeType, parent=self)) @@ -684,7 +684,7 @@ class Reconstruction(UIGraph): if not sfmFile or not os.path.isfile(sfmFile): self.tempCameraInit = None return - nodeDesc = meshroom.core.pluginManager.getNodePlugin("CameraInit") + nodeDesc = meshroom.core.pluginManager.getRegisteredNodePlugin("CameraInit") views, intrinsics = nodeDesc.readSfMData(sfmFile) tmpCameraInit = Node("CameraInit", viewpoints=views, intrinsics=intrinsics) tmpCameraInit.locked = True diff --git a/tests/test_compatibility.py b/tests/test_compatibility.py index 0e80cb2e..ae0338e0 100644 --- a/tests/test_compatibility.py +++ b/tests/test_compatibility.py @@ -170,7 +170,7 @@ class SampleInputNodeV2(desc.InputNode): def replaceNodeTypeDesc(nodeType: str, nodeDesc: Type[desc.Node]): """Change the `nodeDesc` associated to `nodeType`.""" - pluginManager.getNodePlugins()[nodeType] = NodePlugin(nodeDesc) + pluginManager.getRegisteredNodePlugins()[nodeType] = NodePlugin(nodeDesc) def test_unknown_node_type(): @@ -216,7 +216,7 @@ def test_description_conflict(): Test compatibility behavior for conflicting node descriptions. """ # Copy registered node types to be able to restore them - originalNodeTypes = copy.deepcopy(pluginManager.getNodePlugins()) + originalNodeTypes = copy.deepcopy(pluginManager.getRegisteredNodePlugins()) nodeTypes = [SampleNodeV1, SampleNodeV2, SampleNodeV3, SampleNodeV4, SampleNodeV5] nodes = [] @@ -242,7 +242,7 @@ def test_description_conflict(): # Offset node types register to create description conflicts # Each node type name now reference the next one's implementation for i, nt in enumerate(nodeTypes[:-1]): - pluginManager.getNodePlugins()[nt.__name__] = NodePlugin(nodeTypes[i + 1]) + pluginManager.getRegisteredNodePlugins()[nt.__name__] = NodePlugin(nodeTypes[i + 1]) # Reload file g = loadGraph(graphFile) @@ -359,8 +359,8 @@ def test_upgradeAllNodes(): pluginManager.unregisterNode(nodePluginSampleInputV2) # Replace SampleNodeV1 by SampleNodeV2 and SampleInputNodeV1 by SampleInputNodeV2 - pluginManager.getNodePlugins()[nodePluginSampleV1.nodeDescriptor.__name__] = nodePluginSampleV2 - pluginManager.getNodePlugins()[nodePluginSampleInputV1.nodeDescriptor.__name__] = \ + pluginManager.getRegisteredNodePlugins()[nodePluginSampleV1.nodeDescriptor.__name__] = nodePluginSampleV2 + pluginManager.getRegisteredNodePlugins()[nodePluginSampleInputV1.nodeDescriptor.__name__] = \ nodePluginSampleInputV2 # Reload file @@ -400,7 +400,7 @@ def test_conformUpgrade(): g.save(graphFile) # Replace SampleNodeV5 by SampleNodeV6 - pluginManager.getNodePlugins()[nodePluginSampleV5.nodeDescriptor.__name__] = nodePluginSampleV6 + pluginManager.getRegisteredNodePlugins()[nodePluginSampleV5.nodeDescriptor.__name__] = nodePluginSampleV6 # Reload file g = loadGraph(graphFile)