diff --git a/pype/api.py b/pype/api.py index 36094feb7f..746d18bc32 100644 --- a/pype/api.py +++ b/pype/api.py @@ -32,7 +32,7 @@ from .templates import ( get_asset, get_task, fill_avalon_workdir, - get_version_from_workfile + get_version_from_path ) __all__ = [ @@ -61,7 +61,7 @@ __all__ = [ "get_asset", "get_task", "fill_avalon_workdir", - "get_version_from_workfile", + "get_version_from_path", # preloaded templates "Anatomy", diff --git a/pype/nuke/__init__.py b/pype/nuke/__init__.py index 1a892c4187..c5d3652a73 100644 --- a/pype/nuke/__init__.py +++ b/pype/nuke/__init__.py @@ -67,6 +67,7 @@ if nuke_handler.get_name() \ not in [handler.get_name() for handler in api.Logger.logging.root.handlers[:]]: api.Logger.logging.getLogger().addHandler(nuke_handler) + api.Logger.logging.getLogger().setLevel(api.Logger.logging.DEBUG) if not self.nLogger: self.nLogger = api.Logger diff --git a/pype/nuke/lib.py b/pype/nuke/lib.py index 8971a43714..332070d946 100644 --- a/pype/nuke/lib.py +++ b/pype/nuke/lib.py @@ -1,4 +1,5 @@ import sys +import os from collections import OrderedDict from pprint import pprint from avalon.vendor.Qt import QtGui @@ -12,6 +13,49 @@ self = sys.modules[__name__] self._project = None +def onScriptLoad(): + if nuke.env['LINUX']: + nuke.tcl('load ffmpegReader') + nuke.tcl('load ffmpegWriter') + else: + nuke.tcl('load movReader') + nuke.tcl('load movWriter') + + +def writes_version_sync(): + try: + rootVersion = pype.get_version_from_path(nuke.root().name()) + padding = len(rootVersion) + new_version = str("{" + ":0>{}".format(padding) + "}").format( + int(rootVersion) + ) + log.info("new_version: {}".format(new_version)) + except Exception: + return + + for each in nuke.allNodes(): + if each.Class() == 'Write': + avalon_knob_data = get_avalon_knob_data(each) + if not avalon_knob_data: + continue + try: + node_file = each['file'].value() + log.info("node_file: {}".format(node_file)) + + node_version = pype.get_version_from_path(node_file, None) + log.info("node_version: {}".format(node_version)) + + node_new_file = node_file.replace(node_version, new_version) + each['file'].setValue(node_new_file) + except Exception as e: + log.debug("Write node: `{}` has no version in path: {}".format(each.name(), e)) + + +def version_up_script(): + import nukescripts + nukescripts.script_and_write_nodes_version_up() + + def format_anatomy(data): from .templates import ( get_anatomy @@ -26,7 +70,7 @@ def format_anatomy(data): data.update({ "hierarchy": pype.get_hiearchy(), "frame": "#"*padding, - "VERSION": pype.get_version_from_workfile(file) + "VERSION": pype.get_version_from_path(file) }) # log.info("format_anatomy:anatomy: {}".format(anatomy)) diff --git a/pype/plugins/nuke/publish/collect_writes.py b/pype/plugins/nuke/publish/collect_writes.py index 33ac8592a5..c13f3dcaa4 100644 --- a/pype/plugins/nuke/publish/collect_writes.py +++ b/pype/plugins/nuke/publish/collect_writes.py @@ -70,7 +70,7 @@ class CollectNukeWrites(pyblish.api.ContextPlugin): if node["render_farm"].value(): families = "{}.farm".format(instance.data["avalonKnob"]["families"][0]) else: - families = "{}.local".format(instance.data["avalonKnob"]["families"][0]) + families = "{}.local".format(instance.data["avalonKnob"]["families"]) self.log.debug("checking for error: {}".format(label)) instance.data.update({ diff --git a/pype/templates.py b/pype/templates.py index 7e4b962d52..437f3d4e81 100644 --- a/pype/templates.py +++ b/pype/templates.py @@ -34,15 +34,16 @@ def reset_data_from_templates(): log.info("Data from templates were Unloaded...") -def get_version_from_workfile(file): +def get_version_from_path(file, warning=True): pattern = re.compile(r"_v([0-9]*)") try: v_string = pattern.findall(file)[0] return v_string - except IndexError: - log.error("templates:get_version_from_workfile:" - "`{}` missing version string." - "Example `v004`".format(file)) + except IndexError as e: + if warning: + log.error("Exception: {} \nPlease save as version! " + "\nExample: script_name_v001.nk \n{}".format( + __name__ + ".get_version_from_path()", e)) def get_project_code(): diff --git a/setup/nuke/nuke_path/menu.py b/setup/nuke/nuke_path/menu.py index 6cfa1e3373..3613bc99f2 100644 --- a/setup/nuke/nuke_path/menu.py +++ b/setup/nuke/nuke_path/menu.py @@ -1,32 +1,12 @@ -from avalon.tools import workfiles +from pype.nuke.lib import writes_version_sync, onScriptLoad 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' +from pype.api import Logger -ffmpeg_cmd = '''if nuke.env['LINUX']: - nuke.tcl('load ffmpegReader') - nuke.tcl('load ffmpegWriter') -else: - nuke.tcl('load movReader') - nuke.tcl('load movWriter')''' -nuke.knobDefault('onScriptLoad', ffmpeg_cmd) +log = Logger.getLogger(__name__, "nuke") -# # run avalon's tool Workfiles -# workfiles = '''from avalon.tools import workfiles -# if nuke.Root().name() == 'Root': -# nuke.scriptClear() -# workfiles.show(os.environ["AVALON_WORKDIR"])''' -# nuke.knobDefault('onCreate', workfiles) +nuke.addOnScriptSave(writes_version_sync) +nuke.addOnScriptSave(onScriptLoad) -# workfiles.show(os.environ["AVALON_WORKDIR"]) +log.info('Automatic syncing of write file knob to script version')