From e7d84d595bf65fe7031623ca092f5b95f7f61107 Mon Sep 17 00:00:00 2001 From: Ondrej Samohel Date: Tue, 21 Jul 2020 15:31:29 +0200 Subject: [PATCH] added repair function --- .../publish/validate_instance_in_context.py | 28 +++++++++++++++++-- 1 file changed, 26 insertions(+), 2 deletions(-) diff --git a/pype/plugins/maya/publish/validate_instance_in_context.py b/pype/plugins/maya/publish/validate_instance_in_context.py index ea83c2d3af..542249bb2d 100644 --- a/pype/plugins/maya/publish/validate_instance_in_context.py +++ b/pype/plugins/maya/publish/validate_instance_in_context.py @@ -28,7 +28,7 @@ class SelectInvalidInstances(pyblish.api.Action): # Get the invalid nodes for the plug-ins self.log.info("Finding invalid nodes..") invalid = list() - for instance in instances: + for _instance in instances: invalid_instances = plugin.get_invalid(context) if invalid_instances: if isinstance(invalid_instances, (list, tuple)): @@ -48,6 +48,30 @@ class SelectInvalidInstances(pyblish.api.Action): cmds.select(deselect=True) +class RepairSelectInvalidInstances(pyblish.api.Action): + """Repair the instance asset.""" + + label = "Repair" + icon = "wrench" + on = "failed" + + def process(self, context, plugin): + from maya import cmds + # Get the errored instances + failed = [] + for result in context.data["results"]: + if (result["error"] is not None and result["instance"] is not None + and result["instance"] not in failed): + 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: + cmds.setAttr(instance.data.get("name") + ".asset", + context_asset, type="string") + + class ValidateInstanceInContext(pyblish.api.ContextPlugin): """Validator to check if instance asset match context asset. @@ -61,7 +85,7 @@ class ValidateInstanceInContext(pyblish.api.ContextPlugin): order = pype.api.ValidateContentsOrder label = "Instance in same Context" optional = True - actions = [SelectInvalidInstances] + actions = [SelectInvalidInstances, RepairSelectInvalidInstances] @classmethod def get_invalid(cls, context):