This repository has been archived by the owner on Sep 20, 2024. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 129
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request #2078 from pypeclub/feature/PYPE-1332_Add-Global-v…
…alidators-to-settings Global: add global validators to settings
- Loading branch information
Showing
14 changed files
with
270 additions
and
67 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
110 changes: 110 additions & 0 deletions
110
openpype/hosts/nuke/plugins/publish/validate_instance_in_context.py
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,110 @@ | ||
# -*- coding: utf-8 -*- | ||
"""Validate if instance asset is the same as context asset.""" | ||
from __future__ import absolute_import | ||
|
||
import nuke | ||
|
||
import pyblish.api | ||
import openpype.api | ||
import avalon.nuke.lib | ||
import openpype.hosts.nuke.api as nuke_api | ||
|
||
|
||
class SelectInvalidInstances(pyblish.api.Action): | ||
"""Select invalid instances in Outliner.""" | ||
|
||
label = "Select Instances" | ||
icon = "briefcase" | ||
on = "failed" | ||
|
||
def process(self, context, plugin): | ||
"""Process invalid validators and select invalid instances.""" | ||
# Get the errored instances | ||
failed = [] | ||
for result in context.data["results"]: | ||
if ( | ||
result["error"] is None | ||
or result["instance"] is None | ||
or result["instance"] in failed | ||
or result["plugin"] != plugin | ||
): | ||
continue | ||
|
||
failed.append(result["instance"]) | ||
|
||
# Apply pyblish.logic to get the instances for the plug-in | ||
instances = pyblish.api.instances_by_plugin(failed, plugin) | ||
|
||
if instances: | ||
self.log.info( | ||
"Selecting invalid nodes: %s" % ", ".join( | ||
[str(x) for x in instances] | ||
) | ||
) | ||
self.select(instances) | ||
else: | ||
self.log.info("No invalid nodes found.") | ||
self.deselect() | ||
|
||
def select(self, instances): | ||
avalon.nuke.lib.select_nodes( | ||
[nuke.toNode(str(x)) for x in instances] | ||
) | ||
|
||
def deselect(self): | ||
avalon.nuke.lib.reset_selection() | ||
|
||
|
||
class RepairSelectInvalidInstances(pyblish.api.Action): | ||
"""Repair the instance asset.""" | ||
|
||
label = "Repair" | ||
icon = "wrench" | ||
on = "failed" | ||
|
||
def process(self, context, plugin): | ||
# Get the errored instances | ||
failed = [] | ||
for result in context.data["results"]: | ||
if ( | ||
result["error"] is None | ||
or result["instance"] is None | ||
or result["instance"] in failed | ||
or result["plugin"] != plugin | ||
): | ||
continue | ||
|
||
failed.append(result["instance"]) | ||
|
||
# Apply pyblish.logic to get the instances for the plug-in | ||
instances = pyblish.api.instances_by_plugin(failed, plugin) | ||
|
||
context_asset = context.data["assetEntity"]["name"] | ||
for instance in instances: | ||
origin_node = instance[0] | ||
nuke_api.lib.recreate_instance( | ||
origin_node, avalon_data={"asset": context_asset} | ||
) | ||
|
||
|
||
class ValidateInstanceInContext(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 | ||
current asset (shot). This validator checks if this is so. It is optional | ||
so it can be disabled when needed. | ||
Action on this validator will select invalid instances in Outliner. | ||
""" | ||
|
||
order = openpype.api.ValidateContentsOrder | ||
label = "Instance in same Context" | ||
hosts = ["nuke"] | ||
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 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.