From fef534e01489e6ca407c1ff85fe3d2e47a756fe3 Mon Sep 17 00:00:00 2001 From: iLLiCiTiT Date: Mon, 20 Apr 2020 20:10:49 +0200 Subject: [PATCH] removed lib.py from ftrack lib because one method is duplicated and second is used only in one action --- .../action_store_thumbnails_to_avalon.py | 123 +++++++++++++++- pype/ftrack/lib/__init__.py | 5 - pype/ftrack/lib/lib.py | 135 ------------------ 3 files changed, 117 insertions(+), 146 deletions(-) delete mode 100644 pype/ftrack/lib/lib.py diff --git a/pype/ftrack/actions/action_store_thumbnails_to_avalon.py b/pype/ftrack/actions/action_store_thumbnails_to_avalon.py index 7adc36f4b5..6df695a9f0 100644 --- a/pype/ftrack/actions/action_store_thumbnails_to_avalon.py +++ b/pype/ftrack/actions/action_store_thumbnails_to_avalon.py @@ -5,13 +5,11 @@ import json from bson.objectid import ObjectId from pype.ftrack import BaseAction -from pype.ftrack.lib import ( - get_project_from_entity, - get_avalon_entities_for_assetversion -) from pypeapp import Anatomy from pype.ftrack.lib.io_nonsingleton import DbConnector +from pype.ftrack.lib.avalon_sync import CustAttrIdKey + class StoreThumbnailsToAvalon(BaseAction): # Action identifier @@ -89,7 +87,7 @@ class StoreThumbnailsToAvalon(BaseAction): "message": msg } - project = get_project_from_entity(entities[0]) + project = self.get_project_from_entity(entities[0]) project_name = project["full_name"] anatomy = Anatomy(project_name) @@ -186,7 +184,7 @@ class StoreThumbnailsToAvalon(BaseAction): ).format(entity["id"])) continue - avalon_ents_result = get_avalon_entities_for_assetversion( + avalon_ents_result = self.get_avalon_entities_for_assetversion( entity, self.db_con ) version_full_path = ( @@ -345,6 +343,119 @@ class StoreThumbnailsToAvalon(BaseAction): file_open.close() return True + def get_avalon_entities_for_assetversion(self, asset_version, db_con): + output = { + "success": True, + "message": None, + "project": None, + "project_name": None, + "asset": None, + "asset_name": None, + "asset_path": None, + "subset": None, + "subset_name": None, + "version": None, + "version_name": None, + "representations": None + } + + db_con.install() + + ft_asset = asset_version["asset"] + subset_name = ft_asset["name"] + version = asset_version["version"] + parent = ft_asset["parent"] + ent_path = "/".join( + [ent["name"] for ent in parent["link"]] + ) + project = self.get_project_from_entity(asset_version) + project_name = project["full_name"] + + output["project_name"] = project_name + output["asset_name"] = parent["name"] + output["asset_path"] = ent_path + output["subset_name"] = subset_name + output["version_name"] = version + + db_con.Session["AVALON_PROJECT"] = project_name + + avalon_project = db_con.find_one({"type": "project"}) + output["project"] = avalon_project + + if not avalon_project: + output["success"] = False + output["message"] = "Project not synchronized to avalon `{}`".format( + project_name + ) + return output + + asset_ent = None + asset_mongo_id = parent["custom_attributes"].get(CustAttrIdKey) + if asset_mongo_id: + try: + asset_mongo_id = ObjectId(asset_mongo_id) + asset_ent = db_con.find_one({ + "type": "asset", + "_id": asset_mongo_id + }) + except Exception: + pass + + if not asset_ent: + asset_ent = db_con.find_one({ + "type": "asset", + "data.ftrackId": parent["id"] + }) + + output["asset"] = asset_ent + + if not asset_ent: + output["success"] = False + output["message"] = "Not synchronized entity to avalon `{}`".format( + ent_path + ) + return output + + asset_mongo_id = asset_ent["_id"] + + subset_ent = db_con.find_one({ + "type": "subset", + "parent": asset_mongo_id, + "name": subset_name + }) + + output["subset"] = subset_ent + + if not subset_ent: + output["success"] = False + output["message"] = ( + "Subset `{}` does not exist under Asset `{}`" + ).format(subset_name, ent_path) + return output + + version_ent = db_con.find_one({ + "type": "version", + "name": version, + "parent": subset_ent["_id"] + }) + + output["version"] = version_ent + + if not version_ent: + output["success"] = False + output["message"] = ( + "Version `{}` does not exist under Subset `{}` | Asset `{}`" + ).format(version, subset_name, ent_path) + return output + + repre_ents = list(db_con.find({ + "type": "representation", + "parent": version_ent["_id"] + })) + + output["representations"] = repre_ents + return output + def register(session, plugins_presets={}): StoreThumbnailsToAvalon(session, plugins_presets).register() diff --git a/pype/ftrack/lib/__init__.py b/pype/ftrack/lib/__init__.py index 692461de87..c56b744f87 100644 --- a/pype/ftrack/lib/__init__.py +++ b/pype/ftrack/lib/__init__.py @@ -4,8 +4,3 @@ from .ftrack_base_handler import BaseHandler from .ftrack_event_handler import BaseEvent from .ftrack_action_handler import BaseAction from .ftrack_app_handler import AppAction - -from .lib import ( - get_project_from_entity, - get_avalon_entities_for_assetversion -) diff --git a/pype/ftrack/lib/lib.py b/pype/ftrack/lib/lib.py deleted file mode 100644 index aee297fc7e..0000000000 --- a/pype/ftrack/lib/lib.py +++ /dev/null @@ -1,135 +0,0 @@ -from bson.objectid import ObjectId - -from .avalon_sync import CustAttrIdKey -import avalon.io - - -def get_project_from_entity(entity): - # TODO add more entities - ent_type_lowered = entity.entity_type.lower() - if ent_type_lowered == "project": - return entity - - elif ent_type_lowered == "assetversion": - return entity["asset"]["parent"]["project"] - - elif "project" in entity: - return entity["project"] - - return None - - -def get_avalon_entities_for_assetversion(asset_version, db_con=None): - output = { - "success": True, - "message": None, - "project": None, - "project_name": None, - "asset": None, - "asset_name": None, - "asset_path": None, - "subset": None, - "subset_name": None, - "version": None, - "version_name": None, - "representations": None - } - - if db_con is None: - db_con = avalon.io - db_con.install() - - ft_asset = asset_version["asset"] - subset_name = ft_asset["name"] - version = asset_version["version"] - parent = ft_asset["parent"] - ent_path = "/".join( - [ent["name"] for ent in parent["link"]] - ) - project = get_project_from_entity(asset_version) - project_name = project["full_name"] - - output["project_name"] = project_name - output["asset_name"] = parent["name"] - output["asset_path"] = ent_path - output["subset_name"] = subset_name - output["version_name"] = version - - db_con.Session["AVALON_PROJECT"] = project_name - - avalon_project = db_con.find_one({"type": "project"}) - output["project"] = avalon_project - - if not avalon_project: - output["success"] = False - output["message"] = "Project not synchronized to avalon `{}`".format( - project_name - ) - return output - - asset_ent = None - asset_mongo_id = parent["custom_attributes"].get(CustAttrIdKey) - if asset_mongo_id: - try: - asset_mongo_id = ObjectId(asset_mongo_id) - asset_ent = db_con.find_one({ - "type": "asset", - "_id": asset_mongo_id - }) - except Exception: - pass - - if not asset_ent: - asset_ent = db_con.find_one({ - "type": "asset", - "data.ftrackId": parent["id"] - }) - - output["asset"] = asset_ent - - if not asset_ent: - output["success"] = False - output["message"] = "Not synchronized entity to avalon `{}`".format( - ent_path - ) - return output - - asset_mongo_id = asset_ent["_id"] - - subset_ent = db_con.find_one({ - "type": "subset", - "parent": asset_mongo_id, - "name": subset_name - }) - - output["subset"] = subset_ent - - if not subset_ent: - output["success"] = False - output["message"] = ( - "Subset `{}` does not exist under Asset `{}`" - ).format(subset_name, ent_path) - return output - - version_ent = db_con.find_one({ - "type": "version", - "name": version, - "parent": subset_ent["_id"] - }) - - output["version"] = version_ent - - if not version_ent: - output["success"] = False - output["message"] = ( - "Version `{}` does not exist under Subset `{}` | Asset `{}`" - ).format(version, subset_name, ent_path) - return output - - repre_ents = list(db_con.find({ - "type": "representation", - "parent": version_ent["_id"] - })) - - output["representations"] = repre_ents - return output