diff --git a/pype/hosts/fusion/utility_scripts/creator.py b/pype/hosts/fusion/utility_scripts/creator.py new file mode 100644 index 0000000000..25050e6f27 --- /dev/null +++ b/pype/hosts/fusion/utility_scripts/creator.py @@ -0,0 +1,7 @@ +import avalon.api +import avalon.fusion +import avalon.tools.creator as tool + + +avalon.api.install(avalon.fusion) +tool.show() diff --git a/pype/hosts/fusion/utility_scripts/loader.py b/pype/hosts/fusion/utility_scripts/loader.py new file mode 100644 index 0000000000..6a7af1566f --- /dev/null +++ b/pype/hosts/fusion/utility_scripts/loader.py @@ -0,0 +1,7 @@ +import avalon.api +import avalon.fusion +import avalon.tools.loader as tool + + +avalon.api.install(avalon.fusion) +tool.show(use_context=True) diff --git a/pype/hosts/fusion/utility_scripts/manager.py b/pype/hosts/fusion/utility_scripts/manager.py new file mode 100644 index 0000000000..0bbe0a3213 --- /dev/null +++ b/pype/hosts/fusion/utility_scripts/manager.py @@ -0,0 +1,7 @@ +import avalon.api +import avalon.fusion +import avalon.tools.sceneinventory as tool + + +avalon.api.install(avalon.fusion) +tool.show() diff --git a/pype/hosts/fusion/utility_scripts/publish.py b/pype/hosts/fusion/utility_scripts/publish.py new file mode 100644 index 0000000000..38f6079711 --- /dev/null +++ b/pype/hosts/fusion/utility_scripts/publish.py @@ -0,0 +1,62 @@ +import os +import sys + +import avalon.api +import avalon.fusion + +import pyblish_qml + + +def _install_fusion(): + + from pyblish_qml import settings + + sys.stdout.write("Setting up Pyblish QML in Fusion\n") + + if settings.ContextLabel == settings.ContextLabelDefault: + settings.ContextLabel = "Fusion" + if settings.WindowTitle == settings.WindowTitleDefault: + settings.WindowTitle = "Pyblish (Fusion)" + + +def _set_current_working_dir(): + # Set current working directory next to comp + + try: + # Provided by Fusion + comp + except NameError: + comp = None + + if comp is None: + raise RuntimeError("Fusion 'comp' variable not set. " + "Are you running this as Comp script?") + + filename = comp.MapPath(comp.GetAttrs()["COMPS_FileName"]) + if filename and os.path.exists(filename): + cwd = os.path.dirname(filename) + else: + # Fallback to Avalon projects root + # for unsaved files. + cwd = os.environ["AVALON_PROJECTS"] + + os.chdir(cwd) + + +print("Starting Pyblish setup..") + +# Install avalon +avalon.api.install(avalon.fusion) + +# force current working directory to NON FUSION path +# os.getcwd will return the binary folder of Fusion in this case +_set_current_working_dir() + +# install fusion title +_install_fusion() + +# Run QML in modal mode so it keeps listening to the +# server in the main thread and keeps this process +# open until QML finishes. +print("Running publish_qml.show(modal=True)..") +pyblish_qml.show(modal=True) diff --git a/pype/hosts/fusion/utility_scripts/workfiles.py b/pype/hosts/fusion/utility_scripts/workfiles.py new file mode 100644 index 0000000000..d93eeadc9c --- /dev/null +++ b/pype/hosts/fusion/utility_scripts/workfiles.py @@ -0,0 +1,7 @@ +import avalon.api +import avalon.fusion +import avalon.tools.workfiles as tool + + +avalon.api.install(avalon.fusion) +tool.show() diff --git a/pype/hosts/fusion/utils.py b/pype/hosts/fusion/utils.py new file mode 100644 index 0000000000..32b6b9c91f --- /dev/null +++ b/pype/hosts/fusion/utils.py @@ -0,0 +1,73 @@ +#! python3 + +""" +Resolve's tools for setting environment +""" + +import os +import shutil + +from pypeapp import Logger + +log = Logger().get_logger(__name__, "resolve") + + +def _sync_utility_scripts(env=None): + """ Synchronizing basic utlility scripts for resolve. + + To be able to run scripts from inside `Resolve/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(__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.join(us_dir, s) + log.info(f"Removing `{path}`...") + os.remove(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.join(d, s) + dst = os.path.join(us_dir, s) + log.info(f"Copying `{src}` to `{dst}`...") + shutil.copy2(src, dst) + + +def setup(env=None): + """ Wrapper installer started from pype.hooks.resolve.ResolvePrelaunch() + """ + if not env: + env = os.environ + + # synchronize resolve utility scripts + _sync_utility_scripts(env) + + log.info("Resolve Pype wrapper has been installed")