fix(nuke: removing annoying message window

happened every time log.error happened
This commit is contained in:
Jakub Jezek 2020-01-28 15:06:48 +01:00
parent 8b014bcb23
commit b0da1c9013
No known key found for this signature in database
GPG key ID: C4B96E101D2A47F3
12 changed files with 133 additions and 91 deletions

View file

@ -33,40 +33,41 @@ if os.getenv("PYBLISH_GUI", None):
pyblish.register_gui(os.getenv("PYBLISH_GUI", None))
class NukeHandler(logging.Handler):
'''
Nuke Handler - emits logs into nuke's script editor.
warning will emit nuke.warning()
critical and fatal would popup msg dialog to alert of the error.
'''
# class NukeHandler(logging.Handler):
# '''
# Nuke Handler - emits logs into nuke's script editor.
# warning will emit nuke.warning()
# critical and fatal would popup msg dialog to alert of the error.
# '''
#
# def __init__(self):
# logging.Handler.__init__(self)
# self.set_name("Pype_Nuke_Handler")
#
# def emit(self, record):
# # Formated message:
# msg = self.format(record)
#
# if record.levelname.lower() in [
# # "warning",
# "critical",
# "fatal",
# "error"
# ]:
# msg = self.format(record)
# nuke.message(msg)
#
#
# '''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 __init__(self):
logging.Handler.__init__(self)
self.set_name("Pype_Nuke_Handler")
def emit(self, record):
# Formated message:
msg = self.format(record)
if record.levelname.lower() in [
# "warning",
"critical",
"fatal",
"error"
]:
msg = self.format(record)
nuke.message(msg)
'''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.
@ -113,7 +114,7 @@ def install():
family_states = [
"write",
"review",
"nukenodes"
"nukenodes"
"gizmo"
]

View file

@ -21,7 +21,6 @@ from .presets import (
from .presets import (
get_anatomy
)
# TODO: remove get_anatomy and import directly Anatomy() here
from pypeapp import Logger
log = Logger().get_logger(__name__, "nuke")
@ -50,8 +49,6 @@ 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():
if each.Class() == 'Read':
@ -93,7 +90,6 @@ 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)
@ -130,7 +126,8 @@ def writes_version_sync():
os.makedirs(os.path.dirname(node_new_file), 0o766)
except Exception as e:
log.warning(
"Write node: `{}` has no version in path: {}".format(each.name(), e))
"Write node: `{}` has no version in path: {}".format(
each.name(), e))
def version_up_script():
@ -183,9 +180,11 @@ def format_anatomy(data):
try:
padding = int(anatomy.templates['render']['padding'])
except KeyError as e:
log.error("`padding` key is not in `render` "
"Anatomy template. Please, add it there and restart "
"the pipeline (padding: \"4\"): `{}`".format(e))
msg = "`padding` key is not in `render` "
"Anatomy template. Please, add it there and restart "
"the pipeline (padding: \"4\"): `{}`".format(e)
log.error(msg)
nuke.message(msg)
version = data.get("version", None)
if not version:
@ -265,7 +264,9 @@ def create_write_node(name, data, input=None, prenodes=None):
anatomy_filled = format_anatomy(data)
except Exception as e:
log.error("problem with resolving anatomy tepmlate: {}".format(e))
msg = "problem with resolving anatomy tepmlate: {}".format(e)
log.error(msg)
nuke.message(msg)
# build file path to workfiles
fpath = str(anatomy_filled["work"]["folder"]).replace("\\", "/")
@ -543,8 +544,11 @@ class WorkfileSettings(object):
viewer_dict (dict): adjustments from presets
'''
assert isinstance(viewer_dict, dict), log.error(
"set_viewers_colorspace(): argument should be dictionary")
if not isinstance(viewer_dict, dict):
msg = "set_viewers_colorspace(): argument should be dictionary"
log.error(msg)
nuke.message(msg)
return
filter_knobs = [
"viewerProcess",
@ -592,8 +596,10 @@ class WorkfileSettings(object):
root_dict (dict): adjustmensts from presets
'''
assert isinstance(root_dict, dict), log.error(
"set_root_colorspace(): argument should be dictionary")
if not isinstance(root_dict, dict):
msg = "set_root_colorspace(): argument should be dictionary"
log.error(msg)
nuke.message(msg)
log.debug(">> root_dict: {}".format(root_dict))
@ -640,8 +646,11 @@ class WorkfileSettings(object):
'''
# 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")
if not isinstance(write_dict, dict):
msg = "set_root_colorspace(): argument should be dictionary"
nuke.message(msg)
log.error(msg)
return
log.debug("__ set_writes_colorspace(): {}".format(write_dict))
@ -653,25 +662,28 @@ class WorkfileSettings(object):
try:
self.set_root_colorspace(nuke_colorspace["root"])
except AttributeError:
log.error(
"set_colorspace(): missing `root` settings in template")
msg = "set_colorspace(): missing `root` settings in template"
try:
self.set_viewers_colorspace(nuke_colorspace["viewer"])
except AttributeError:
log.error(
"set_colorspace(): missing `viewer` settings in template")
msg = "set_colorspace(): missing `viewer` settings in template"
nuke.message(msg)
log.error(msg)
try:
self.set_writes_colorspace(nuke_colorspace["write"])
except AttributeError:
log.error(
"set_colorspace(): missing `write` settings in template")
msg = "set_colorspace(): missing `write` settings in template"
nuke.message(msg)
log.error(msg)
try:
for key in nuke_colorspace:
log.debug("Preset's colorspace key: {}".format(key))
except TypeError:
log.error("Nuke is not in templates! \n\n\n"
"contact your supervisor!")
msg = "Nuke is not in templates! Contact your supervisor!"
nuke.message(msg)
log.error(msg)
def reset_frame_range_handles(self):
"""Set frame range to current asset"""
@ -758,13 +770,13 @@ class WorkfileSettings(object):
}
if any(x for x in data.values() if x is None):
log.error(
"Missing set shot attributes in DB."
"\nContact your supervisor!."
"\n\nWidth: `{width}`"
"\nHeight: `{height}`"
"\nPixel Asspect: `{pixel_aspect}`".format(**data)
)
msg = "Missing set shot attributes in DB."
"\nContact your supervisor!."
"\n\nWidth: `{width}`"
"\nHeight: `{height}`"
"\nPixel Asspect: `{pixel_aspect}`".format(**data)
log.error(msg)
nuke.message(msg)
bbox = self._asset_entity.get('data', {}).get('crop')
@ -781,10 +793,10 @@ class WorkfileSettings(object):
)
except Exception as e:
bbox = None
log.error(
"{}: {} \nFormat:Crop need to be set with dots, example: "
msg = "{}: {} \nFormat:Crop need to be set with dots, example: "
"0.0.1920.1080, /nSetting to default".format(__name__, e)
)
log.error(msg)
nuke.message(msg)
existing_format = None
for format in nuke.formats():

