feat(fusion): adding utility scripts

This commit is contained in:
Jakub Jezek 2020-08-19 10:31:12 +02:00
parent 161700f2be
commit 9943f94f64
No known key found for this signature in database
GPG key ID: C4B96E101D2A47F3
6 changed files with 163 additions and 0 deletions

View file

@ -0,0 +1,7 @@
import avalon.api
import avalon.fusion
import avalon.tools.creator as tool
avalon.api.install(avalon.fusion)
tool.show()

View file

@ -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)

View file

@ -0,0 +1,7 @@
import avalon.api
import avalon.fusion
import avalon.tools.sceneinventory as tool
avalon.api.install(avalon.fusion)
tool.show()

View file

@ -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)

View file

@ -0,0 +1,7 @@
import avalon.api
import avalon.fusion
import avalon.tools.workfiles as tool
avalon.api.install(avalon.fusion)
tool.show()

View file

@ -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")