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