Fixes: deleting presentation will now delete related local files, search icons will not save icons in presentation directory thus optimizing disk usage

This commit is contained in:
sauravniraula 2025-05-16 13:45:49 +05:45
parent 88c8aef73c
commit dba7a6ee36
No known key found for this signature in database
GPG key ID: 60FCC1B5A5E83326
3 changed files with 18 additions and 24 deletions

View file

@ -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)

View file

@ -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

View file

@ -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]