From c4963becb01ffb3c6683d3e4a0ee6146489a5603 Mon Sep 17 00:00:00 2001 From: Jakub Trllo <43494761+iLLiCiTiT@users.noreply.github.com> Date: Tue, 2 Jul 2024 17:01:01 +0200 Subject: [PATCH] Merge pull request #727 from ynput/bugfix/AY-5937_Maya-Issue-with-UDIM-Textures-in-Yeti-Rig-Publish --- .../plugins/publish/collect_yeti_rig.py | 39 ++++++++++++------- 1 file changed, 26 insertions(+), 13 deletions(-) diff --git a/client/ayon_maya/plugins/publish/collect_yeti_rig.py b/client/ayon_maya/plugins/publish/collect_yeti_rig.py index dbdc1078..9cf13e6c 100644 --- a/client/ayon_maya/plugins/publish/collect_yeti_rig.py +++ b/client/ayon_maya/plugins/publish/collect_yeti_rig.py @@ -1,5 +1,6 @@ import os import re +import clique import pyblish.api from ayon_core.pipeline.publish import KnownPublishError @@ -271,22 +272,34 @@ def get_sequence(self, filepath, pattern="%04d"): pattern (str): The pattern to swap with the variable frame number. Returns: - list: file sequence. + Optional[list[str]]: file sequence. """ - import clique - - escaped = re.escape(filepath) - re_pattern = escaped.replace(pattern, "-?[0-9]+") - + filename = os.path.basename(filepath) + re_pattern = re.escape(filename) + re_pattern = re_pattern.replace(re.escape(pattern), "-?[0-9]+") source_dir = os.path.dirname(filepath) - files = [f for f in os.listdir(source_dir) - if re.match(re_pattern, f)] - - pattern = [clique.PATTERNS["frames"]] - collection, remainder = clique.assemble(files, patterns=pattern) - - return collection + files = [f for f in os.listdir(source_dir) if re.match(re_pattern, f)] + if not files: + # Files do not exist, this may not be a problem if e.g. the + # textures were relative paths and we're searching across + # multiple image search paths. + return + + collections, _remainder = clique.assemble( + files, + patterns=[clique.PATTERNS["frames"]], + minimum_items=1) + + if len(collections) > 1: + raise ValueError( + f"Multiple collections found for {collections}. " + "This is a bug.") + + return [ + os.path.join(source_dir, filename) + for filename in collections[0] + ] def _replace_tokens(self, strings): env_re = re.compile(r"\$\{(\w+)\}")