nuke: fixing validators

This commit is contained in:
Jakub Jezek 2022-10-27 15:12:31 +02:00
parent b400a604f0
commit ebb07f9284
No known key found for this signature in database
GPG key ID: 730D7C02726179A7
2 changed files with 20 additions and 53 deletions

View file

@ -2,11 +2,10 @@
"""Validate if instance asset is the same as context asset."""
from __future__ import absolute_import
import nuke
import pyblish.api
import openpype.hosts.nuke.api.lib as nlib
from openpype.hosts.nuke import api as napi
from openpype.pipeline.publish import (
ValidateContentsOrder,
PublishXmlValidationError,
@ -51,9 +50,10 @@ class SelectInvalidInstances(pyblish.api.Action):
self.deselect()
def select(self, instances):
nlib.select_nodes(
[nuke.toNode(str(x)) for x in instances]
)
for inst in instances:
if inst.data.get("transientData", {}).get("node"):
select_node = inst.data["transientData"]["node"]
select_node["selected"].setValue(True)
def deselect(self):
nlib.reset_selection()
@ -82,13 +82,14 @@ class RepairSelectInvalidInstances(pyblish.api.Action):
# Apply pyblish.logic to get the instances for the plug-in
instances = pyblish.api.instances_by_plugin(failed, plugin)
self.log.debug(instances)
context_asset = context.data["assetEntity"]["name"]
for instance in instances:
origin_node = instance.data["transientData"]["node"]
napi.lib.recreate_instance(
origin_node, avalon_data={"asset": context_asset}
)
node = instance.data["transientData"]["node"]
node_data = nlib.get_node_data(node, nlib.INSTANCE_DATA_KNOB)
node_data["asset"] = context_asset
nlib.set_node_data(node, nlib.INSTANCE_DATA_KNOB, node_data)
class ValidateCorrectAssetName(pyblish.api.InstancePlugin):

View file

@ -1,13 +1,10 @@
from pprint import pformat
from copy import deepcopy
import pyblish.api
from openpype.pipeline import PublishXmlValidationError
from openpype.pipeline.publish import RepairAction
from openpype.hosts.nuke.api.lib import (
get_avalon_knob_data,
WorkfileSettings
)
import nuke
class ValidateScriptAttributes(pyblish.api.InstancePlugin):
@ -21,14 +18,9 @@ class ValidateScriptAttributes(pyblish.api.InstancePlugin):
actions = [RepairAction]
def process(self, instance):
root = nuke.root()
knob_data = get_avalon_knob_data(root)
script_data = deepcopy(instance.context.data["scriptData"])
asset = instance.data["assetEntity"]
# get asset data frame values
frame_start = asset["data"]["frameStart"]
frame_end = asset["data"]["frameEnd"]
handle_start = asset["data"]["handleStart"]
handle_end = asset["data"]["handleEnd"]
# These attributes will be checked
attributes = [
@ -47,37 +39,11 @@ class ValidateScriptAttributes(pyblish.api.InstancePlugin):
for attr in attributes
if attr in asset["data"]
}
# fix float to max 4 digints (only for evaluating)
fps_data = float("{0:.4f}".format(
asset_attributes["fps"]))
# fix frame values to include handles
asset_attributes.update({
"frameStart": frame_start - handle_start,
"frameEnd": frame_end + handle_end,
"fps": fps_data
})
self.log.debug(pformat(
asset_attributes
))
# Get format
_format = root["format"].value()
# Get values from nukescript
script_attributes = {
"handleStart": int(knob_data["handleStart"]),
"handleEnd": int(knob_data["handleEnd"]),
"fps": float("{0:.4f}".format(root['fps'].value())),
"frameStart": int(root["first_frame"].getValue()),
"frameEnd": int(root["last_frame"].getValue()),
"resolutionWidth": _format.width(),
"resolutionHeight": _format.height(),
"pixelAspect": _format.pixelAspect()
}
self.log.debug(pformat(
script_attributes
))
asset_attributes["fps"] = float("{0:.4f}".format(
asset_attributes["fps"]))
script_data["fps"] = float("{0:.4f}".format(
script_data["fps"]))
# Compare asset's values Nukescript X Database
not_matching = []
@ -86,14 +52,14 @@ class ValidateScriptAttributes(pyblish.api.InstancePlugin):
"Asset vs Script attribute \"{}\": {}, {}".format(
attr,
asset_attributes[attr],
script_attributes[attr]
script_data[attr]
)
)
if asset_attributes[attr] != script_attributes[attr]:
if asset_attributes[attr] != script_data[attr]:
not_matching.append({
"name": attr,
"expected": asset_attributes[attr],
"actual": script_attributes[attr]
"actual": script_data[attr]
})
# Raise error if not matching