fix(nuke): doctstrings and printing cleanup

This commit is contained in:
Jakub Jezek 2019-08-05 19:11:49 +02:00
parent ccb857e721
commit 0b742e5bb5
5 changed files with 111 additions and 44 deletions

View file

@ -59,13 +59,14 @@ class NukeHandler(logging.Handler):
'''Adding Nuke Logging Handler'''
log.info([handler.get_name() for handler in logging.root.handlers[:]])
nuke_handler = NukeHandler()
if nuke_handler.get_name() \
not in [handler.get_name()
for handler in logging.root.handlers[:]]:
logging.getLogger().addHandler(nuke_handler)
logging.getLogger().setLevel(logging.INFO)
log.info([handler.get_name() for handler in logging.root.handlers[:]])
def reload_config():
"""Attempt to reload pipeline at run-time.
@ -77,10 +78,7 @@ def reload_config():
import importlib
for module in (
"app",
"app.api",
"{}.api".format(AVALON_CONFIG),
"{}.templates".format(AVALON_CONFIG),
"{}.nuke.actions".format(AVALON_CONFIG),
"{}.nuke.templates".format(AVALON_CONFIG),
"{}.nuke.menu".format(AVALON_CONFIG),
@ -96,9 +94,8 @@ def reload_config():
def install():
# api.set_avalon_workdir()
# reload_config()
''' Installing all requarements for Nuke host
'''
log.info("Registering Nuke plug-ins..")
pyblish.register_plugin_path(PUBLISH_PATH)
@ -117,8 +114,6 @@ def install():
avalon.data["familiesStateDefault"] = False
avalon.data["familiesStateToggled"] = family_states
menu.install()
# Workfiles.
launch_workfiles = os.environ.get("WORKFILES_STARTUP")
@ -128,14 +123,21 @@ def install():
# Set context settings.
nuke.addOnCreate(lib.set_context_settings, nodeClass="Root")
menu.install()
def launch_workfiles_app():
'''Function letting start workfiles after start of host
'''
if not self.workfiles_launched:
self.workfiles_launched = True
workfiles.show(os.environ["AVALON_WORKDIR"])
def uninstall():
'''Uninstalling host's integration
'''
log.info("Deregistering Nuke plug-ins..")
pyblish.deregister_plugin_path(PUBLISH_PATH)
avalon.deregister_plugin_path(avalon.Loader, LOAD_PATH)
@ -144,8 +146,13 @@ def uninstall():
pyblish.deregister_callback("instanceToggled", on_pyblish_instance_toggled)
reload_config()
menu.uninstall()
def on_pyblish_instance_toggled(instance, old_value, new_value):
"""Toggle node passthrough states on instance toggles."""
log.info("instance toggle: {}, old_value: {}, new_value:{} ".format(
instance, old_value, new_value))

View file

@ -1,6 +1,3 @@
# absolute_import is needed to counter the `module has no cmds error` in Maya
from __future__ import absolute_import
import pyblish.api
from avalon.nuke.lib import (
@ -12,7 +9,7 @@ from ..action import get_errored_instances_from_context
class SelectInvalidAction(pyblish.api.Action):
"""Select invalid nodes in Maya when plug-in failed.
"""Select invalid nodes in Nuke when plug-in failed.
To retrieve the invalid nodes this assumes a static `get_invalid()`
method is available on the plugin.

View file

@ -20,6 +20,8 @@ self._project = None
def onScriptLoad():
''' Callback for ffmpeg support
'''
if nuke.env['LINUX']:
nuke.tcl('load ffmpegReader')
nuke.tcl('load ffmpegWriter')
@ -37,6 +39,7 @@ def checkInventoryVersions():
and check if the node is having actual version. If not then it will color
it to red.
"""
# TODO: make it for all nodes not just Read (Loader
# get all Loader nodes by avalon attribute metadata
for each in nuke.allNodes():
@ -76,13 +79,16 @@ def checkInventoryVersions():
def writes_version_sync():
''' Callback synchronizing version of publishable write nodes
'''
# TODO: make it work with new write node group
try:
rootVersion = pype.get_version_from_path(nuke.root().name())
padding = len(rootVersion)
new_version = "v" + str("{" + ":0>{}".format(padding) + "}").format(
int(rootVersion)
)
log.info("new_version: {}".format(new_version))
log.debug("new_version: {}".format(new_version))
except Exception:
return
@ -92,32 +98,34 @@ def writes_version_sync():
try:
if avalon_knob_data['families'] not in ["render"]:
log.info(avalon_knob_data['families'])
log.debug(avalon_knob_data['families'])
continue
node_file = each['file'].value()
log.info("node_file: {}".format(node_file))
node_version = "v" + pype.get_version_from_path(node_file)
log.info("node_version: {}".format(node_version))
log.debug("node_version: {}".format(node_version))
node_new_file = node_file.replace(node_version, new_version)
each['file'].setValue(node_new_file)
if not os.path.isdir(os.path.dirname(node_new_file)):
log.info("path does not exist")
log.warning("Path does not exist! I am creating it.")
os.makedirs(os.path.dirname(node_new_file), 0o766)
except Exception as e:
log.debug(
log.warning(
"Write node: `{}` has no version in path: {}".format(each.name(), e))
def version_up_script():
''' Raising working script's version
'''
import nukescripts
nukescripts.script_and_write_nodes_version_up()
def get_render_path(node):
''' Generate Render path from presets regarding avalon knob data
'''
data = dict()
data['avalon'] = avalon.nuke.get_avalon_knob_data(node)
@ -141,12 +149,24 @@ def get_render_path(node):
def format_anatomy(data):
''' Helping function for formating of anatomy paths
Arguments:
data (dict): dictionary with attributes used for formating
Return:
path (str)
'''
# TODO: perhaps should be nonPublic
from .templates import (
get_anatomy
)
# TODO: remove get_anatomy and import directly Anatomy() here
anatomy = get_anatomy()
log.info("__ anatomy.templates: {}".format(anatomy.templates))
log.debug("__ anatomy.templates: {}".format(anatomy.templates))
# TODO: perhaps should be in try!
padding = int(anatomy.templates['render']['padding'])
version = data.get("version", None)
@ -167,17 +187,17 @@ def format_anatomy(data):
"hierarchy": pype.get_hierarchy(),
"frame": "#" * padding,
})
log.info("__ data: {}".format(data))
log.info("__ format_anatomy: {}".format(anatomy.format(data)))
return anatomy.format(data)
def script_name():
''' Returns nuke script path
'''
return nuke.root().knob('name').value()
def create_write_node(name, data, prenodes=None):
'''Creating write node which is group node
''' Creating write node which is group node
Arguments:
name (str): name of node
@ -200,6 +220,8 @@ def create_write_node(name, data, prenodes=None):
)
]
Return:
node (obj): group node with avalon data as Knobs
'''
nuke_dataflow_writes = get_node_dataflow_preset(**data)
@ -228,7 +250,7 @@ def create_write_node(name, data, prenodes=None):
# create directory
if not os.path.isdir(os.path.dirname(fpath)):
log.info("path does not exist")
log.warning("Path does not exist! I am creating it.")
os.makedirs(os.path.dirname(fpath), 0o766)
_data = OrderedDict({
@ -321,11 +343,19 @@ def create_write_node(name, data, prenodes=None):
lnk.makeLink(write_node.name(), "Render")
lnk.setName("Render")
GN.addKnob(lnk)
return GN
def add_rendering_knobs(node):
''' Adds additional rendering knobs to given node
Arguments:
node (obj): nuke node object to be fixed
Return:
node (obj): with added knobs
'''
if "render" not in node.knobs():
knob = nuke.Boolean_Knob("render", "Render")
knob.setFlag(0x1000)
@ -339,6 +369,12 @@ def add_rendering_knobs(node):
def set_viewers_colorspace(viewer):
''' Adds correct colorspace to viewer
Arguments:
viewer (obj): nuke viewer node object to be fixed
'''
assert isinstance(viewer, dict), log.error(
"set_viewers_colorspace(): argument should be dictionary")
@ -382,6 +418,12 @@ def set_viewers_colorspace(viewer):
def set_root_colorspace(root_dict):
''' Adds correct colorspace to root
Arguments:
root_dict (dict): nuke root node as dictionary
'''
assert isinstance(root_dict, dict), log.error(
"set_root_colorspace(): argument should be dictionary")
@ -398,17 +440,26 @@ def set_root_colorspace(root_dict):
for knob, value in root_dict.items():
if nuke.root()[knob].value() not in value:
nuke.root()[knob].setValue(str(value))
log.info("nuke.root()['{}'] changed to: {}".format(knob, value))
log.debug("nuke.root()['{}'] changed to: {}".format(knob, value))
def set_writes_colorspace(write_dict):
''' Adds correct colorspace to write node dict
Arguments:
write_dict (dict): nuke write node as dictionary
'''
# TODO: complete this function so any write node in scene will have fixed colorspace following presets for the project
assert isinstance(write_dict, dict), log.error(
"set_root_colorspace(): argument should be dictionary")
log.info("set_writes_colorspace(): {}".format(write_dict))
log.debug("__ set_writes_colorspace(): {}".format(write_dict))
def set_colorspace():
''' Setting colorpace following presets
'''
nuke_colorspace = get_colorspace_preset().get("nuke", None)
try:
@ -429,7 +480,7 @@ def set_colorspace():
try:
for key in nuke_colorspace:
log.info("{}".format(key))
log.debug("Preset's colorspace key: {}".format(key))
except TypeError:
log.error("Nuke is not in templates! \n\n\n"
"contact your supervisor!")
@ -475,10 +526,6 @@ def reset_frame_range_handles():
root["first_frame"].setValue(frame_start)
root["last_frame"].setValue(frame_end)
log.info("__ handle_start: `{}`".format(handle_start))
log.info("__ handle_end: `{}`".format(handle_end))
log.info("__ fps: `{}`".format(fps))
# setting active viewers
nuke.frame(int(asset_entity["data"]["frameStart"]))
@ -489,10 +536,6 @@ def reset_frame_range_handles():
for node in nuke.allNodes(filter="Viewer"):
node['frame_range'].setValue(range)
node['frame_range_lock'].setValue(True)
log.info("_frameRange: {}".format(range))
log.info("frameRange: {}".format(node['frame_range'].value()))
node['frame_range'].setValue(range)
node['frame_range_lock'].setValue(True)
@ -515,7 +558,6 @@ def reset_resolution():
height = asset.get('data', {}).get("resolutionHeight")
pixel_aspect = asset.get('data', {}).get("pixelAspect")
log.info("pixel_aspect: {}".format(pixel_aspect))
if any(not x for x in [width, height, pixel_aspect]):
log.error("Missing set shot attributes in DB. \nContact your supervisor!. \n\nWidth: `{0}` \nHeight: `{1}` \nPixel Asspect: `{2}`".format(
width, height, pixel_aspect))
@ -564,7 +606,6 @@ def reset_resolution():
"t": int(check_format.t()),
})
crnt_fmt_str = make_format_string(**crnt_fmt_kargs)
log.info("crnt_fmt_str: {}".format(crnt_fmt_str))
new_fmt_kargs = {
"width": int(width),
@ -581,7 +622,6 @@ def reset_resolution():
})
new_fmt_str = make_format_string(**new_fmt_kargs)
log.info("new_fmt_str: {}".format(new_fmt_str))
if new_fmt_str not in crnt_fmt_str:
make_format(frm_str=new_fmt_str,

View file

@ -2,10 +2,11 @@ import nuke
from avalon.api import Session
from pype.nuke import lib
from pypeapp import Logger
log = Logger().get_logger(__name__, "nuke")
def install():
menubar = nuke.menu("Nuke")
menu = menubar.findItem(Session["AVALON_LABEL"])
@ -15,8 +16,11 @@ def install():
rm_item = [
(i, item) for i, item in enumerate(menu.items()) if name in item.name()
][0]
log.debug("Changing Item: {}".format(rm_item))
# rm_item[1].setEnabled(False)
menu.removeItem(rm_item[1].name())
menu.addCommand(new_name, lib.reset_resolution, index=rm_item[0])
menu.addCommand(new_name, lib.reset_resolution, index=(rm_item[0]))
# replace reset frame range from avalon core to pype's
name = "Reset Frame Range"
@ -24,8 +28,10 @@ def install():
rm_item = [
(i, item) for i, item in enumerate(menu.items()) if name in item.name()
][0]
log.debug("Changing Item: {}".format(rm_item))
# rm_item[1].setEnabled(False)
menu.removeItem(rm_item[1].name())
menu.addCommand(new_name, lib.reset_frame_range_handles, index=rm_item[0])
menu.addCommand(new_name, lib.reset_frame_range_handles, index=(rm_item[0]))
# add colorspace menu item
name = "Set colorspace"
@ -33,9 +39,22 @@ def install():
name, lib.set_colorspace,
index=(rm_item[0]+2)
)
log.debug("Adding menu item: {}".format(name))
# add item that applies all setting above
name = "Apply all settings"
menu.addCommand(
name, lib.set_context_settings, index=(rm_item[0]+3)
)
log.debug("Adding menu item: {}".format(name))
def uninstall():
menubar = nuke.menu("Nuke")
menu = menubar.findItem(Session["AVALON_LABEL"])
for item in menu.items():
log.info("Removing menu item: {}".format(item.name()))
menu.removeItem(item.name())

View file

@ -20,6 +20,8 @@ def get_colorspace_preset():
def get_node_dataflow_preset(**kwarg):
''' Get preset data for dataflow (fileType, compression, bitDepth)
'''
log.info(kwarg)
host = kwarg.get("host", "nuke")
cls = kwarg.get("class", None)
@ -39,6 +41,8 @@ def get_node_dataflow_preset(**kwarg):
def get_node_colorspace_preset(**kwarg):
''' Get preset data for colorspace
'''
log.info(kwarg)
host = kwarg.get("host", "nuke")
cls = kwarg.get("class", None)