ayon-core/pype/plugins/maya/publish/validate_resources.py

57 lines
1.6 KiB
Python

import os
from collections import defaultdict
import pyblish.api
import pype.api
class ValidateResources(pyblish.api.InstancePlugin):
"""Validates mapped resources.
These are external files to the current application, for example
these could be textures, image planes, cache files or other linked
media.
This validates:
- The resources have unique filenames (without extension)
"""
order = pype.api.ValidateContentsOrder
label = "Resources Unique"
def process(self, instance):
resources = instance.data.get("resources", [])
if not resources:
self.log.debug("No resources to validate..")
return
basenames = defaultdict(set)
for resource in resources:
files = resource.get("files", [])
for filename in files:
# Use normalized paths in comparison and ignore case
# sensitivity
filename = os.path.normpath(filename).lower()
basename = os.path.splitext(os.path.basename(filename))[0]
basenames[basename].add(filename)
invalid_resources = list()
for basename, sources in basenames.items():
if len(sources) > 1:
invalid_resources.extend(sources)
self.log.error(
"Non-unique resource name: {0}"
"{0} (sources: {1})".format(
basename,
list(sources)
)
)
if invalid_resources:
raise RuntimeError("Invalid resources in instance.")