diff --git a/openpype/client/__init__.py b/openpype/client/__init__.py index 34257cf3dc..e8e3a81d5d 100644 --- a/openpype/client/__init__.py +++ b/openpype/client/__init__.py @@ -12,8 +12,8 @@ from .entities import ( get_subsets, get_subset_families, + get_version_by_id, get_version_by_name, - get_version, get_versions, get_last_versions, get_last_version_for_subset, @@ -45,8 +45,8 @@ __all__ = ( "get_subsets", "get_subset_families", + "get_version_by_id", "get_version_by_name", - "get_version", "get_versions", "get_last_versions", "get_last_version_for_subset", diff --git a/openpype/client/entities.py b/openpype/client/entities.py index 07f6bb2e65..1a45be6e93 100644 --- a/openpype/client/entities.py +++ b/openpype/client/entities.py @@ -224,7 +224,7 @@ def get_asset_ids_with_subsets(project_name, asset_ids=None): def get_subset_by_id(project_name, subset_id, fields=None): - """Single subset document by it's id. + """Single subset entity data by it's id. Args: project_name (str): Name of project where to look for queried entities. @@ -247,7 +247,7 @@ def get_subset_by_id(project_name, subset_id, fields=None): def get_subset_by_name(project_name, subset_name, asset_id, fields=None): - """Single subset document by subset name and it's version id. + """Single subset entity data by it's name and it's version id. Args: project_name (str): Name of project where to look for queried entities. @@ -279,12 +279,31 @@ def get_subset_by_name(project_name, subset_name, asset_id, fields=None): def get_subsets( project_name, - asset_ids=None, subset_ids=None, subset_names=None, + asset_ids=None, archived=False, fields=None ): + """Subset entities data from one project filtered by entered filters. + + Filters are additive (all conditions must pass to return subset). + + Args: + project_name (str): Name of project where to look for queried entities. + subset_ids (list[str, ObjectId]): Subset ids that should be queried. + Filter ignored if 'None' is passed. + subset_names (list[str]): Subset names that should be queried. + Filter ignored if 'None' is passed. + asset_ids (list[str, ObjectId]): Asset ids under which should look for + the subsets. Filter ignored if 'None' is passed. + fields (list[str]): Fields that should be returned. All fields are + returned if 'None' is passed. + + Returns: + Cursor: Iterable cursor yielding all matching subsets. + """ + subset_types = ["subset"] if archived: subset_types.append("archived_subset") @@ -316,6 +335,17 @@ def get_subsets( def get_subset_families(project_name, subset_ids=None): + """Set of main families of subsets. + + Args: + project_name (str): Name of project where to look for queried entities. + subset_ids (list[str, ObjectId]): Subset ids that should be queried. + All subsets from project are used if 'None' is passed. + + Returns: + set[str]: Main families of matching subsets. + """ + subset_filter = { "type": "subset" } @@ -340,23 +370,56 @@ def get_subset_families(project_name, subset_ids=None): return set() -def get_version_by_name(project_name, subset_id, version, fields=None): - conn = _get_project_connection(project_name) +def get_version_by_id(project_name, version_id, fields=None): + """Single version entity data by it's id. + + Args: + project_name (str): Name of project where to look for queried entities. + version_id (ObjectId): Id of version which should be found. + fields (list[str]): Fields that should be returned. All fields are + returned if 'None' is passed. + + Returns: + None: If version with specified filters was not found. + Dict: Version document which can be reduced to specified 'fields'. + """ + + version_id = _convert_id(version_id) + if not version_id: + return None + query_filter = { - "type": "version", - "parent": _convert_id(subset_id), - "name": version + "type": {"$in": ["version", "hero_version"]}, + "_id": version_id } + conn = _get_project_connection(project_name) return conn.find_one(query_filter, _prepare_fields(fields)) -def get_version(project_name, version_id, fields=None): - if not version_id: +def get_version_by_name(project_name, version, subset_id, fields=None): + """Single version entity data by it's name and subset id. + + Args: + project_name (str): Name of project where to look for queried entities. + version (int): name of version entity (it's version). + subset_id (ObjectId): Id of version which should be found. + fields (list[str]): Fields that should be returned. All fields are + returned if 'None' is passed. + + Returns: + None: If version with specified filters was not found. + Dict: Version document which can be reduced to specified 'fields'. + """ + + subset_id = _convert_id(subset_id) + if not subset_id: return None + conn = _get_project_connection(project_name) query_filter = { - "type": {"$in": ["version", "hero_version"]}, - "_id": _convert_id(version_id) + "type": "version", + "parent": subset_id, + "name": version } return conn.find_one(query_filter, _prepare_fields(fields)) @@ -402,11 +465,29 @@ def _get_versions( def get_versions( project_name, - subset_ids=None, version_ids=None, + subset_ids=None, hero=False, fields=None ): + """Version entities data from one project filtered by entered filters. + + Filters are additive (all conditions must pass to return subset). + + Args: + project_name (str): Name of project where to look for queried entities. + version_ids (list[str, ObjectId]): Version ids that will be queried. + Filter ignored if 'None' is passed. + subset_ids (list[str]): Subset ids that will be queried. + Filter ignored if 'None' is passed. + hero (bool): Look also for hero versions. + fields (list[str]): Fields that should be returned. All fields are + returned if 'None' is passed. + + Returns: + Cursor: Iterable cursor yielding all matching versions. + """ + return _get_versions( project_name, subset_ids, diff --git a/openpype/tools/loader/widgets.py b/openpype/tools/loader/widgets.py index 4a9a911f93..921708922e 100644 --- a/openpype/tools/loader/widgets.py +++ b/openpype/tools/loader/widgets.py @@ -11,7 +11,7 @@ from openpype.client import ( get_subset_families, get_subset_by_id, get_subsets, - get_version, + get_version_by_id, get_versions, get_representations, get_thumbnail_id_from_source, @@ -676,12 +676,12 @@ class VersionTextEdit(QtWidgets.QTextEdit): project_name = self.dbcon.active_project() if not version_doc: - version_doc = get_version(project_name, version_id=version_id) + version_doc = get_version_by_id(project_name, version_id) assert version_doc, "Not a valid version id" if version_doc["type"] == "hero_version": - _version_doc = get_version( - project_name, version_id=version_doc["version_id"] + _version_doc = get_version_by_id( + project_name, version_doc["version_id"] ) version_doc["data"] = _version_doc["data"] version_doc["name"] = HeroVersionType( diff --git a/openpype/tools/sceneinventory/model.py b/openpype/tools/sceneinventory/model.py index b36f7f4cea..a5d856fe72 100644 --- a/openpype/tools/sceneinventory/model.py +++ b/openpype/tools/sceneinventory/model.py @@ -9,7 +9,7 @@ import qtawesome from openpype.client import ( get_asset_by_id, get_subset_by_id, - get_version, + get_version_by_id, get_last_version_for_subset, get_representation, ) @@ -321,8 +321,8 @@ class InventoryModel(TreeModel): not_found_ids.append(repre_id) continue - version = get_version( - project_name, version_id=representation["parent"] + version = get_version_by_id( + project_name, representation["parent"] ) if not version: not_found["version"].append(group_items) @@ -330,8 +330,8 @@ class InventoryModel(TreeModel): continue elif version["type"] == "hero_version": - _version = get_version( - project_name, version_id=version["version_id"] + _version = get_version_by_id( + project_name, version["version_id"] ) version["name"] = HeroVersionType(_version["name"]) version["data"] = _version["data"] diff --git a/openpype/tools/sceneinventory/view.py b/openpype/tools/sceneinventory/view.py index 04e0f67a15..d1ff91535f 100644 --- a/openpype/tools/sceneinventory/view.py +++ b/openpype/tools/sceneinventory/view.py @@ -7,7 +7,7 @@ import qtawesome from bson.objectid import ObjectId from openpype.client import ( - get_version, + get_version_by_id, get_versions, get_hero_versions, get_representation, @@ -663,9 +663,9 @@ class SceneInventoryView(QtWidgets.QTreeView): fields=["parent"] ) - repre_version_doc = get_version( + repre_version_doc = get_version_by_id( project_name, - version_id=repre_doc["parent"], + repre_doc["parent"], fields=["parent"] )