diff --git a/pype/lib.py b/pype/lib.py index e443881d39..66cef40674 100644 --- a/pype/lib.py +++ b/pype/lib.py @@ -45,13 +45,21 @@ def get_hierarchy(asset_name=None): if not asset_name: asset_name = io.Session.get("AVALON_ASSET", os.environ["AVALON_ASSET"]) - asset = io.find_one({ + asset_entity = io.find_one({ "type": 'asset', "name": asset_name }) + not_set = "PARENTS_NOT_SET" + entity_parents = entity.get("data", {}).get("parents", not_set) + + # If entity already have parents then just return joined + if entity_parents != not_set: + return "/".join(entity_parents) + + # Else query parents through visualParents and store result to entity hierarchy_items = [] - entity = asset + entity = asset_entity while True: parent_id = entity.get("data", {}).get("visualParent") if not parent_id: @@ -59,6 +67,14 @@ def get_hierarchy(asset_name=None): entity = io.find_one({"_id": parent_id}) hierarchy_items.append(entity["name"]) + # Add parents to entity data for next query + entity_data = asset_entity.get("data", {}) + entity_data["parents"] = hierarchy_items + io.update_many( + {"_id": asset_entity["_id"]}, + {"$set": {"data": entity_data}} + ) + return "/".join(hierarchy_items)