implemented validator of task name existence on asset document

This commit is contained in:
iLLiCiTiT 2021-03-30 10:25:06 +02:00
parent e22cb6a1f7
commit f34d25f49b

View file

@ -0,0 +1,57 @@
import collections
import pyblish.api
from avalon import io
class ValidateTaskExistence(pyblish.api.ContextPlugin):
"""Validating tasks on instances are filled and existing."""
label = "Validate Task Existence"
order = pyblish.api.ValidatorOrder
hosts = ["standalonepublisher"]
families = ["render_mov_batch"]
def process(self, context):
asset_names = set()
for instance in context:
asset_names.add(instance.data["asset"])
asset_docs = io.find(
{
"type": "asset",
"name": {"$in": list(asset_names)}
},
{
"name": 1,
"data.tasks": 1
}
)
tasks_by_asset_names = {}
for asset_doc in asset_docs:
asset_name = asset_doc["name"]
asset_tasks = asset_doc.get("data", {}).get("tasks") or {}
tasks_by_asset_names[asset_name] = list(asset_tasks.keys())
missing_tasks = []
for instance in context:
asset_name = instance.data["asset"]
task_name = instance.data["task"]
task_names = tasks_by_asset_names.get(asset_name) or []
if task_name and task_name in task_names:
continue
missing_tasks.append((asset_name, task_name))
# Everything is OK
if not missing_tasks:
return
# Raise an exception
msg = "Couldn't find task name/s required for publishing.\n{}"
pair_msgs = []
for missing_pair in missing_tasks:
pair_msgs.append(
"Asset: \"{}\" Task: \"{}\"".format(*missing_pair)
)
raise AssertionError(msg.format("\n".join(pair_msgs)))