From d79a91413823901e80e28ccc72082c41b22c55ef Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micka=C3=ABl=20Desfr=C3=AAnes?= <mickael.desfrenes@unicaen.fr> Date: Mon, 2 Dec 2024 14:13:33 +0100 Subject: [PATCH] clean iiif file when media is removed --- pount/apps/api/signals.py | 8 +++++++- pount/apps/api/tasks.py | 16 ++++++++++++++-- 2 files changed, 21 insertions(+), 3 deletions(-) diff --git a/pount/apps/api/signals.py b/pount/apps/api/signals.py index 89e965fa..34588ce4 100644 --- a/pount/apps/api/signals.py +++ b/pount/apps/api/signals.py @@ -5,7 +5,7 @@ from django.dispatch import receiver from pount.apps.api import models from pount.apps.api.libs.referential import clear_cache_for_referential, delete_referential_in_mongodb from pount.apps.api.models.template import DELETED_SUFFIX -from pount.apps.api.tasks import ensure_media_has_iiif +from pount.apps.api.tasks import clean_iiif_media, ensure_media_has_iiif pre_soft_delete = django.dispatch.Signal() @@ -58,3 +58,9 @@ def _create_project_group_and_permission(project, group_name, role_name): def create_iiif_task(sender, instance: models.item.MediaFile, **kwargs): if instance.component == "Image": ensure_media_has_iiif.delay(instance.id) + + +@receiver(post_delete, sender=models.item.MediaFile) +def remove_iiif_file(sender, instance: models.item.MediaFile, **kwargs): + if instance.component == "Image": + clean_iiif_media.delay(instance.filename) diff --git a/pount/apps/api/tasks.py b/pount/apps/api/tasks.py index 704605aa..a8e28064 100644 --- a/pount/apps/api/tasks.py +++ b/pount/apps/api/tasks.py @@ -33,6 +33,19 @@ def handle_update_item_metadata_on_template_save(template_id: UUID) -> None: update_items_using_template(template=template_id) +@shared_task +def clean_iiif_media(media_filename: str) -> None: + import os + + from pount.apps.api.storage_backends import IIIFFileStorage + + iiif_storage = IIIFFileStorage() + basename, _ = os.path.splitext(media_filename) + tiled_tif = f"{basename}.tiled.tif" + iiif_storage.delete(tiled_tif) + logger.debug(f"deleted {tiled_tif}") + + @shared_task def ensure_media_has_iiif(media_id: UUID) -> None: import os @@ -93,5 +106,4 @@ def ensure_media_has_iiif(media_id: UUID) -> None: iiif_storage = IIIFFileStorage() with open(tiled_tif, "rb") as f: iiif_storage.save(os.path.basename(tiled_tif), f) - - logger.debug("MEDIA HAS IIIF") + logger.debug(f"saved {tiled_tif}") -- GitLab