From c6c73de82c94880053d62cd2755b8be132726530 Mon Sep 17 00:00:00 2001 From: Jakub Trllo Date: Mon, 14 Feb 2022 12:22:43 +0100 Subject: [PATCH] moved init utils directly to prelaunch hook --- openpype/hosts/fusion/api/__init__.py | 7 -- openpype/hosts/fusion/api/utils.py | 86 ------------------- .../hosts/fusion/hooks/pre_fusion_setup.py | 77 ++++++++++++++--- 3 files changed, 63 insertions(+), 107 deletions(-) delete mode 100644 openpype/hosts/fusion/api/utils.py diff --git a/openpype/hosts/fusion/api/__init__.py b/openpype/hosts/fusion/api/__init__.py index 5aee978c15..4ec9177af7 100644 --- a/openpype/hosts/fusion/api/__init__.py +++ b/openpype/hosts/fusion/api/__init__.py @@ -3,11 +3,6 @@ from .pipeline import ( uninstall ) -from .utils import ( - setup -) - - from .lib import ( get_additional_data, update_frame_range @@ -21,8 +16,6 @@ __all__ = [ "install", "uninstall", - # utils - "setup", # lib "get_additional_data", diff --git a/openpype/hosts/fusion/api/utils.py b/openpype/hosts/fusion/api/utils.py deleted file mode 100644 index 5605323b1e..0000000000 --- a/openpype/hosts/fusion/api/utils.py +++ /dev/null @@ -1,86 +0,0 @@ -#! python3 - -""" -Fusion tools for setting environment -""" - -import os -import shutil - -from openpype.api import Logger -import openpype.hosts.fusion - -log = Logger().get_logger(__name__) - - -def _sync_utility_scripts(env=None): - """ Synchronizing basic utlility scripts for resolve. - - To be able to run scripts from inside `Fusion/Workspace/Scripts` menu - all scripts has to be accessible from defined folder. - """ - if not env: - env = os.environ - - # initiate inputs - scripts = {} - us_env = env.get("FUSION_UTILITY_SCRIPTS_SOURCE_DIR") - us_dir = env.get("FUSION_UTILITY_SCRIPTS_DIR", "") - us_paths = [os.path.join( - os.path.dirname(os.path.abspath(openpype.hosts.fusion.__file__)), - "utility_scripts" - )] - - # collect script dirs - if us_env: - log.info(f"Utility Scripts Env: `{us_env}`") - us_paths = us_env.split( - os.pathsep) + us_paths - - # collect scripts from dirs - for path in us_paths: - scripts.update({path: os.listdir(path)}) - - log.info(f"Utility Scripts Dir: `{us_paths}`") - log.info(f"Utility Scripts: `{scripts}`") - - # make sure no script file is in folder - if next((s for s in os.listdir(us_dir)), None): - for s in os.listdir(us_dir): - path = os.path.normpath( - os.path.join(us_dir, s)) - log.info(f"Removing `{path}`...") - - # remove file or directory if not in our folders - if not os.path.isdir(path): - os.remove(path) - else: - shutil.rmtree(path) - - # copy scripts into Resolve's utility scripts dir - for d, sl in scripts.items(): - # directory and scripts list - for s in sl: - # script in script list - src = os.path.normpath(os.path.join(d, s)) - dst = os.path.normpath(os.path.join(us_dir, s)) - - log.info(f"Copying `{src}` to `{dst}`...") - - # copy file or directory from our folders to fusion's folder - if not os.path.isdir(src): - shutil.copy2(src, dst) - else: - shutil.copytree(src, dst) - - -def setup(env=None): - """ Wrapper installer started from pype.hooks.fusion.FusionPrelaunch() - """ - if not env: - env = os.environ - - # synchronize resolve utility scripts - _sync_utility_scripts(env) - - log.info("Fusion Pype wrapper has been installed") diff --git a/openpype/hosts/fusion/hooks/pre_fusion_setup.py b/openpype/hosts/fusion/hooks/pre_fusion_setup.py index 4a9dfaec15..b104b3c081 100644 --- a/openpype/hosts/fusion/hooks/pre_fusion_setup.py +++ b/openpype/hosts/fusion/hooks/pre_fusion_setup.py @@ -1,7 +1,8 @@ import os -import importlib +import shutil + +import openpype.hosts.fusion from openpype.lib import PreLaunchHook, ApplicationLaunchFailed -from openpype.hosts.fusion.api import utils class FusionPrelaunch(PreLaunchHook): @@ -36,17 +37,65 @@ class FusionPrelaunch(PreLaunchHook): f"Fusion.\n\nFUSION_UTILITY_SCRIPTS_DIR: '{us_dir}'" ) - try: - __import__("avalon.fusion") - __import__("pyblish") + self._sync_utility_scripts(self.launch_context.env) + self.log.info("Fusion Pype wrapper has been installed") - except ImportError: - self.log.warning( - "pyblish: Could not load Fusion integration.", - exc_info=True - ) + def _sync_utility_scripts(self, env): + """ Synchronizing basic utlility scripts for resolve. - else: - # Resolve Setup integration - importlib.reload(utils) - utils.setup(self.launch_context.env) + To be able to run scripts from inside `Fusion/Workspace/Scripts` menu + all scripts has to be accessible from defined folder. + """ + if not env: + env = {k: v for k, v in os.environ.items()} + + # initiate inputs + scripts = {} + us_env = env.get("FUSION_UTILITY_SCRIPTS_SOURCE_DIR") + us_dir = env.get("FUSION_UTILITY_SCRIPTS_DIR", "") + us_paths = [os.path.join( + os.path.dirname(os.path.abspath(openpype.hosts.fusion.__file__)), + "utility_scripts" + )] + + # collect script dirs + if us_env: + self.log.info(f"Utility Scripts Env: `{us_env}`") + us_paths = us_env.split( + os.pathsep) + us_paths + + # collect scripts from dirs + for path in us_paths: + scripts.update({path: os.listdir(path)}) + + self.log.info(f"Utility Scripts Dir: `{us_paths}`") + self.log.info(f"Utility Scripts: `{scripts}`") + + # make sure no script file is in folder + if next((s for s in os.listdir(us_dir)), None): + for s in os.listdir(us_dir): + path = os.path.normpath( + os.path.join(us_dir, s)) + self.log.info(f"Removing `{path}`...") + + # remove file or directory if not in our folders + if not os.path.isdir(path): + os.remove(path) + else: + shutil.rmtree(path) + + # copy scripts into Resolve's utility scripts dir + for d, sl in scripts.items(): + # directory and scripts list + for s in sl: + # script in script list + src = os.path.normpath(os.path.join(d, s)) + dst = os.path.normpath(os.path.join(us_dir, s)) + + self.log.info(f"Copying `{src}` to `{dst}`...") + + # copy file or directory from our folders to fusion's folder + if not os.path.isdir(src): + shutil.copy2(src, dst) + else: + shutil.copytree(src, dst)