update validate families

This commit is contained in:
Jakub Jezek 2018-12-13 18:14:24 +01:00
parent c2af511e06
commit c6c4411fed
8 changed files with 101 additions and 23 deletions

View file

@ -125,4 +125,4 @@ class SelectInvalidAction(pyblish.api.Action):
cmds.select(invalid, replace=True, noExpand=True)
else:
self.log.info("No invalid nodes found.")
cmds.select(deselect=True)
cmds.select(deselect=True)

View file

@ -87,6 +87,7 @@ def reload_config():
"app.api",
"{}.api".format(AVALON_CONFIG),
"{}.templates".format(AVALON_CONFIG),
"{}.nuke.actions".format(AVALON_CONFIG),
"{}.nuke.templates".format(AVALON_CONFIG),
"{}.nuke.menu".format(AVALON_CONFIG)
):

58
pype/nuke/actions.py Normal file
View file

@ -0,0 +1,58 @@
# absolute_import is needed to counter the `module has no cmds error` in Maya
from __future__ import absolute_import
import pyblish.api
from avalon.nuke.lib import (
reset_selection,
select_nodes
)
from ..action import get_errored_instances_from_context
class SelectInvalidAction(pyblish.api.Action):
"""Select invalid nodes in Maya when plug-in failed.
To retrieve the invalid nodes this assumes a static `get_invalid()`
method is available on the plugin.
"""
label = "Select invalid nodes"
on = "failed" # This action is only available on a failed plug-in
icon = "search" # Icon from Awesome Icon
def process(self, context, plugin):
try:
import nuke
except ImportError:
raise ImportError("Current host is not Nuke")
errored_instances = get_errored_instances_from_context(context)
# Apply pyblish.logic to get the instances for the plug-in
instances = pyblish.api.instances_by_plugin(errored_instances, plugin)
# Get the invalid nodes for the plug-ins
self.log.info("Finding invalid nodes..")
invalid = list()
for instance in instances:
invalid_nodes = plugin.get_invalid(instance)
if invalid_nodes:
if isinstance(invalid_nodes, (list, tuple)):
invalid.append(invalid_nodes[0])
else:
self.log.warning("Plug-in returned to be invalid, "
"but has no selectable nodes.")
# Ensure unique (process each node only once)
invalid = list(set(invalid))
if invalid:
self.log.info("Selecting invalid nodes: {}".format(invalid))
reset_selection()
select_nodes(invalid)
else:
self.log.info("No invalid nodes found.")

View file

@ -1,5 +1,4 @@
import sys
import os
from collections import OrderedDict
from pprint import pprint
from avalon.vendor.Qt import QtGui

View file

@ -19,7 +19,7 @@ class ValidateJointsHidden(pyblish.api.InstancePlugin):
order = pype.api.ValidateContentsOrder
hosts = ['maya']
families = ["rig']
families = ["rig"]
category = 'rig'
version = (0, 1, 0)
label = "Joints Hidden"

View file

@ -3,7 +3,10 @@ import nuke
import pyblish.api
import os
import tempfile
from avalon.nuke.lib import add_publish_knob
from avalon.nuke.lib import (
add_publish_knob,
add_avalon_tab_knob
)
class CollectScript(pyblish.api.ContextPlugin):
@ -16,9 +19,10 @@ class CollectScript(pyblish.api.ContextPlugin):
def process(self, context):
asset_data = io.find_one({"type": "asset",
"name": api.Session["AVALON_ASSET"]})
self.log.debug("asset_data: {}".format(asset_data["data"]))
self.log.info("asset_data: {}".format(asset_data["data"]))
root = nuke.root()
add_avalon_tab_knob(root)
add_publish_knob(root)
# creating instances per write node
@ -37,18 +41,18 @@ class CollectScript(pyblish.api.ContextPlugin):
# adding stage dir for faster local renderings
staging_dir = tempfile.mkdtemp().replace("\\", "/")
instance.data.update({"stagingDir": staging_dir})
self.log.debug('staging_dir: {}'.format(staging_dir))
self.log.info('nukescript: staging_dir: {}'.format(staging_dir))
instance.data.update({
"subset": subset,
"asset": os.environ["AVALON_ASSET"],
"subset": os.getenv("AVALON_TASK", None),
"asset": os.getenv("AVALON_ASSET", None),
"label": base_name,
"name": base_name,
"subset": subset,
"startFrame": first_frame,
"endFrame": last_frame,
"publish": root.knob('publish').value(),
"family": "script",
"family": "nukescript",
"representation": "nk",
"handles": int(asset_data["data"].get("handles", 0)),
"step": 1,
"fps": int(root['fps'].value()),

View file

@ -32,6 +32,9 @@ class ValidateCollection(pyblish.api.InstancePlugin):
def process(self, instance):
self.log.debug('instance.data["files"]: {}'.format(instance.data['files']))
if not instance.data["files"]:
return
collections, remainder = clique.assemble(*instance.data['files'])
self.log.info('collections: {}'.format(str(collections)))

View file

@ -1,19 +1,21 @@
import os
import pyblish.api
import clique
import pype.api
import pype.nuke.actions
@pyblish.api.log
class RepairWriteFamiliesAction(pyblish.api.Action):
label = "Fix Write's render attributes"
on = "failed"
icon = "wrench"
def process(self, context, plugin):
context[0][0]["render"].setValue(True)
def process(self, instance, plugin):
self.log.info("instance {}".format(instance))
instance["render"].setValue(True)
self.log.info("Rendering toggled ON")
@pyblish.api.log
class ValidateWriteFamilies(pyblish.api.InstancePlugin):
""" Validates write families. """
@ -21,18 +23,29 @@ class ValidateWriteFamilies(pyblish.api.InstancePlugin):
label = "Check correct writes families"
hosts = ["nuke"]
families = ["write"]
actions = [RepairWriteFamiliesAction]
def process(self, instance):
self.log.debug('instance.data["files"]: {}'.format(instance.data['files']))
actions = [pype.nuke.actions.SelectInvalidAction, pype.api.RepairAction]
@staticmethod
def get_invalid(instance):
if not [f for f in instance.data["families"]
if ".frames" in f]:
return
assert instance.data["files"], self.log.info(
"`{}`: Swith `Render` on! \n"
"No available frames to add to database. \n"
"Use repair to render all frames".format(__name__))
if not instance.data["files"]:
return (instance)
def process(self, instance):
self.log.debug('instance.data["files"]: {}'.format(instance.data['files']))
invalid = self.get_invalid(instance)
if invalid:
raise ValueError(str("`{}`: Switch `Render` on! "
"> {}".format(__name__, invalid)))
self.log.info("Checked correct writes families")
@classmethod
def repair(cls, instance):
cls.log.info("instance {}".format(instance))
instance[0]["render"].setValue(True)
cls.log.info("Rendering toggled ON")