From 63115d5c79d3b1c13f7d28ed5d190cf8a0370aed Mon Sep 17 00:00:00 2001 From: Ferdinand Hoffmann Date: Tue, 9 Mar 2021 12:47:46 +0100 Subject: [PATCH] Handle media file deletion in post_delete signal handler Re #12 --- wagtail_to_ion/models/file_based_models.py | 26 +++++++--------------- 1 file changed, 8 insertions(+), 18 deletions(-) diff --git a/wagtail_to_ion/models/file_based_models.py b/wagtail_to_ion/models/file_based_models.py index ea2ddee..a8e1463 100644 --- a/wagtail_to_ion/models/file_based_models.py +++ b/wagtail_to_ion/models/file_based_models.py @@ -3,6 +3,8 @@ import os from django.db import models +from django.db.models.signals import post_delete +from django.dispatch import receiver from django.utils.functional import cached_property from django.utils.translation import ugettext_lazy as _ @@ -203,20 +205,6 @@ def save(self, *args, **kwargs): if needs_transcode: self.create_renditions() - def delete(self, *args, **kwargs): - try: - self.file.delete() - except ValueError: - pass - try: - self.thumbnail.delete() - except ValueError: - pass - # delete one by one to make sure files are deleted - for rendition in self.renditions.all(): - rendition.delete() - super().delete(*args, **kwargs) - def set_media_metadata(self): self.file.open() h = hashlib.new('sha256') @@ -297,16 +285,18 @@ class Meta: def __str__(self): return "IonMediaRendition {} for {}".format(self.name, self.media_item) - def delete(self, *args, **kwargs): + +@receiver(post_delete) +def remove_media_files(sender, instance, **kwargs): + if isinstance(instance, (AbstractIonMedia, AbstractIonMediaRendition)): try: - self.file.delete() + instance.file.delete(save=False) except ValueError: pass try: - self.thumbnail.delete() + instance.thumbnail.delete(save=False) except ValueError: pass - super().delete(*args, **kwargs) class IonMediaBlock(AbstractMediaChooserBlock):