diff --git a/pype/lib/__init__.py b/pype/lib/__init__.py index 002689d21c..59411db9de 100644 --- a/pype/lib/__init__.py +++ b/pype/lib/__init__.py @@ -12,7 +12,6 @@ from .avalon_context import ( switch_item, get_asset, get_hierarchy, - get_subsets, get_linked_assets, get_latest_version ) @@ -54,7 +53,6 @@ __all__ = [ "switch_item", "get_asset", "get_hierarchy", - "get_subsets", "get_linked_assets", "get_latest_version", diff --git a/pype/lib/avalon_context.py b/pype/lib/avalon_context.py index e9cb4c4f5b..099b48967b 100644 --- a/pype/lib/avalon_context.py +++ b/pype/lib/avalon_context.py @@ -203,84 +203,6 @@ def get_hierarchy(asset_name=None): return "/".join(hierarchy_items) -def get_subsets(asset_name, - regex_filter=None, - version=None, - representations=["exr", "dpx"]): - """ - Query subsets with filter on name. - - The method will return all found subsets and its defined version - and subsets. Version could be specified with number. Representation - can be filtered. - - Arguments: - asset_name (str): asset (shot) name - regex_filter (raw): raw string with filter pattern - version (str or int): `last` or number of version - representations (list): list for all representations - - Returns: - dict: subsets with version and representaions in keys - """ - - # query asset from db - asset_io = io.find_one({"type": "asset", "name": asset_name}) - - # check if anything returned - assert asset_io, ( - "Asset not existing. Check correct name: `{}`").format(asset_name) - - # create subsets query filter - filter_query = {"type": "subset", "parent": asset_io["_id"]} - - # add reggex filter string into query filter - if regex_filter: - filter_query.update({"name": {"$regex": r"{}".format(regex_filter)}}) - else: - filter_query.update({"name": {"$regex": r'.*'}}) - - # query all assets - subsets = [s for s in io.find(filter_query)] - - assert subsets, ("No subsets found. Check correct filter. " - "Try this for start `r'.*'`: " - "asset: `{}`").format(asset_name) - - output_dict = {} - # Process subsets - for subset in subsets: - if not version: - version_sel = io.find_one( - { - "type": "version", - "parent": subset["_id"] - }, - sort=[("name", -1)] - ) - else: - assert isinstance(version, int), "version needs to be `int` type" - version_sel = io.find_one({ - "type": "version", - "parent": subset["_id"], - "name": int(version) - }) - - find_dict = {"type": "representation", - "parent": version_sel["_id"]} - - filter_repr = {"name": {"$in": representations}} - - find_dict.update(filter_repr) - repres_out = [i for i in io.find(find_dict)] - - if len(repres_out) > 0: - output_dict[subset["name"]] = {"version": version_sel, - "representations": repres_out} - - return output_dict - - def get_linked_assets(asset_entity): """Return linked assets for `asset_entity`.""" inputs = asset_entity["data"].get("inputs", []) diff --git a/pype/plugins/celaction/publish/collect_audio.py b/pype/plugins/celaction/publish/collect_audio.py index c29e212d80..c92e4fd868 100644 --- a/pype/plugins/celaction/publish/collect_audio.py +++ b/pype/plugins/celaction/publish/collect_audio.py @@ -1,6 +1,8 @@ -import pyblish.api import os +import pyblish.api +from avalon import io + import pype.api as pype from pprint import pformat @@ -15,7 +17,7 @@ class AppendCelactionAudio(pyblish.api.ContextPlugin): asset_entity = context.data["assetEntity"] # get all available representations - subsets = pype.get_subsets(asset_entity["name"], + subsets = self.get_subsets(asset_entity["name"], representations=["audio", "wav"] ) self.log.info(f"subsets is: {pformat(subsets)}") @@ -39,3 +41,81 @@ class AppendCelactionAudio(pyblish.api.ContextPlugin): 'audio_file: {}, has been added to context'.format(audio_file)) else: self.log.warning("Couldn't find any audio file on Ftrack.") + + def get_subsets( + self, + asset_name, + regex_filter=None, + version=None, + representations=["exr", "dpx"] + ): + """ + Query subsets with filter on name. + + The method will return all found subsets and its defined version + and subsets. Version could be specified with number. Representation + can be filtered. + + Arguments: + asset_name (str): asset (shot) name + regex_filter (raw): raw string with filter pattern + version (str or int): `last` or number of version + representations (list): list for all representations + + Returns: + dict: subsets with version and representaions in keys + """ + + # query asset from db + asset_io = io.find_one({"type": "asset", "name": asset_name}) + + # check if anything returned + assert asset_io, ( + "Asset not existing. Check correct name: `{}`").format(asset_name) + + # create subsets query filter + filter_query = {"type": "subset", "parent": asset_io["_id"]} + + # add reggex filter string into query filter + if regex_filter: + filter_query["name"] = {"$regex": r"{}".format(regex_filter)} + + # query all assets + subsets = list(io.find(filter_query)) + + assert subsets, ("No subsets found. Check correct filter. " + "Try this for start `r'.*'`: " + "asset: `{}`").format(asset_name) + + output_dict = {} + # Process subsets + for subset in subsets: + if not version: + version_sel = io.find_one( + { + "type": "version", + "parent": subset["_id"] + }, + sort=[("name", -1)] + ) + else: + assert isinstance(version, int), "version needs to be `int` type" + version_sel = io.find_one({ + "type": "version", + "parent": subset["_id"], + "name": int(version) + }) + + find_dict = {"type": "representation", + "parent": version_sel["_id"]} + + filter_repr = {"name": {"$in": representations}} + + find_dict.update(filter_repr) + repres_out = [i for i in io.find(find_dict)] + + if len(repres_out) > 0: + output_dict[subset["name"]] = {"version": version_sel, + "representations": repres_out} + + return output_dict