fix create write [subset, families]

This commit is contained in:
Jakub Jezek 2018-11-30 16:43:54 +01:00
parent 40a5a4a065
commit c080823a44
4 changed files with 124 additions and 44 deletions

View file

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

View file

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

View file

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

View file

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