From c7e331b786119026e1bd9d89b657c8ed8c3c7bb5 Mon Sep 17 00:00:00 2001 From: Jakub Jezek Date: Wed, 20 Jan 2021 13:41:49 +0100 Subject: [PATCH] nuke plugins to precollect stage --- .../plugins/publish/collect_current_file.py | 19 ------------- .../publish/extract_review_data_mov.py | 2 +- .../plugins/publish/precollect_instances.py | 16 +++++++++-- ...ect_workfile.py => precollect_workfile.py} | 28 +++++++++++-------- ...collect_writes.py => precollect_writes.py} | 20 ++++++++----- 5 files changed, 44 insertions(+), 41 deletions(-) delete mode 100644 pype/hosts/nuke/plugins/publish/collect_current_file.py rename pype/hosts/nuke/plugins/publish/{collect_workfile.py => precollect_workfile.py} (79%) rename pype/hosts/nuke/plugins/publish/{collect_writes.py => precollect_writes.py} (90%) diff --git a/pype/hosts/nuke/plugins/publish/collect_current_file.py b/pype/hosts/nuke/plugins/publish/collect_current_file.py deleted file mode 100644 index 253b9a7a24..0000000000 --- a/pype/hosts/nuke/plugins/publish/collect_current_file.py +++ /dev/null @@ -1,19 +0,0 @@ -import pyblish.api - - -class CollectCurrentFile(pyblish.api.ContextPlugin): - """Inject the current working file into context""" - - order = pyblish.api.CollectorOrder - 0.5 - label = "Collect Current File" - hosts = ["nuke"] - - def process(self, context): - import os - import nuke - current_file = nuke.root().name() - - normalised = os.path.normpath(current_file) - - context.data["current_file"] = normalised - context.data["currentFile"] = normalised diff --git a/pype/hosts/nuke/plugins/publish/extract_review_data_mov.py b/pype/hosts/nuke/plugins/publish/extract_review_data_mov.py index e9ac3c2c84..c64c7adc93 100644 --- a/pype/hosts/nuke/plugins/publish/extract_review_data_mov.py +++ b/pype/hosts/nuke/plugins/publish/extract_review_data_mov.py @@ -1,7 +1,7 @@ import os import pyblish.api from avalon.nuke import lib as anlib -from pype.hosts.nuke import lib as pnlib +from pype.hosts.nuke.api import lib as pnlib import pype diff --git a/pype/hosts/nuke/plugins/publish/precollect_instances.py b/pype/hosts/nuke/plugins/publish/precollect_instances.py index 60e90002da..1084eec620 100644 --- a/pype/hosts/nuke/plugins/publish/precollect_instances.py +++ b/pype/hosts/nuke/plugins/publish/precollect_instances.py @@ -8,7 +8,7 @@ from avalon.nuke import lib as anlib class PreCollectNukeInstances(pyblish.api.ContextPlugin): """Collect all nodes with Avalon knob.""" - order = pyblish.api.CollectorOrder - 0.6 + order = pyblish.api.CollectorOrder - 0.59 label = "Pre-collect Instances" hosts = ["nuke", "nukeassist"] @@ -36,7 +36,6 @@ class PreCollectNukeInstances(pyblish.api.ContextPlugin): self.log.warning(E) # get data from avalon knob - self.log.debug("node[name]: {}".format(node['name'].value())) avalon_knob_data = anlib.get_avalon_knob_data( node, ["avalon:", "ak:"]) @@ -69,6 +68,12 @@ class PreCollectNukeInstances(pyblish.api.ContextPlugin): instance = context.create_instance(subset) instance.append(node) + # get review knob value + review = False + if "review" in node.knobs(): + review = node["review"].value() + families.append("review") + # Add all nodes in group instances. if node.Class() == "Group": # only alter families for render family @@ -119,10 +124,15 @@ class PreCollectNukeInstances(pyblish.api.ContextPlugin): "resolutionWidth": resolution_width, "resolutionHeight": resolution_height, "pixelAspect": pixel_aspect, + "review": review }) self.log.info("collected instance: {}".format(instance.data)) instances.append(instance) - context.data["instances"] = instances + # create instances in context data if not are created yet + if not context.data.get("instances"): + context.data["instances"] = list() + + context.data["instances"].extend(instances) self.log.debug("context: {}".format(context)) diff --git a/pype/hosts/nuke/plugins/publish/collect_workfile.py b/pype/hosts/nuke/plugins/publish/precollect_workfile.py similarity index 79% rename from pype/hosts/nuke/plugins/publish/collect_workfile.py rename to pype/hosts/nuke/plugins/publish/precollect_workfile.py index b95edf0a93..4b90587bbb 100644 --- a/pype/hosts/nuke/plugins/publish/collect_workfile.py +++ b/pype/hosts/nuke/plugins/publish/precollect_workfile.py @@ -2,32 +2,31 @@ import nuke import pyblish.api import os -from avalon.nuke import ( - get_avalon_knob_data, - add_publish_knob -) +from avalon.nuke import lib as anlib +reload(anlib) class CollectWorkfile(pyblish.api.ContextPlugin): """Collect current script for publish.""" - order = pyblish.api.CollectorOrder + 0.1 - label = "Collect Workfile" + order = pyblish.api.CollectorOrder - 0.60 + label = "Pre-collect Workfile" hosts = ['nuke'] def process(self, context): root = nuke.root() - knob_data = get_avalon_knob_data(root) + current_file = os.path.normpath(nuke.root().name()) - add_publish_knob(root) + knob_data = anlib.get_avalon_knob_data(root) + + anlib.add_publish_knob(root) family = "workfile" task = os.getenv("AVALON_TASK", None) # creating instances per write node - file_path = context.data["currentFile"] - staging_dir = os.path.dirname(file_path) - base_name = os.path.basename(file_path) + staging_dir = os.path.dirname(current_file) + base_name = os.path.basename(current_file) subset = family + task.capitalize() # Get frame range @@ -62,6 +61,8 @@ class CollectWorkfile(pyblish.api.ContextPlugin): "handleEnd": handle_end, "step": 1, "fps": root['fps'].value(), + + "currentFile": current_file } context.data.update(script_data) @@ -90,4 +91,9 @@ class CollectWorkfile(pyblish.api.ContextPlugin): instance.data["representations"].append(representation) self.log.info('Publishing script version') + + # create instances in context data if not are created yet + if not context.data.get("instances"): + context.data["instances"] = list() + context.data["instances"].append(instance) diff --git a/pype/hosts/nuke/plugins/publish/collect_writes.py b/pype/hosts/nuke/plugins/publish/precollect_writes.py similarity index 90% rename from pype/hosts/nuke/plugins/publish/collect_writes.py rename to pype/hosts/nuke/plugins/publish/precollect_writes.py index fb00aeb1ae..93865d534d 100644 --- a/pype/hosts/nuke/plugins/publish/collect_writes.py +++ b/pype/hosts/nuke/plugins/publish/precollect_writes.py @@ -1,14 +1,15 @@ import os import nuke import pyblish.api +import pype.api as pype @pyblish.api.log class CollectNukeWrites(pyblish.api.InstancePlugin): """Collect all write nodes.""" - order = pyblish.api.CollectorOrder + 0.1 - label = "Collect Writes" + order = pyblish.api.CollectorOrder - 0.58 + label = "Pre-collect Writes" hosts = ["nuke", "nukeassist"] families = ["write"] @@ -39,11 +40,11 @@ class CollectNukeWrites(pyblish.api.InstancePlugin): # Get frame range handle_start = instance.context.data["handleStart"] handle_end = instance.context.data["handleEnd"] + current_file = instance.context.data["currentFile"] first_frame = int(nuke.root()["first_frame"].getValue()) last_frame = int(nuke.root()["last_frame"].getValue()) - frame_length = int( - last_frame - first_frame + 1 - ) + frame_length = int(last_frame - first_frame + 1) + review = instance.data["review"] if node["use_limit"].getValue(): first_frame = int(node["first"].getValue()) @@ -58,7 +59,7 @@ class CollectNukeWrites(pyblish.api.InstancePlugin): if "prerender" in f), None) and self.sync_workfile_version: # get version to instance for integration - instance.data['version'] = instance.context.data["version"] + instance.data['version'] = pype.get_version_from_path(current_file) self.log.debug('Write Version: %s' % instance.data('version')) @@ -79,7 +80,8 @@ class CollectNukeWrites(pyblish.api.InstancePlugin): representation = { 'name': ext, 'ext': ext, - "stagingDir": output_dir + "stagingDir": output_dir, + "tags": list() } try: @@ -108,6 +110,10 @@ class CollectNukeWrites(pyblish.api.InstancePlugin): collected_frames.insert(0, slate_frame) representation['files'] = collected_frames + # add review if any + if review: + representation["tags"].extend(["review", "ftrackreview"]) + instance.data["representations"].append(representation) except Exception: instance.data["representations"].append(representation)