nuke validate asset name with help

rename plugin, fix order on how to fix in validate write nodes xml
This commit is contained in:
Jakub Jezek 2022-05-25 17:58:33 +02:00
parent 1a86a2e265
commit 0666bce2be
No known key found for this signature in database
GPG key ID: 730D7C02726179A7
3 changed files with 46 additions and 17 deletions

View file

@ -0,0 +1,18 @@
<?xml version="1.0" encoding="UTF-8"?>
<root>
<error id="main">
<title>Shot/Asset mame</title>
<description>
## Invalid Shot/Asset name in subset
Following Node with name `{node_name}`:
Is in context of `{context_asset}` but Node _asset_ knob is set as `{asset}`.
### How to repair?
1. Either use Repair or Select button.
2. If you chose Select then rename asset knob to correct name.
3. Hit Reload button on the publisher.
</description>
</error>
</root>

View file

@ -11,7 +11,7 @@ Following write node knobs needs to be repaired:
### How to repair?
1. Use Repair button.
3. Hit Reload button on the publisher.
2. Hit Reload button on the publisher.
</description>
</error>
</root>

View file

@ -3,20 +3,17 @@
from __future__ import absolute_import
import nuke
import pyblish.api
import openpype.api
from openpype.hosts.nuke.api.lib import (
recreate_instance,
reset_selection,
select_nodes
)
import openpype.hosts.nuke.api.lib as nlib
import openpype.hosts.nuke.api as nuke_api
from openpype.pipeline import PublishXmlValidationError
class SelectInvalidInstances(pyblish.api.Action):
"""Select invalid instances in Outliner."""
label = "Select Instances"
label = "Select"
icon = "briefcase"
on = "failed"
@ -50,12 +47,12 @@ class SelectInvalidInstances(pyblish.api.Action):
self.deselect()
def select(self, instances):
select_nodes(
nlib.select_nodes(
[nuke.toNode(str(x)) for x in instances]
)
def deselect(self):
reset_selection()
nlib.reset_selection()
class RepairSelectInvalidInstances(pyblish.api.Action):
@ -85,12 +82,12 @@ class RepairSelectInvalidInstances(pyblish.api.Action):
context_asset = context.data["assetEntity"]["name"]
for instance in instances:
origin_node = instance[0]
recreate_instance(
nuke_api.lib.recreate_instance(
origin_node, avalon_data={"asset": context_asset}
)
class ValidateInstanceInContext(pyblish.api.InstancePlugin):
class ValidateCorrectAssetName(pyblish.api.InstancePlugin):
"""Validator to check if instance asset match context asset.
When working in per-shot style you always publish data in context of
@ -99,15 +96,29 @@ class ValidateInstanceInContext(pyblish.api.InstancePlugin):
Action on this validator will select invalid instances in Outliner.
"""
order = openpype.api.ValidateContentsOrder
label = "Instance in same Context"
label = "Validate correct asset name"
hosts = ["nuke"]
actions = [SelectInvalidInstances, RepairSelectInvalidInstances]
actions = [
SelectInvalidInstances,
RepairSelectInvalidInstances
]
optional = True
def process(self, instance):
asset = instance.data.get("asset")
context_asset = instance.context.data["assetEntity"]["name"]
msg = "{} has asset {}".format(instance.name, asset)
assert asset == context_asset, msg
msg = (
"Instance `{}` has wrong shot/asset name:\n"
"Correct: `{}` | Wrong: `{}`").format(
instance.name, asset, context_asset)
if asset != context_asset:
PublishXmlValidationError(
self, msg, formatting_data={
"node_name": instance[0]["name"].value(),
"wrong_name": asset,
"correct_name": context_asset
}
)