mirror of
https://github.com/alicevision/Meshroom.git
synced 2025-04-30 10:47:34 +02:00
New plugins load
MESHROOM_PLUGINS_PATH can be used to automatically load nodes and pipelines from a folder structure.
This commit is contained in:
parent
92555f6ab3
commit
db8fd02aeb
6 changed files with 42 additions and 2 deletions
|
@ -146,6 +146,7 @@ if not args.input and not args.inputRecursive:
|
||||||
print('Nothing to compute. You need to set --input or --inputRecursive.')
|
print('Nothing to compute. You need to set --input or --inputRecursive.')
|
||||||
sys.exit(1)
|
sys.exit(1)
|
||||||
|
|
||||||
|
meshroom.core.initPlugins()
|
||||||
meshroom.core.initNodes()
|
meshroom.core.initNodes()
|
||||||
|
|
||||||
graph = meshroom.core.graph.Graph(name=args.pipeline)
|
graph = meshroom.core.graph.Graph(name=args.pipeline)
|
||||||
|
|
|
@ -61,6 +61,7 @@ if args.extern:
|
||||||
else:
|
else:
|
||||||
logging.getLogger().setLevel(meshroom.logStringToPython[args.verbose])
|
logging.getLogger().setLevel(meshroom.logStringToPython[args.verbose])
|
||||||
|
|
||||||
|
meshroom.core.initPlugins()
|
||||||
meshroom.core.initNodes()
|
meshroom.core.initNodes()
|
||||||
|
|
||||||
graph = meshroom.core.graph.loadGraph(args.graphFile)
|
graph = meshroom.core.graph.loadGraph(args.graphFile)
|
||||||
|
|
|
@ -22,6 +22,7 @@ parser.add_argument("--submitLabel",
|
||||||
|
|
||||||
args = parser.parse_args()
|
args = parser.parse_args()
|
||||||
|
|
||||||
|
meshroom.core.initPlugins()
|
||||||
meshroom.core.initNodes()
|
meshroom.core.initNodes()
|
||||||
meshroom.core.initSubmitters()
|
meshroom.core.initSubmitters()
|
||||||
|
|
||||||
|
|
|
@ -4,6 +4,7 @@ import importlib
|
||||||
import inspect
|
import inspect
|
||||||
import logging
|
import logging
|
||||||
import os
|
import os
|
||||||
|
from pathlib import Path
|
||||||
import pkgutil
|
import pkgutil
|
||||||
import sys
|
import sys
|
||||||
import tempfile
|
import tempfile
|
||||||
|
@ -343,6 +344,35 @@ def loadAllNodes(folder):
|
||||||
logging.debug(f'Nodes loaded [{package}]: {nodesStr}')
|
logging.debug(f'Nodes loaded [{package}]: {nodesStr}')
|
||||||
|
|
||||||
|
|
||||||
|
def loadPluginFolder(folder):
|
||||||
|
if not os.path.isdir(folder):
|
||||||
|
logging.info(f"Plugin folder '{folder}' does not exist.")
|
||||||
|
return
|
||||||
|
|
||||||
|
mrFolder = Path(folder, 'meshroom')
|
||||||
|
if not mrFolder.exists():
|
||||||
|
logging.info(f"Plugin folder '{folder}' does not contain a 'meshroom' folder.")
|
||||||
|
return
|
||||||
|
|
||||||
|
binFolders = [Path(folder, 'bin')]
|
||||||
|
libFolders = [Path(folder, 'lib'), Path(folder, 'lib64')]
|
||||||
|
pythonPathFolders = [Path(folder)] + binFolders
|
||||||
|
|
||||||
|
loadAllNodes(folder=mrFolder)
|
||||||
|
loadPipelineTemplates(folder=mrFolder)
|
||||||
|
|
||||||
|
|
||||||
|
def loadPluginsFolder(folder):
|
||||||
|
if not os.path.isdir(folder):
|
||||||
|
logging.debug(f"PluginSet folder '{folder}' does not exist.")
|
||||||
|
return
|
||||||
|
|
||||||
|
for file in os.listdir(folder):
|
||||||
|
if os.path.isdir(file):
|
||||||
|
subFolder = os.path.join(folder, file)
|
||||||
|
loadPluginFolder(subFolder)
|
||||||
|
|
||||||
|
|
||||||
def registerSubmitter(s):
|
def registerSubmitter(s):
|
||||||
global submitters
|
global submitters
|
||||||
if s.name in submitters:
|
if s.name in submitters:
|
||||||
|
@ -392,3 +422,9 @@ def initPipelines():
|
||||||
for f in pipelineTemplatesFolders:
|
for f in pipelineTemplatesFolders:
|
||||||
loadPipelineTemplates(f)
|
loadPipelineTemplates(f)
|
||||||
|
|
||||||
|
|
||||||
|
def initPlugins():
|
||||||
|
additionalpluginsPath = EnvVar.getList(EnvVar.MESHROOM_PLUGINS_PATH)
|
||||||
|
nodesFolders = [os.path.join(meshroomFolder, 'plugins')] + additionalpluginsPath
|
||||||
|
for f in nodesFolders:
|
||||||
|
loadPluginFolder(folder=f)
|
||||||
|
|
|
@ -42,10 +42,10 @@ class EnvVar(Enum):
|
||||||
)
|
)
|
||||||
|
|
||||||
# Core
|
# Core
|
||||||
MESHROOM_PLUGINS_PATH = VarDefinition(str, "", "Paths to plugins folders")
|
MESHROOM_PLUGINS_PATH = VarDefinition(str, "", "Paths to plugins folders containing nodes, submitters and pipeline templates")
|
||||||
MESHROOM_NODES_PATH = VarDefinition(str, "", "Paths to set of nodes folders")
|
MESHROOM_NODES_PATH = VarDefinition(str, "", "Paths to set of nodes folders")
|
||||||
MESHROOM_SUBMITTERS_PATH = VarDefinition(str, "", "Paths to set of submitters folders")
|
MESHROOM_SUBMITTERS_PATH = VarDefinition(str, "", "Paths to set of submitters folders")
|
||||||
MESHROOM_PIPELINE_TEMPLATES_PATH = VarDefinition(str, "", "Paths to pipeline templates folders")
|
MESHROOM_PIPELINE_TEMPLATES_PATH = VarDefinition(str, "", "Paths to et of pipeline templates folders")
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def get(envVar: "EnvVar") -> Any:
|
def get(envVar: "EnvVar") -> Any:
|
||||||
|
|
|
@ -232,6 +232,7 @@ class MeshroomApp(QApplication):
|
||||||
# - clean cache directory and make sure it exists on disk
|
# - clean cache directory and make sure it exists on disk
|
||||||
ThumbnailCache.initialize()
|
ThumbnailCache.initialize()
|
||||||
|
|
||||||
|
meshroom.core.initPlugins()
|
||||||
meshroom.core.initNodes()
|
meshroom.core.initNodes()
|
||||||
meshroom.core.initSubmitters()
|
meshroom.core.initSubmitters()
|
||||||
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue