mirror of
https://github.com/alicevision/Meshroom.git
synced 2025-07-14 23:37:20 +02:00
[core] plugins: Simplify the types of ProcessEnv
objects
Instead of a distinguishing the type of `DirTreeProcessEnv`, simply use it whenever the process environment differs from rez.
This commit is contained in:
parent
09e086eea9
commit
3e6948d8e3
2 changed files with 12 additions and 38 deletions
|
@ -429,7 +429,6 @@ def initPlugins():
|
||||||
for f in pluginsFolders:
|
for f in pluginsFolders:
|
||||||
plugins = loadPluginFolder(folder=f)
|
plugins = loadPluginFolder(folder=f)
|
||||||
# Set the ProcessEnv for each plugin
|
# Set the ProcessEnv for each plugin
|
||||||
# TODO: make the distinction between default, conda, and venv plugins from the get-go
|
|
||||||
if plugins:
|
if plugins:
|
||||||
for plugin in plugins:
|
for plugin in plugins:
|
||||||
plugin.processEnv = processEnvFactory(f)
|
plugin.processEnv = processEnvFactory(f)
|
||||||
|
|
|
@ -49,9 +49,7 @@ def validateNodeDesc(nodeDesc: desc.Node) -> list:
|
||||||
|
|
||||||
class ProcessEnvType(Enum):
|
class ProcessEnvType(Enum):
|
||||||
""" Supported process environments. """
|
""" Supported process environments. """
|
||||||
DEFAULT = "default",
|
DIRTREE = "dirtree",
|
||||||
CONDA = "conda",
|
|
||||||
VIRTUALENV = "virtualenv",
|
|
||||||
REZ = "rez"
|
REZ = "rez"
|
||||||
|
|
||||||
|
|
||||||
|
@ -65,11 +63,11 @@ class ProcessEnv(BaseObject):
|
||||||
uri: (optional) the Unique Resource Identifier to activate the environment.
|
uri: (optional) the Unique Resource Identifier to activate the environment.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
def __init__(self, folder: str, envType: ProcessEnvType = ProcessEnvType.DEFAULT):
|
def __init__(self, folder: str, envType: ProcessEnvType = ProcessEnvType.DIRTREE, uri: str = ""):
|
||||||
super().__init__()
|
super().__init__()
|
||||||
self._folder = folder
|
self._folder: str = folder
|
||||||
self._processEnvType: ProcessEnvType = envType
|
self._processEnvType: ProcessEnvType = envType
|
||||||
self.uri = ""
|
self.uri: str = uri
|
||||||
|
|
||||||
def getEnvDict(self) -> dict:
|
def getEnvDict(self) -> dict:
|
||||||
""" Return the environment dictionary if it has been modified, None otherwise. """
|
""" Return the environment dictionary if it has been modified, None otherwise. """
|
||||||
|
@ -87,15 +85,9 @@ class ProcessEnv(BaseObject):
|
||||||
class DirTreeProcessEnv(ProcessEnv):
|
class DirTreeProcessEnv(ProcessEnv):
|
||||||
"""
|
"""
|
||||||
"""
|
"""
|
||||||
def __init__(self, folder: str, envType: ProcessEnvType = ProcessEnvType.DEFAULT, uri: str = ""):
|
def __init__(self, folder: str):
|
||||||
if envType == ProcessEnvType.REZ:
|
super().__init__(folder, ProcessEnvType.DIRTREE)
|
||||||
raise RuntimeError("Wrong process environment type.")
|
|
||||||
if not uri and envType != ProcessEnvType.DEFAULT:
|
|
||||||
raise RuntimeError("URI should be provided for the process environment.")
|
|
||||||
|
|
||||||
super().__init__(folder, envType)
|
|
||||||
|
|
||||||
self.uri = uri
|
|
||||||
self.binPaths: list = [str(Path(folder, "bin"))]
|
self.binPaths: list = [str(Path(folder, "bin"))]
|
||||||
self.libPaths: list = [str(Path(folder, "lib")), str(Path(folder, "lib64"))]
|
self.libPaths: list = [str(Path(folder, "lib")), str(Path(folder, "lib64"))]
|
||||||
self.pythonPaths: list = [str(Path(folder))] + self.binPaths
|
self.pythonPaths: list = [str(Path(folder))] + self.binPaths
|
||||||
|
@ -105,31 +97,18 @@ class DirTreeProcessEnv(ProcessEnv):
|
||||||
env["PYTHONPATH"] = f"{_MESHROOM_ROOT}{os.pathsep}{os.pathsep.join(self.pythonPaths)}{os.pathsep}{os.getenv('PYTHONPATH', '')}"
|
env["PYTHONPATH"] = f"{_MESHROOM_ROOT}{os.pathsep}{os.pathsep.join(self.pythonPaths)}{os.pathsep}{os.getenv('PYTHONPATH', '')}"
|
||||||
env["LD_LIBRARY_PATH"] = f"{os.pathsep.join(self.libPaths)}{os.pathsep}{os.getenv('LD_LIBRARY_PATH', '')}"
|
env["LD_LIBRARY_PATH"] = f"{os.pathsep.join(self.libPaths)}{os.pathsep}{os.getenv('LD_LIBRARY_PATH', '')}"
|
||||||
env["PATH"] = f"{os.pathsep.join(self.binPaths)}{os.pathsep}{os.getenv('PATH', '')}"
|
env["PATH"] = f"{os.pathsep.join(self.binPaths)}{os.pathsep}{os.getenv('PATH', '')}"
|
||||||
# env["PYTHONPATH"] = f"{_MESHROOM_ROOT}{os.pathsep}{os.pathsep.join(self.pythonPaths)}"
|
|
||||||
# env["LD_LIBRARY_PATH"] = f"{os.pathsep.join(self.libPaths)}"
|
|
||||||
# env["PATH"] = f"{os.pathsep.join(self.binPaths)}"
|
|
||||||
|
|
||||||
return env
|
return env
|
||||||
|
|
||||||
def getCommandPrefix(self) -> str:
|
|
||||||
if self._processEnvType == ProcessEnvType.CONDA:
|
|
||||||
return f"conda run -n {self.uri} "
|
|
||||||
if self._processEnvType == ProcessEnvType.VIRTUALENV:
|
|
||||||
return f"{self.uri}/bin/python "
|
|
||||||
return super().getCommandPrefix()
|
|
||||||
|
|
||||||
|
|
||||||
class RezProcessEnv(ProcessEnv):
|
class RezProcessEnv(ProcessEnv):
|
||||||
"""
|
"""
|
||||||
"""
|
"""
|
||||||
def __init__(self, folder: str, envType: ProcessEnvType = ProcessEnvType.REZ, uri: str = ""):
|
def __init__(self, folder: str, uri: str = ""):
|
||||||
if envType != ProcessEnvType.REZ:
|
|
||||||
raise RuntimeError("Wrong process environment type.")
|
|
||||||
if not uri:
|
if not uri:
|
||||||
raise RuntimeError("Wrong URI for Rez environment process.")
|
raise RuntimeError("Missing name of the Rez environment needs to be provided.")
|
||||||
|
super().__init__(folder, ProcessEnvType.REZ, uri)
|
||||||
|
|
||||||
super().__init__(folder, envType)
|
|
||||||
self.uri = uri
|
|
||||||
def getEnvDict(self):
|
def getEnvDict(self):
|
||||||
env = os.environ.copy()
|
env = os.environ.copy()
|
||||||
|
|
||||||
|
@ -144,14 +123,10 @@ class RezProcessEnv(ProcessEnv):
|
||||||
return "'"
|
return "'"
|
||||||
|
|
||||||
|
|
||||||
def processEnvFactory(folder: str, envType: str = "default", uri: str = "") -> ProcessEnv:
|
def processEnvFactory(folder: str, envType: str = "dirtree", uri: str = "") -> ProcessEnv:
|
||||||
if envType == "default":
|
if envType == "dirtree":
|
||||||
return DirTreeProcessEnv(folder)
|
return DirTreeProcessEnv(folder)
|
||||||
if envType == "conda":
|
return RezProcessEnv(folder, uri=uri)
|
||||||
return DirTreeProcessEnv(folder, ProcessEnvType.CONDA, uri)
|
|
||||||
if envType == "virtualenv":
|
|
||||||
return DirTreeProcessEnv(folder, ProcessEnvType.VIRTUALENV, uri)
|
|
||||||
return RezProcessEnv(folder, ProcessEnvType.REZ, uri)
|
|
||||||
|
|
||||||
|
|
||||||
class NodePluginStatus(Enum):
|
class NodePluginStatus(Enum):
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue