utilization of already created action in nuke api

openpype.hosts.nuke.api.action.SelectInvalidAction
This commit is contained in:
Jakub Jezek 2023-10-12 17:16:35 +02:00
parent dfbc11bca5
commit 0953dc65cc
No known key found for this signature in database
GPG key ID: 730D7C02726179A7
3 changed files with 26 additions and 56 deletions

View file

@ -50,6 +50,8 @@ from .utils import (
get_colorspace_list
)
from .actions import SelectInvalidAction
__all__ = (
"file_extensions",
"has_unsaved_changes",
@ -92,5 +94,7 @@ __all__ = (
"create_write_node",
"colorspace_exists_on_node",
"get_colorspace_list"
"get_colorspace_list",
"SelectInvalidAction",
)

View file

@ -20,33 +20,31 @@ class SelectInvalidAction(pyblish.api.Action):
def process(self, context, plugin):
try:
import nuke
except ImportError:
raise ImportError("Current host is not Nuke")
errored_instances = get_errored_instances_from_context(context,
plugin=plugin)
# Get the errored instances for the plug-in
errored_instances = get_errored_instances_from_context(
context, plugin)
# Get the invalid nodes for the plug-ins
self.log.info("Finding invalid nodes..")
invalid = list()
invalid_nodes = set()
for instance in errored_instances:
invalid_nodes = plugin.get_invalid(instance)
invalid = plugin.get_invalid(instance)
if invalid_nodes:
if isinstance(invalid_nodes, (list, tuple)):
invalid.append(invalid_nodes[0])
else:
self.log.warning("Plug-in returned to be invalid, "
"but has no selectable nodes.")
if not invalid:
continue
# Ensure unique (process each node only once)
invalid = list(set(invalid))
select_node = instance.data.get("transientData", {}).get("node")
if not select_node:
raise RuntimeError(
"No transientData['node'] found on instance: {}".format(
instance)
)
if invalid:
self.log.info("Selecting invalid nodes: {}".format(invalid))
invalid_nodes.add(select_node)
if invalid_nodes:
self.log.info("Selecting invalid nodes: {}".format(invalid_nodes))
reset_selection()
select_nodes(invalid)
select_nodes(list(invalid_nodes))
else:
self.log.info("No invalid nodes found.")

View file

@ -4,34 +4,13 @@ from __future__ import absolute_import
import pyblish.api
import openpype.hosts.nuke.api.lib as nlib
from openpype.pipeline.publish import (
RepairAction,
ValidateContentsOrder,
PublishXmlValidationError,
OptionalPyblishPluginMixin,
get_errored_instances_from_context
OptionalPyblishPluginMixin
)
class SelectInvalidNodesAction(pyblish.api.Action):
"""Select invalid nodes."""
label = "Select Failed Node"
icon = "briefcase"
on = "failed"
def process(self, context, plugin):
if not hasattr(plugin, "select"):
raise RuntimeError("Plug-in does not have select method.")
# Get the failed instances
self.log.debug("Finding failed plug-ins..")
failed_instance = get_errored_instances_from_context(context, plugin)
if failed_instance:
self.log.debug("Attempting selection ...")
plugin.select(failed_instance.pop())
from openpype.hosts.nuke.api import SelectInvalidAction
class ValidateCorrectAssetContext(
@ -51,7 +30,7 @@ class ValidateCorrectAssetContext(
hosts = ["nuke"]
actions = [
RepairAction,
SelectInvalidNodesAction,
SelectInvalidAction
]
optional = True
@ -133,14 +112,3 @@ class ValidateCorrectAssetContext(
created_instance[_key] = instance.context.data[_key]
create_context.save_changes()
@classmethod
def select(cls, instance):
"""Select invalid node """
invalid = cls.get_invalid(instance)
if not invalid:
return
select_node = instance.data["transientData"]["node"]
nlib.reset_selection()
select_node["selected"].setValue(True)