View file

@ -1,6 +1,6 @@
from pype import api as pype
from pypeapp import Anatomy, config
import nuke
log = pype.Logger().get_logger(__name__, "nuke")
@ -28,7 +28,7 @@ def get_node_dataflow_preset(**kwarg):
families = kwarg.get("families", [])
preset = kwarg.get("preset", None) # omit < 2.0.0v
assert any([host, cls]), log.error(
assert any([host, cls]), nuke.message(
"`{}`: Missing mandatory kwargs `host`, `cls`".format(__file__))
nuke_dataflow = get_dataflow_preset().get(str(host), None)
@ -56,8 +56,10 @@ def get_node_colorspace_preset(**kwarg):
families = kwarg.get("families", [])
preset = kwarg.get("preset", None) # omit < 2.0.0v
assert any([host, cls]), log.error(
"`{}`: Missing mandatory kwargs `host`, `cls`".format(__file__))
if not any([host, cls]):
msg = "`{}`: Missing mandatory kwargs `host`, `cls`".format(__file__)
log.error(msg)
nuke.message(msg)
nuke_colorspace = get_colorspace_preset().get(str(host), None)
nuke_colorspace_node = nuke_colorspace.get(str(cls), None)

View file

@ -35,8 +35,10 @@ class CreateBackdrop(Creator):
return instance
else:
nuke.message("Please select nodes you "
"wish to add to a container")
msg = "Please select nodes you "
"wish to add to a container"
self.log.error(msg)
nuke.message(msg)
return
else:
bckd_node = autoBackdrop()

View file

@ -36,8 +36,10 @@ class CreateGizmo(Creator):
node["tile_color"].setValue(int(self.node_color, 16))
return anlib.imprint(node, self.data)
else:
nuke.message("Please select a group node "
"you wish to publish as the gizmo")
msg = "Please select a group node "
"you wish to publish as the gizmo"
self.log.error(msg)
nuke.message(msg)
if len(nodes) >= 2:
anlib.select_nodes(nodes)
@ -58,8 +60,10 @@ class CreateGizmo(Creator):
return anlib.imprint(gizmo_node, self.data)
else:
nuke.message("Please select nodes you "
"wish to add to the gizmo")
msg = "Please select nodes you "
"wish to add to the gizmo"
self.log.error(msg)
nuke.message(msg)
return
else:
with anlib.maintained_selection():

View file

@ -34,7 +34,9 @@ class CrateRead(avalon.nuke.Creator):
nodes = self.nodes
if not nodes or len(nodes) == 0:
nuke.message('Please select Read node')
msg = "Please select Read node"
self.log.error(msg)
nuke.message(msg)
else:
count_reads = 0
for node in nodes:
@ -46,7 +48,9 @@ class CrateRead(avalon.nuke.Creator):
count_reads += 1
if count_reads < 1:
nuke.message('Please select Read node')
msg = "Please select Read node"
self.log.error(msg)
nuke.message(msg)
return
def change_read_node(self, name, node, data):

View file

@ -41,9 +41,11 @@ class CreateWriteRender(plugin.PypeCreator):
if (self.options or {}).get("useSelection"):
nodes = self.nodes
assert len(nodes) < 2, self.log.error(
"Select only one node. The node you want to connect to, "
"or tick off `Use selection`")
if not (len(nodes) < 2):
msg = "Select only one node. The node you want to connect to, "
"or tick off `Use selection`"
log.error(msg)
nuke.message(msg)
selected_node = nodes[0]
inputs = [selected_node]
@ -134,7 +136,11 @@ class CreateWritePrerender(plugin.PypeCreator):
if (self.options or {}).get("useSelection"):
nodes = self.nodes
assert len(nodes) < 2, self.log.error("Select only one node. The node you want to connect to, or tick off `Use selection`")
if not (len(nodes) < 2):
msg = "Select only one node. The node you want to connect to, "
"or tick off `Use selection`"
self.log.error(msg)
nuke.message(msg)
selected_node = nodes[0]
inputs = [selected_node]

View file

@ -256,8 +256,11 @@ class LoadBackdropNodes(api.Loader):
if len(viewer) > 0:
viewer = viewer[0]
else:
self.log.error("Please create Viewer node before you "
"run this action again")
if not (len(nodes) < 2):
msg = "Please create Viewer node before you "
"run this action again"
self.log.error(msg)
nuke.message(msg)
return None
# get coordinates of Viewer1

View file

@ -176,8 +176,10 @@ class LoadGizmoInputProcess(api.Loader):
if len(viewer) > 0:
viewer = viewer[0]
else:
self.log.error("Please create Viewer node before you "
"run this action again")
msg = "Please create Viewer node before you "
"run this action again"
self.log.error(msg)
nuke.message(msg)
return None
# get coordinates of Viewer1

View file

@ -276,7 +276,10 @@ class LoadLutsInputProcess(api.Loader):
if len(viewer) > 0:
viewer = viewer[0]
else:
self.log.error("Please create Viewer node before you run this action again")
msg = "Please create Viewer node before you "
"run this action again"
self.log.error(msg)
nuke.message(msg)
return None
# get coordinates of Viewer1

View file

@ -1,4 +1,5 @@
from avalon import api
import nuke
class MatchmoveLoader(api.Loader):
@ -19,6 +20,8 @@ class MatchmoveLoader(api.Loader):
exec(open(self.fname).read())
else:
self.log.error("Unsupported script type")
msg = "Unsupported script type"
self.log.error(msg)
nuke.message(msg)
return True

View file

@ -41,7 +41,7 @@ class ValidateRenderedFrames(pyblish.api.InstancePlugin):
if not repre.get('files'):
msg = ("no frames were collected, "
"you need to render them")
self.log.warning(msg)
self.log.error(msg)
raise ValidationException(msg)
collections, remainder = clique.assemble(repre["files"])
@ -75,7 +75,7 @@ class ValidateRenderedFrames(pyblish.api.InstancePlugin):
self.log.info(
'len(collection.indexes): {}'.format(collected_frames_len)
)
if "slate" in instance.data["families"]:
collected_frames_len -= 1