From b7c3db004940e79c983c1b9ff2f67e8b93224e2e Mon Sep 17 00:00:00 2001 From: Jakub Jezek Date: Wed, 19 Aug 2020 10:55:14 +0200 Subject: [PATCH] feat(fusion): prelaunch hook and utils --- pype/hooks/fusion/prelaunch.py | 61 ++++++++++++++++++++++++++++++++++ pype/hosts/fusion/utils.py | 10 +++--- 2 files changed, 66 insertions(+), 5 deletions(-) create mode 100644 pype/hooks/fusion/prelaunch.py diff --git a/pype/hooks/fusion/prelaunch.py b/pype/hooks/fusion/prelaunch.py new file mode 100644 index 0000000000..69e91eda05 --- /dev/null +++ b/pype/hooks/fusion/prelaunch.py @@ -0,0 +1,61 @@ +import os +import traceback +import importlib +from pype.lib import PypeHook +from pypeapp import Logger +from pype.hosts.fusion import utils + + +class FusionPrelaunch(PypeHook): + """ + This hook will check if current workfile path has Fusion + project inside. + """ + + def __init__(self, logger=None): + if not logger: + self.log = Logger().get_logger(self.__class__.__name__) + else: + self.log = logger + + self.signature = "( {} )".format(self.__class__.__name__) + + def execute(self, *args, env: dict = None) -> bool: + + if not env: + env = os.environ + + # making sure pyton 3.6 is installed at provided path + py36_dir = os.path.normpath(env.get("PYTHON36", "")) + assert os.path.isdir(py36_dir), ( + "Python 3.6 is not installed at the provided folder path. Either " + "make sure the `environments\resolve.json` is having correctly " + "set `PYTHON36` or make sure Python 3.6 is installed " + f"in given path. \nPYTHON36E: `{py36_dir}`" + ) + self.log.info(f"Path to Fusion Python folder: `{py36_dir}`...") + env["PYTHON36"] = py36_dir + + # setting utility scripts dir for scripts syncing + us_dir = os.path.normpath(env.get("FUSION_UTILITY_SCRIPTS_DIR", "")) + assert os.path.isdir(us_dir), ( + "Fusion utility script dir does not exists. Either make sure " + "the `environments\fusion.json` is having correctly set " + "`FUSION_UTILITY_SCRIPTS_DIR` or reinstall DaVinci Resolve. \n" + f"FUSION_UTILITY_SCRIPTS_DIR: `{us_dir}`" + ) + + try: + __import__("avalon.fusion") + __import__("pyblish") + + except ImportError as e: + print(traceback.format_exc()) + print("pyblish: Could not load integration: %s " % e) + + else: + # Resolve Setup integration + importlib.reload(utils) + utils.setup(env) + + return True diff --git a/pype/hosts/fusion/utils.py b/pype/hosts/fusion/utils.py index 32b6b9c91f..e57723d43e 100644 --- a/pype/hosts/fusion/utils.py +++ b/pype/hosts/fusion/utils.py @@ -1,7 +1,7 @@ #! python3 """ -Resolve's tools for setting environment +Fusion tools for setting environment """ import os @@ -9,13 +9,13 @@ import shutil from pypeapp import Logger -log = Logger().get_logger(__name__, "resolve") +log = Logger().get_logger(__name__, "fusion") def _sync_utility_scripts(env=None): """ Synchronizing basic utlility scripts for resolve. - To be able to run scripts from inside `Resolve/Workspace/Scripts` menu + To be able to run scripts from inside `Fusion/Workspace/Scripts` menu all scripts has to be accessible from defined folder. """ if not env: @@ -62,7 +62,7 @@ def _sync_utility_scripts(env=None): def setup(env=None): - """ Wrapper installer started from pype.hooks.resolve.ResolvePrelaunch() + """ Wrapper installer started from pype.hooks.fusion.FusionPrelaunch() """ if not env: env = os.environ @@ -70,4 +70,4 @@ def setup(env=None): # synchronize resolve utility scripts _sync_utility_scripts(env) - log.info("Resolve Pype wrapper has been installed") + log.info("Fusion Pype wrapper has been installed")