From dba7a6ee36c38acd6ebcd603177e8bb4afcc9a6f Mon Sep 17 00:00:00 2001 From: sauravniraula Date: Fri, 16 May 2025 13:45:49 +0545 Subject: [PATCH] Fixes: deleting presentation will now delete related local files, search icons will not save icons in presentation directory thus optimizing disk usage --- .../handlers/delete_presentation.py | 8 ++++++++ .../api/routers/presentation/handlers/edit.py | 19 +++++++++---------- .../fastapi/image_processor/icons_finder.py | 15 +-------------- 3 files changed, 18 insertions(+), 24 deletions(-) diff --git a/servers/fastapi/api/routers/presentation/handlers/delete_presentation.py b/servers/fastapi/api/routers/presentation/handlers/delete_presentation.py index 99ada0a1..4e48864f 100644 --- a/servers/fastapi/api/routers/presentation/handlers/delete_presentation.py +++ b/servers/fastapi/api/routers/presentation/handlers/delete_presentation.py @@ -1,7 +1,10 @@ +import os +import shutil from api.models import LogMetadata from api.services.logging import LoggingService from api.sql_models import PresentationSqlModel from api.services.database import get_sql_session +from api.utils import get_presentation_dir class DeletePresentationHandler: @@ -9,6 +12,8 @@ class DeletePresentationHandler: def __init__(self, id): self.id = id + self.presentation_dir = get_presentation_dir(self.id) + async def delete(self, logging_service: LoggingService, log_metadata: LogMetadata): logging_service.logger.info( logging_service.message({"presentation": self.id}), @@ -19,3 +24,6 @@ class DeletePresentationHandler: presentation = sql_session.get(PresentationSqlModel, self.id) sql_session.delete(presentation) sql_session.commit() + + if os.path.exists(self.presentation_dir): + shutil.rmtree(self.presentation_dir) diff --git a/servers/fastapi/api/routers/presentation/handlers/edit.py b/servers/fastapi/api/routers/presentation/handlers/edit.py index 5bb0995d..5db2f415 100644 --- a/servers/fastapi/api/routers/presentation/handlers/edit.py +++ b/servers/fastapi/api/routers/presentation/handlers/edit.py @@ -52,13 +52,14 @@ class PresentationEditHandler: select(SlideSqlModel).where(SlideSqlModel.index == self.slide_index) ).first() - slide_to_edit = SlideModel.from_dict(slide_to_edit_sql.model_dump(mode="json")) + slide_to_edit = SlideModel.from_dict( + slide_to_edit_sql.model_dump(mode="json") + ) new_slide_type = await get_slide_type_from_prompt( self.prompt, slide_to_edit ) - edited_content = await get_edited_slide_content_model( self.prompt, SlideType(new_slide_type.slide_type), @@ -78,8 +79,6 @@ class PresentationEditHandler: content=edited_content, ) - # Images to delete - is list of cloud paths - # Images to generate - is list of index of images to generate images_to_delete, images_to_generate, icons_to_delete, icons_to_generate = ( self.get_all_assets_to_generate_and_delete( slide_to_edit, @@ -110,11 +109,11 @@ class PresentationEditHandler: if new_icon_paths: new_slide_model.icons = new_icon_paths - # Generate and Delete Images and Icons - objects_to_delete = [*images_to_delete, *icons_to_delete] - if objects_to_delete: - for each in objects_to_delete: - os.remove(each) + # ? Images and Icons are related to this presentation will be deleted while deleting presentation. + # objects_to_delete = [*images_to_delete, *icons_to_delete] + # if objects_to_delete: + # for each in objects_to_delete: + # os.remove(each) new_image_prompts = {} new_icon_queries = {} @@ -144,7 +143,7 @@ class PresentationEditHandler: slide_to_edit.icons = new_slide_model.icons slide_to_edit.content = new_slide_model.content slide_to_edit.type = SlideType(new_slide_type.slide_type) - + slide_to_edit_sql.index = slide_to_edit.index slide_to_edit_sql.type = slide_to_edit.type.value slide_to_edit_sql.design_index = slide_to_edit.design_index diff --git a/servers/fastapi/image_processor/icons_finder.py b/servers/fastapi/image_processor/icons_finder.py index 4b147395..d8b3108b 100644 --- a/servers/fastapi/image_processor/icons_finder.py +++ b/servers/fastapi/image_processor/icons_finder.py @@ -40,19 +40,6 @@ async def get_icons( ) -> List[str]: results = await vector_store.asimilarity_search(query=query, k=limit) - icon_names = [result.page_content for result in results] - icon_paths = [get_resource(f"assets/icons/bold/{each}.png") for each in icon_names] - - icon_temp_paths = [] - - for each in icon_paths: - icon_temp_path = os.path.join(temp_dir, os.path.basename(each)) - icon_temp_paths.append(icon_temp_path) - - with open(icon_temp_path, "wb") as f_a: - with open(each, "rb") as f_b: - f_a.write(f_b.read()) - - return icon_temp_paths + return [get_resource(f"assets/icons/bold/{each}.png") for each in icon_names]