From 449d296d57f3ffdd0dfab516492f849affdb5486 Mon Sep 17 00:00:00 2001 From: iLLiCiTiT Date: Thu, 18 Nov 2021 09:53:42 +0100 Subject: [PATCH] split _get_current_output_repre_ids into more submethods --- .../tools/sceneinventory/switch_dialog.py | 395 ++++++++++-------- 1 file changed, 214 insertions(+), 181 deletions(-) diff --git a/openpype/tools/sceneinventory/switch_dialog.py b/openpype/tools/sceneinventory/switch_dialog.py index a7b586da3e..3faa6a7cbe 100644 --- a/openpype/tools/sceneinventory/switch_dialog.py +++ b/openpype/tools/sceneinventory/switch_dialog.py @@ -462,7 +462,8 @@ class SwitchAssetDialog(QtWidgets.QDialog): if not selected_asset and not selected_subset and not selected_repre: return list(self.content_repres.keys()) - # Prepare asset document if asset is selcted + # Prepare asset document if asset is selected + asset_doc = None if selected_asset: asset_doc = io.find_one( {"type": "asset", "name": selected_asset}, @@ -474,215 +475,247 @@ class SwitchAssetDialog(QtWidgets.QDialog): # Everything is selected # [x] [x] [x] if selected_asset and selected_subset and selected_repre: - subset_doc = io.find_one( - { - "type": "subset", - "name": selected_subset, - "parent": asset_doc["_id"] - }, - {"_id": True} + return self._get_current_output_repre_ids_xxx( + asset_doc, selected_subset, selected_repre ) - subset_id = subset_doc["_id"] - last_versions_by_subset_id = self.find_last_versions([subset_id]) - version_doc = last_versions_by_subset_id.get(subset_id) - if not version_doc: - return [] - - repre_docs = io.find( - { - "type": "representation", - "parent": version_doc["_id"], - "name": selected_repre - }, - {"_id": True} - ) - return [repre_doc["_id"] for repre_doc in repre_docs] # [x] [x] [ ] # If asset and subset is selected if selected_asset and selected_subset: - subset_doc = io.find_one( - { - "type": "subset", - "parent": asset_doc["_id"], - "name": selected_subset - }, - {"_id": True} + return self._get_current_output_repre_ids_xxo( + asset_doc, selected_subset ) - if not subset_doc: - return [] - - repre_names = set() - for repre_doc in self.content_repres.values(): - repre_names.add(repre_doc["name"]) - - repre_docs = io.find( - { - "type": "rerpesentation", - "parent": subset_doc["_id"], - "name": {"$in": list(repre_names)} - }, - {"_id": True} - ) - return [repre_doc["_id"] for repre_doc in repre_docs] # [x] [ ] [x] # If asset and repre is selected if selected_asset and selected_repre: - susbet_names = set() - for subset_doc in self.content_subsets.values(): - susbet_names.add(subset_doc["name"]) - - subset_docs = io.find( - { - "type": "subset", - "name": {"$in": list(susbet_names)} - }, - {"_id": True} + return self._get_current_output_repre_ids_xox( + asset_doc, selected_repre ) - subset_ids = [subset_doc["_id"] for subset_doc in subset_docs] - repre_docs = io.find( - { - "type": "representation", - "parent": {"$in": subset_ids}, - "name": selected_repre - }, - {"_id": True} - ) - return [repre_doc["_id"] for repre_doc in repre_docs] # [x] [ ] [ ] # If asset and subset is selected if selected_asset: - repres_by_subset_name = collections.defaultdict(set) - for repre_doc in self.content_repres.values(): - repre_name = repre_doc["name"] - version_doc = self.content_versions[repre_doc["parent"]] - subset_doc = self.content_subsets[version_doc["parent"]] - subset_name = subset_doc["name"] - repres_by_subset_name[subset_name].add(repre_name) - - asset_doc = io.find_one( - {"type": "asset", "name": selected_asset}, - {"_id": True} - ) - subset_docs = list(io.find( - { - "type": "subset", - "parent": asset_doc["_id"], - "name": {"$in": list(repres_by_subset_name.keys())} - }, - {"_id": True, "name": True} - )) - subset_name_by_id = { - subset_doc["_id"]: subset_doc["name"] - for subset_doc in subset_docs - } - subset_ids = list(subset_name_by_id.keys()) - last_versions_by_subset_id = self.find_last_versions(subset_ids) - last_version_id_by_subset_name = {} - for subset_id, last_version in last_versions_by_subset_id.items(): - subset_name = subset_name_by_id[subset_id] - last_version_id_by_subset_name[subset_name] = ( - last_version["_id"] - ) - - repre_or_query = [] - for subset_name, repre_names in repres_by_subset_name.items(): - version_id = last_version_id_by_subset_name.get(subset_name) - # This should not happen but why to crash? - if version_id is None: - continue - repre_or_query.append({ - "parent": version_id, - "name": {"$in": list(repre_names)} - }) - repre_docs = io.find( - {"$or": repre_or_query}, - {"_id": True} - ) - return [repre_doc["_id"] for repre_doc in repre_docs] + return self._get_current_output_repre_ids_xoo(asset_doc) # [ ] [x] [x] if selected_subset and selected_repre: - subset_docs = list(io.find({ - "type": "subset", - "parent": {"$in": list(self.content_assets.keys())}, - "name": selected_subset - })) - subset_ids = [subset_doc["_id"] for subset_doc in subset_docs] - last_versions_by_subset_id = self.find_last_versions(subset_ids) - last_version_ids = [ - last_version["_id"] - for last_version in last_versions_by_subset_id.values() - ] - repre_docs = io.find({ - "type": "representation", - "parent": {"$in": last_version_ids}, - "name": selected_repre - }) - - return [repre_doc["_id"] for repre_doc in repre_docs] + return self._get_current_output_repre_ids_oxx( + selected_subset, selected_repre + ) # [ ] [x] [ ] if selected_subset: - subset_docs = list(io.find( - { - "type": "subset", - "parent": {"$in": list(self.content_assets.keys())}, - "name": selected_subset - }, - {"_id": True, "parent": True} - )) - if not subset_docs: - return list() - - subset_docs_by_id = { - subset_doc["_id"]: subset_doc - for subset_doc in subset_docs - } - last_versions_by_subset_id = self.find_last_versions( - subset_docs_by_id.keys() + return self._get_current_output_repre_ids_oxo( + selected_subset ) - subset_id_by_version_id = {} - for subset_id, last_version in last_versions_by_subset_id.items(): - version_id = last_version["_id"] - subset_id_by_version_id[version_id] = subset_id + return self._get_current_output_repre_ids_oox(selected_repre) - if not subset_id_by_version_id: - return list() + def _get_current_output_repre_ids_xxx( + self, asset_doc, selected_subset, selected_repre + ): + subset_doc = io.find_one( + { + "type": "subset", + "name": selected_subset, + "parent": asset_doc["_id"] + }, + {"_id": True} + ) + subset_id = subset_doc["_id"] + last_versions_by_subset_id = self.find_last_versions([subset_id]) + version_doc = last_versions_by_subset_id.get(subset_id) + if not version_doc: + return [] - repre_names_by_asset_id = collections.defaultdict(set) - for repre_doc in self.content_repres.values(): - version_doc = self.content_versions[repre_doc["parent"]] - subset_doc = self.content_subsets[version_doc["parent"]] - asset_doc = self.content_assets[subset_doc["parent"]] - repre_name = repre_doc["name"] - asset_id = asset_doc["_id"] - repre_names_by_asset_id[asset_id].add(repre_name) + repre_docs = io.find( + { + "type": "representation", + "parent": version_doc["_id"], + "name": selected_repre + }, + {"_id": True} + ) + return [repre_doc["_id"] for repre_doc in repre_docs] - repre_or_query = [] - for last_version_id, subset_id in subset_id_by_version_id.items(): - subset_doc = subset_docs_by_id[subset_id] - asset_id = subset_doc["parent"] - repre_names = repre_names_by_asset_id.get(asset_id) - if not repre_names: - continue - repre_or_query.append({ - "parent": last_version_id, - "name": {"$in": list(repre_names)} - }) - repre_docs = io.find( - { - "type": "representation", - "$or": repre_or_query - }, - {"_id": True} + def _get_current_output_repre_ids_xxo(self, asset_doc, selected_subset): + subset_doc = io.find_one( + { + "type": "subset", + "parent": asset_doc["_id"], + "name": selected_subset + }, + {"_id": True} + ) + if not subset_doc: + return [] + + repre_names = set() + for repre_doc in self.content_repres.values(): + repre_names.add(repre_doc["name"]) + + repre_docs = io.find( + { + "type": "rerpesentation", + "parent": subset_doc["_id"], + "name": {"$in": list(repre_names)} + }, + {"_id": True} + ) + return [repre_doc["_id"] for repre_doc in repre_docs] + + def _get_current_output_repre_ids_xox(self, asset_doc, selected_repre): + susbet_names = set() + for subset_doc in self.content_subsets.values(): + susbet_names.add(subset_doc["name"]) + + subset_docs = io.find( + { + "type": "subset", + "name": {"$in": list(susbet_names)}, + "parent": asset_doc["_id"] + }, + {"_id": True} + ) + subset_ids = [subset_doc["_id"] for subset_doc in subset_docs] + repre_docs = io.find( + { + "type": "representation", + "parent": {"$in": subset_ids}, + "name": selected_repre + }, + {"_id": True} + ) + return [repre_doc["_id"] for repre_doc in repre_docs] + + def _get_current_output_repre_ids_xoo(self, asset_doc): + repres_by_subset_name = collections.defaultdict(set) + for repre_doc in self.content_repres.values(): + repre_name = repre_doc["name"] + version_doc = self.content_versions[repre_doc["parent"]] + subset_doc = self.content_subsets[version_doc["parent"]] + subset_name = subset_doc["name"] + repres_by_subset_name[subset_name].add(repre_name) + + subset_docs = list(io.find( + { + "type": "subset", + "parent": asset_doc["_id"], + "name": {"$in": list(repres_by_subset_name.keys())} + }, + {"_id": True, "name": True} + )) + subset_name_by_id = { + subset_doc["_id"]: subset_doc["name"] + for subset_doc in subset_docs + } + subset_ids = list(subset_name_by_id.keys()) + last_versions_by_subset_id = self.find_last_versions(subset_ids) + last_version_id_by_subset_name = {} + for subset_id, last_version in last_versions_by_subset_id.items(): + subset_name = subset_name_by_id[subset_id] + last_version_id_by_subset_name[subset_name] = ( + last_version["_id"] ) - return [repre_doc["_id"] for repre_doc in repre_docs] + repre_or_query = [] + for subset_name, repre_names in repres_by_subset_name.items(): + version_id = last_version_id_by_subset_name.get(subset_name) + # This should not happen but why to crash? + if version_id is None: + continue + repre_or_query.append({ + "parent": version_id, + "name": {"$in": list(repre_names)} + }) + repre_docs = io.find( + {"$or": repre_or_query}, + {"_id": True} + ) + return [repre_doc["_id"] for repre_doc in repre_docs] + def _get_current_output_repre_ids_oxx( + self, selected_subset, selected_repre + ): + subset_docs = list(io.find({ + "type": "subset", + "parent": {"$in": list(self.content_assets.keys())}, + "name": selected_subset + })) + subset_ids = [subset_doc["_id"] for subset_doc in subset_docs] + last_versions_by_subset_id = self.find_last_versions(subset_ids) + last_version_ids = [ + last_version["_id"] + for last_version in last_versions_by_subset_id.values() + ] + repre_docs = io.find({ + "type": "representation", + "parent": {"$in": last_version_ids}, + "name": selected_repre + }) + + return [repre_doc["_id"] for repre_doc in repre_docs] + + def _get_current_output_repre_ids_oxo(self, selected_subset): + subset_docs = list(io.find( + { + "type": "subset", + "parent": {"$in": list(self.content_assets.keys())}, + "name": selected_subset + }, + {"_id": True, "parent": True} + )) + if not subset_docs: + return list() + + subset_docs_by_id = { + subset_doc["_id"]: subset_doc + for subset_doc in subset_docs + } + last_versions_by_subset_id = self.find_last_versions( + subset_docs_by_id.keys() + ) + + subset_id_by_version_id = {} + for subset_id, last_version in last_versions_by_subset_id.items(): + version_id = last_version["_id"] + subset_id_by_version_id[version_id] = subset_id + + if not subset_id_by_version_id: + return list() + + repre_names_by_asset_id = collections.defaultdict(set) + for repre_doc in self.content_repres.values(): + version_doc = self.content_versions[repre_doc["parent"]] + subset_doc = self.content_subsets[version_doc["parent"]] + asset_doc = self.content_assets[subset_doc["parent"]] + repre_name = repre_doc["name"] + asset_id = asset_doc["_id"] + repre_names_by_asset_id[asset_id].add(repre_name) + + repre_or_query = [] + for last_version_id, subset_id in subset_id_by_version_id.items(): + subset_doc = subset_docs_by_id[subset_id] + asset_id = subset_doc["parent"] + repre_names = repre_names_by_asset_id.get(asset_id) + if not repre_names: + continue + repre_or_query.append({ + "parent": last_version_id, + "name": {"$in": list(repre_names)} + }) + repre_docs = io.find( + { + "type": "representation", + "$or": repre_or_query + }, + {"_id": True} + ) + + return [repre_doc["_id"] for repre_doc in repre_docs] + + def _get_current_output_repre_ids_oox(self, selected_repre): # [ ] [ ] [x] repre_docs = io.find( {