From c080823a44c60c2d0b26710edc90362d1e094f08 Mon Sep 17 00:00:00 2001 From: Jakub Jezek Date: Fri, 30 Nov 2018 16:43:54 +0100 Subject: [PATCH] fix create write [subset, families] --- pype/nuke/lib.py | 29 ++++--- pype/nuke/templates.py | 18 ++-- pype/plugins/nuke/create/create_write.py | 101 ++++++++++++++++++++--- setup/nuke/nuke_path/menu.py | 20 ++--- 4 files changed, 124 insertions(+), 44 deletions(-) diff --git a/pype/nuke/lib.py b/pype/nuke/lib.py index 60c460e5a0..9db0280b5e 100644 --- a/pype/nuke/lib.py +++ b/pype/nuke/lib.py @@ -1,5 +1,4 @@ import sys -import os from collections import OrderedDict from pprint import pprint from avalon.vendor.Qt import QtGui @@ -27,7 +26,7 @@ def format_anatomy(data): "VERSION": pype.get_version_from_workfile(file) }) - log.info("format_anatomy:anatomy: {}".format(anatomy)) + # log.info("format_anatomy:anatomy: {}".format(anatomy)) return anatomy.format(data) @@ -35,19 +34,19 @@ def script_name(): return nuke.root().knob('name').value() -def create_write_node(name, avalon_data, data_templates): +def create_write_node(name, data): from .templates import ( get_dataflow, get_colorspace ) - nuke_dataflow_writes = get_dataflow(**data_templates) - nuke_colorspace_writes = get_colorspace(**data_templates) + nuke_dataflow_writes = get_dataflow(**data) + nuke_colorspace_writes = get_colorspace(**data) try: anatomy_filled = format_anatomy({ - "subset": avalon_data["subset"], - "asset": avalon_data["asset"], + "subset": data["avalon"]["subset"], + "asset": data["avalon"]["asset"], "task": pype.get_task(), - "family": avalon_data["family"], + "family": data["avalon"]["family"], "project": {"name": pype.get_project_name(), "code": pype.get_project_code()}, "representation": nuke_dataflow_writes.file_type, @@ -57,28 +56,28 @@ def create_write_node(name, avalon_data, data_templates): log.debug("anatomy_filled.render: {}".format(anatomy_filled.render)) - data = OrderedDict({ + _data = OrderedDict({ "file": str(anatomy_filled.render.path).replace("\\", "/") }) # adding dataflow template - {data.update({k: v}) + {_data.update({k: v}) for k, v in nuke_dataflow_writes.items() if k not in ["id", "previous"]} # adding dataflow template - {data.update({k: v}) + {_data.update({k: v}) for k, v in nuke_colorspace_writes.items()} - data = avalon.nuke.lib.fix_data_for_node_create(data) + _data = avalon.nuke.lib.fix_data_for_node_create(_data) - log.debug(data) + log.debug(_data) instance = avalon.nuke.lib.add_write_node( name, - **data + **_data ) - instance = avalon.nuke.lib.imprint(instance, avalon_data) + instance = avalon.nuke.lib.imprint(instance, data["avalon"]) return instance diff --git a/pype/nuke/templates.py b/pype/nuke/templates.py index 5b0b45ac76..16cb6062a2 100644 --- a/pype/nuke/templates.py +++ b/pype/nuke/templates.py @@ -8,32 +8,34 @@ def get_anatomy(**kwarg): def get_dataflow(**kwarg): + log.info(kwarg) host = kwarg.get("host", "nuke") - cls = kwarg.get("cls", None) - family = kwarg.get("family", None) + cls = kwarg.get("class", None) + preset = kwarg.get("preset", None) assert any([host, cls]), log.error("nuke.templates.get_dataflow():" "Missing mandatory kwargs `host`, `cls`") nuke_dataflow = getattr(pype.Dataflow, str(host), None) nuke_dataflow_node = getattr(nuke_dataflow.nodes, str(cls), None) - if family: - nuke_dataflow_node = getattr(nuke_dataflow_node, str(family), None) + if preset: + nuke_dataflow_node = getattr(nuke_dataflow_node, str(preset), None) log.info("Dataflow: {}".format(nuke_dataflow_node)) return nuke_dataflow_node def get_colorspace(**kwarg): + log.info(kwarg) host = kwarg.get("host", "nuke") - cls = kwarg.get("cls", None) - family = kwarg.get("family", None) + cls = kwarg.get("class", None) + preset = kwarg.get("preset", None) assert any([host, cls]), log.error("nuke.templates.get_colorspace():" "Missing mandatory kwargs `host`, `cls`") nuke_colorspace = getattr(pype.Colorspace, str(host), None) nuke_colorspace_node = getattr(nuke_colorspace, str(cls), None) - if family: - nuke_colorspace_node = getattr(nuke_colorspace_node, str(family), None) + if preset: + nuke_colorspace_node = getattr(nuke_colorspace_node, str(preset), None) log.info("Colorspace: {}".format(nuke_colorspace_node)) return nuke_colorspace_node diff --git a/pype/plugins/nuke/create/create_write.py b/pype/plugins/nuke/create/create_write.py index 3fffb696ea..c42e3262e8 100644 --- a/pype/plugins/nuke/create/create_write.py +++ b/pype/plugins/nuke/create/create_write.py @@ -1,3 +1,4 @@ +from collections import OrderedDict import avalon.api import avalon.nuke from pype.nuke import ( @@ -5,25 +6,55 @@ from pype.nuke import ( ) from pype import api as pype + log = pype.Logger.getLogger(__name__, "nuke") +def subset_to_families(subset, family, families): + subset_sufx = str(subset).replace(family, "") + new_subset = families + subset_sufx + return "{}.{}".format(family, new_subset) + + class CrateWriteRender(avalon.nuke.Creator): name = "WriteRender" label = "Create Write Render" hosts = ["nuke"] - family = "render" + family = "render" # change this to template + families = "write" # do not change! icon = "sign-out" + def __init__(self, *args, **kwargs): + super(CrateWriteRender, self).__init__(*args, **kwargs) + + data = OrderedDict() + + # creating pype subset + data["subset"] = subset_to_families( + self.data["subset"], + self.family, + self.families + ) + # swaping family with families + data["family"] = self.families + data["families"] = self.family + + {data.update({k: v}) for k, v in self.data.items() + if k not in data.keys()} + self.data = data + def process(self): instance = super(CrateWriteRender, self).process() if not instance: data_templates = { - "cls": "write", - "family": self.family + "class": self.families, + # only one is required + "preset": self.family, + "avalon": self.data } - create_write_node(self.name, self.data, data_templates) + + create_write_node(self.name, data_templates) return @@ -33,18 +64,42 @@ class CrateWritePrerender(avalon.nuke.Creator): label = "Create Write Prerender" hosts = ["nuke"] family = "prerender" + families = "write" icon = "sign-out" + def __init__(self, *args, **kwargs): + super(CrateWritePrerender, self).__init__(*args, **kwargs) + + data = OrderedDict() + + # creating pype subset + data["subset"] = subset_to_families( + self.data["subset"], + self.family, + self.families + ) + # swaping family with families + data["family"] = self.families + data["families"] = self.family + + {data.update({k: v}) for k, v in self.data.items() + if k not in data.keys()} + self.data = data + def process(self): instance = super(CrateWritePrerender, self).process() if not instance: data_templates = { - "cls": "write", - "family": self.family + "class": self.families, + # only one is required + "preset": self.family, + "avalon": self.data } - create_write_node(self.name, self.data, data_templates) - return None + + create_write_node(self.name, data_templates) + + return class CrateWriteStill(avalon.nuke.Creator): @@ -52,15 +107,39 @@ class CrateWriteStill(avalon.nuke.Creator): label = "Create Write Still" hosts = ["nuke"] family = "still" + families = "write" icon = "image" + def __init__(self, *args, **kwargs): + super(CrateWriteStill, self).__init__(*args, **kwargs) + + data = OrderedDict() + + # creating pype subset + data["subset"] = subset_to_families( + self.data["subset"], + self.family, + self.families + ) + # swaping family with families + data["family"] = self.families + data["families"] = self.family + + {data.update({k: v}) for k, v in self.data.items() + if k not in data.keys()} + self.data = data + def process(self): instance = super(CrateWriteStill, self).process() if not instance: data_templates = { - "cls": "write", - "family": self.family + "class": self.families, + # only one is required + "preset": self.family, + "avalon": self.data } - create_write_node(self.name, self.data, data_templates) + + create_write_node(self.name, data_templates) + return diff --git a/setup/nuke/nuke_path/menu.py b/setup/nuke/nuke_path/menu.py index a454b8bd66..6cfa1e3373 100644 --- a/setup/nuke/nuke_path/menu.py +++ b/setup/nuke/nuke_path/menu.py @@ -2,16 +2,16 @@ from avalon.tools import workfiles import nuke # auto fix version paths in write nodes following root name of script -cmd = ''' -import re -rootVersion=re.search('[vV]\d+', os.path.split(nuke.root().name())[1]).group() -for each in nuke.allNodes(): - if each.Class() == 'Write': - each['file'].setValue(re.sub('[vV]\d+', rootVersion, each['file'].value())) -''' -nuke.knobDefault('onScriptSave', cmd) - -print '\n>>> menu.py: Function for automatic check of version in write nodes is added\n' +# cmd = ''' +# import re +# rootVersion=re.search('[vV]\d+', os.path.split(nuke.root().name())[1]).group() +# for each in nuke.allNodes(): +# if each.Class() == 'Write': +# each['file'].setValue(re.sub('[vV]\d+', rootVersion, each['file'].value())) +# ''' +# nuke.knobDefault('onScriptSave', cmd) +# +# print '\n>>> menu.py: Function for automatic check of version in write nodes is added\n' ffmpeg_cmd = '''if nuke.env['LINUX']: nuke.tcl('load ffmpegReader')