Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
44 changes: 19 additions & 25 deletions client/ayon_core/tools/common_models/hierarchy.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
from __future__ import annotations

from abc import ABC, abstractmethod
import collections
import contextlib
from dataclasses import dataclass
import time
Expand Down Expand Up @@ -43,6 +42,10 @@ class FolderItem:
label (str): Folder label.

"""
# TODO: Use `@dataclass(slots=True)` when we drop Python 3.9 support.
__slots__ = (
"entity_id", "parent_id", "name", "path", "folder_type", "label",
)
entity_id: str
parent_id: str | None
name: str
Expand Down Expand Up @@ -80,25 +83,21 @@ def from_data(cls, data: dict[str, str | None]) -> FolderItem:
return cls(**data)

@classmethod
def from_hierarchy_item(cls, item: dict[str, Any]) -> FolderItem:
"""Creates folder item from hierarchy item.
def from_rest_data(cls, data: dict[str, Any]) -> FolderItem:
"""Creates folder item from 'get_rest_folders' flat item.

Args:
item (dict[str, Any]): Hierarchy item.
data (dict[str, Any]): Flat folder item from REST endpoint.

"""
name = item["name"]
path_parts = list(item["parents"])
path_parts.append(name)
path_parts.insert(0, "")
path = "/".join(path_parts)
return FolderItem(
entity_id=item["id"],
parent_id=item["parentId"],
name = data["name"]
return cls(
entity_id=data["id"],
parent_id=data["parentId"],
name=name,
path=path,
folder_type=item["folderType"],
label=item["label"] or name,
path=f"/{data['path']}",
folder_type=data["folderType"],
label=data["label"] or name,
Comment thread
BigRoy marked this conversation as resolved.
)

@classmethod
Expand Down Expand Up @@ -646,16 +645,11 @@ def _refresh_folders_cache(
self._folders_items[project_name].update_data(folder_items)

def _query_folders(self, project_name: str) -> dict[str, FolderItem]:
hierarchy = ayon_api.get_folders_hierarchy(project_name)

folder_items = {}
hierachy_queue = collections.deque(hierarchy["hierarchy"])
while hierachy_queue:
item = hierachy_queue.popleft()
folder_item = FolderItem.from_hierarchy_item(item)
folder_items[folder_item.entity_id] = folder_item
hierachy_queue.extend(item["children"] or [])
return folder_items
folders = ayon_api.get_rest_folders(project_name, include_attrib=False)
return {
folder["id"]: FolderItem.from_rest_data(folder)
for folder in folders
}

def _query_folder_entities(
self, project_name: str, folder_ids: set[str]
Expand Down
Loading