From abf79377b56efc38d49516f117565eca07ce070c Mon Sep 17 00:00:00 2001 From: Roy Nieterau Date: Tue, 2 Oct 2018 17:37:09 +0200 Subject: [PATCH] Implement draft for ValidateLookIdReferenceEdits (LKD-16) --- .../validate_look_id_reference_edits.py | 44 +++++++++++++++++++ 1 file changed, 44 insertions(+) create mode 100644 colorbleed/plugins/maya/publish/validate_look_id_reference_edits.py diff --git a/colorbleed/plugins/maya/publish/validate_look_id_reference_edits.py b/colorbleed/plugins/maya/publish/validate_look_id_reference_edits.py new file mode 100644 index 0000000000..3b5615c9f4 --- /dev/null +++ b/colorbleed/plugins/maya/publish/validate_look_id_reference_edits.py @@ -0,0 +1,44 @@ +from maya import cmds + +import pyblish.api +import colorbleed.api + + +class ValidateLookIdReferenceEdits(pyblish.api.InstancePlugin): + """Validate nodes in look have no reference edits to cbId.""" + + order = colorbleed.api.ValidateContentsOrder + families = ['colorbleed.look'] + hosts = ['maya'] + label = 'Look Id Reference Edits' + actions = [colorbleed.api.SelectInvalidAction] + + def process(self, instance): + + invalid = self.get_invalid(instance) + + if invalid: + raise RuntimeError("Invalid nodes %s" % (invalid,)) + + @staticmethod + def get_invalid(instance): + + # Collect all referenced members + referenced_nodes = [] + relationships = instance.data["lookData"]["relationships"] + for relationship in relationships.values(): + for member in relationship['members']: + node = member["name"] + + if cmds.referenceQuery(node, isNodeReferenced=True): + referenced_nodes.append(node) + + # Validate whether any has changes to 'cbId' attribute + # TODO: optimize this query (instead of per node) + invalid = list() + for node in referenced_nodes: + edits = set(cmds.referenceQuery(node, editAttrs=True)) + if "cbId" in edits: + invalid.append(node) + + return invalid