From 5762f205aff034b2118d7e64634a03bf24e680a7 Mon Sep 17 00:00:00 2001 From: Petr Kalis Date: Fri, 19 Feb 2021 19:11:02 +0100 Subject: [PATCH] Harmony - refactor of instance[0] for Pype3 Better looking and clearer handling of nodes Small fixes (path of PypeHarmony) --- pype/hosts/harmony/api/__init__.py | 31 +++++++++---------- .../plugins/publish/collect_instances.py | 2 +- .../plugins/publish/extract_palette.py | 1 - .../harmony/plugins/publish/extract_render.py | 5 +-- .../plugins/publish/extract_template.py | 8 ++--- .../plugins/publish/extract_workfile.py | 2 -- .../harmony/plugins/publish/validate_audio.py | 8 ++++- .../plugins/publish/validate_instances.py | 4 +-- .../publish/validate_scene_settings.py | 6 ++-- 9 files changed, 35 insertions(+), 32 deletions(-) diff --git a/pype/hosts/harmony/api/__init__.py b/pype/hosts/harmony/api/__init__.py index c9c0577af2..25055dba3e 100644 --- a/pype/hosts/harmony/api/__init__.py +++ b/pype/hosts/harmony/api/__init__.py @@ -60,6 +60,8 @@ def get_asset_settings(): "fps": fps, "frameStart": frame_start, "frameEnd": frame_end, + "handleStart": handle_start, + "handleEnd": handle_end, "resolutionWidth": resolution_width, "resolutionHeight": resolution_height } @@ -152,13 +154,14 @@ def application_launch(): # It is now moved so it it manually called. # ensure_scene_settings() # check_inventory() - pype_harmony_path = Path(__file__).parent / "js" / "PypeHarmony.js" + # fills PYPE_HARMONY_JS + pype_harmony_path = Path(__file__).parent.parent / "js" / "PypeHarmony.js" pype_harmony_js = pype_harmony_path.read_text() # go through js/creators, loaders and publish folders and load all scripts script = "" for item in ["creators", "loaders", "publish"]: - dir_to_scan = Path(__file__).parent / "js" / item + dir_to_scan = Path(__file__).parent.parent / "js" / item for child in dir_to_scan.iterdir(): script += child.read_text() @@ -212,19 +215,15 @@ def uninstall(): def on_pyblish_instance_toggled(instance, old_value, new_value): """Toggle node enabling on instance toggles.""" - try: - node = instance[0] # regular instance - except IndexError: - try: - node = instance.data["setMembers"][0] # for HarmonyRenderInstance - except IndexError: - print(f"Instance '{instance}' is missing node") - return + node = None + if instance.data.get("setMembers"): + node = instance.data["setMembers"][0] - harmony.send( - { - "function": "PypeHarmony.toggleInstance", - "args": [node, new_value] - } - ) + if node: + harmony.send( + { + "function": "PypeHarmony.toggleInstance", + "args": [node, new_value] + } + ) diff --git a/pype/hosts/harmony/plugins/publish/collect_instances.py b/pype/hosts/harmony/plugins/publish/collect_instances.py index bed9c4392b..dcff02a646 100644 --- a/pype/hosts/harmony/plugins/publish/collect_instances.py +++ b/pype/hosts/harmony/plugins/publish/collect_instances.py @@ -54,8 +54,8 @@ class CollectInstances(pyblish.api.ContextPlugin): continue instance = context.create_instance(node.split("/")[-1]) - instance.append(node) instance.data.update(data) + instance.data["setMembers"] = [node] instance.data["publish"] = harmony.send( {"function": "node.getEnable", "args": [node]} )["result"] diff --git a/pype/hosts/harmony/plugins/publish/extract_palette.py b/pype/hosts/harmony/plugins/publish/extract_palette.py index 029a4f0f11..39a822153c 100644 --- a/pype/hosts/harmony/plugins/publish/extract_palette.py +++ b/pype/hosts/harmony/plugins/publish/extract_palette.py @@ -7,7 +7,6 @@ from PIL import Image, ImageDraw, ImageFont from avalon import harmony import pype.api -import pype.hosts.harmony class ExtractPalette(pype.api.Extractor): diff --git a/pype/hosts/harmony/plugins/publish/extract_render.py b/pype/hosts/harmony/plugins/publish/extract_render.py index c5744d43e2..551d7afee1 100644 --- a/pype/hosts/harmony/plugins/publish/extract_render.py +++ b/pype/hosts/harmony/plugins/publish/extract_render.py @@ -47,7 +47,8 @@ class ExtractRender(pyblish.api.InstancePlugin): harmony.send( { "function": func, - "args": [instance[0], path + "/" + instance.data["name"]] + "args": [instance.data["setMembers"][0], + path + "/" + instance.data["name"]] } ) harmony.save_scene() @@ -75,7 +76,7 @@ class ExtractRender(pyblish.api.InstancePlugin): collections, remainder = clique.assemble(files, minimum_items=1) assert not remainder, ( "There should not be a remainder for {0}: {1}".format( - instance[0], remainder + instance.data["setMembers"][0], remainder ) ) self.log.debug(collections) diff --git a/pype/hosts/harmony/plugins/publish/extract_template.py b/pype/hosts/harmony/plugins/publish/extract_template.py index b8437c85ea..842bc77202 100644 --- a/pype/hosts/harmony/plugins/publish/extract_template.py +++ b/pype/hosts/harmony/plugins/publish/extract_template.py @@ -23,7 +23,7 @@ class ExtractTemplate(pype.api.Extractor): self.log.info(f"Outputting template to {staging_dir}") dependencies = [] - self.get_dependencies(instance[0], dependencies) + self.get_dependencies(instance.data["setMembers"][0], dependencies) # Get backdrops. backdrops = {} @@ -46,11 +46,11 @@ class ExtractTemplate(pype.api.Extractor): dependencies.append(node) # Make sure we dont export the instance node. - if instance[0] in dependencies: - dependencies.remove(instance[0]) + if instance.data["setMembers"][0] in dependencies: + dependencies.remove(instance.data["setMembers"][0]) # Export template. - pype.hosts.harmony.export_template( + pype.hosts.harmony.api.export_template( unique_backdrops, dependencies, filepath ) diff --git a/pype/hosts/harmony/plugins/publish/extract_workfile.py b/pype/hosts/harmony/plugins/publish/extract_workfile.py index be0444f0e6..842d0aa8d3 100644 --- a/pype/hosts/harmony/plugins/publish/extract_workfile.py +++ b/pype/hosts/harmony/plugins/publish/extract_workfile.py @@ -5,8 +5,6 @@ import shutil from zipfile import ZipFile import pype.api -from avalon import harmony -import pype.hosts.harmony class ExtractWorkfile(pype.api.Extractor): diff --git a/pype/hosts/harmony/plugins/publish/validate_audio.py b/pype/hosts/harmony/plugins/publish/validate_audio.py index b949b0a6e6..c043b31ca6 100644 --- a/pype/hosts/harmony/plugins/publish/validate_audio.py +++ b/pype/hosts/harmony/plugins/publish/validate_audio.py @@ -19,6 +19,12 @@ class ValidateAudio(pyblish.api.InstancePlugin): optional = True def process(self, instance): + node = None + if instance.data.get("setMembers"): + node = instance.data["setMembers"][0] + + if not node: + return # Collect scene data. func = """function func(write_node) { @@ -29,7 +35,7 @@ class ValidateAudio(pyblish.api.InstancePlugin): func """ result = harmony.send( - {"function": func, "args": [instance[0]]} + {"function": func, "args": [node]} )["result"] audio_path = result[0] diff --git a/pype/hosts/harmony/plugins/publish/validate_instances.py b/pype/hosts/harmony/plugins/publish/validate_instances.py index f084baf790..238f8d1038 100644 --- a/pype/hosts/harmony/plugins/publish/validate_instances.py +++ b/pype/hosts/harmony/plugins/publish/validate_instances.py @@ -25,9 +25,9 @@ class ValidateInstanceRepair(pyblish.api.Action): instances = pyblish.api.instances_by_plugin(failed, plugin) for instance in instances: - data = harmony.read(instance[0]) + data = harmony.read(instance.data["setMembers"][0]) data["asset"] = os.environ["AVALON_ASSET"] - harmony.imprint(instance[0], data) + harmony.imprint(instance.data["setMembers"][0], data) class ValidateInstance(pyblish.api.InstancePlugin): diff --git a/pype/hosts/harmony/plugins/publish/validate_scene_settings.py b/pype/hosts/harmony/plugins/publish/validate_scene_settings.py index 1bc7e5c934..9b8a6183df 100644 --- a/pype/hosts/harmony/plugins/publish/validate_scene_settings.py +++ b/pype/hosts/harmony/plugins/publish/validate_scene_settings.py @@ -18,12 +18,12 @@ class ValidateSceneSettingsRepair(pyblish.api.Action): def process(self, context, plugin): """Repair action entry point.""" - expected = pype.hosts.harmony.get_asset_settings() + expected = pype.hosts.harmony.api.get_asset_settings() asset_settings = _update_frames(dict.copy(expected)) asset_settings["frameStart"] = 1 asset_settings["frameEnd"] = asset_settings["frameEnd"] + \ asset_settings["handleEnd"] - pype.hosts.harmony.set_scene_settings(asset_settings) + pype.hosts.harmony.api.set_scene_settings(asset_settings) if not os.path.exists(context.data["scenePath"]): self.log.info("correcting scene name") scene_dir = os.path.dirname(context.data["currentFile"]) @@ -48,7 +48,7 @@ class ValidateSceneSettings(pyblish.api.InstancePlugin): def process(self, instance): """Plugin entry point.""" - expected_settings = pype.hosts.harmony.get_asset_settings() + expected_settings = pype.hosts.harmony.api.get_asset_settings() self.log.info(expected_settings) expected_settings = _update_frames(dict.copy(expected_settings))