mirror of
https://github.com/ynput/ayon-core.git
synced 2025-12-24 21:04:40 +01:00
fix(nuke): doctstrings and printing cleanup
This commit is contained in:
parent
ccb857e721
commit
0b742e5bb5
5 changed files with 111 additions and 44 deletions
|
|
@ -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))
|
||||
|
||||
|
|
|
|||
|
|
@ -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.
|
||||
|
|
|
|||
|
|
@ -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,
|
||||
|
|
|
|||
|
|
@ -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())
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue