Merge pull request #1510 from ynput/enhancement/YN-0130_copy_folder_thumbnail

Library: Implemented copy of source folder thumbnail
This commit is contained in:
Jakub Trllo 2025-10-29 16:30:07 +01:00 committed by GitHub
commit 074f79d3b0
No known key found for this signature in database
GPG key ID: B5690EEEBB952194

View file

@ -3,6 +3,7 @@ import re
import copy import copy
import itertools import itertools
import sys import sys
import tempfile
import traceback import traceback
import uuid import uuid
from typing import Optional, Any from typing import Optional, Any
@ -709,11 +710,14 @@ class ProjectPushItemProcess:
project_entity, project_entity,
src_folder_type src_folder_type
) )
new_thumbnail_id = self._create_new_folder_thumbnail(
project_entity, src_folder_entity)
folder_entity = new_folder_entity( folder_entity = new_folder_entity(
folder_name, folder_name,
dst_folder_type, dst_folder_type,
parent_id=parent_id, parent_id=parent_id,
attribs=new_folder_attrib attribs=new_folder_attrib,
thumbnail_id=new_thumbnail_id
) )
if folder_label: if folder_label:
folder_entity["label"] = folder_label folder_entity["label"] = folder_label
@ -733,6 +737,40 @@ class ProjectPushItemProcess:
folder_entity["path"] = "/".join([parent_path, folder_name]) folder_entity["path"] = "/".join([parent_path, folder_name])
return folder_entity return folder_entity
def _create_new_folder_thumbnail(
self,
project_entity: dict[str, Any],
src_folder_entity: dict[str, Any]
) -> Optional[str]:
"""Copy thumbnail possibly set on folder.
Could be different from representation thumbnails, and it is only shown
when folder is selected.
"""
if not src_folder_entity["thumbnailId"]:
return None
thumbnail = ayon_api.get_folder_thumbnail(
self._item.src_project_name,
src_folder_entity["id"],
src_folder_entity["thumbnailId"]
)
if not thumbnail.id:
return None
with tempfile.NamedTemporaryFile(delete=False) as tmp_file:
tmp_file.write(thumbnail.content)
temp_file_path = tmp_file.name
new_thumbnail_id = None
try:
new_thumbnail_id = ayon_api.create_thumbnail(
project_entity["name"], temp_file_path)
finally:
if os.path.exists(temp_file_path):
os.remove(temp_file_path)
return new_thumbnail_id
def _get_dst_folder_type( def _get_dst_folder_type(
self, self,
project_entity: dict[str, Any], project_entity: dict[str, Any],