Generateurv2/backend/api/exercices/signals.py

49 lines
1.4 KiB
Python
Raw Normal View History

2022-05-18 10:15:54 +02:00
import os
import shutil
import uuid
from django.db import models
from django.dispatch import receiver
from .models import Exercice
from api.settings import MEDIA_ROOT
# These two auto-delete files from filesystem when they are unneeded:
@receiver(models.signals.post_delete, sender=Exercice)
def auto_delete_file_on_delete(sender, instance, **kwargs):
"""
Deletes file from filesystem
when corresponding `MediaFile` object is deleted.
"""
print(instance, instance.exo_model.path, instance.id_code)
if instance.exo_model:
if os.path.isfile(instance.exo_model.path):
os.remove(instance.exo_model.path)
if os.path.isdir(f'{MEDIA_ROOT}/uploads/exercices/exo_{instance.id_code}'):
shutil.rmtree(f'{MEDIA_ROOT}/uploads/exercices/exo_{instance.id_code}')
#os.rmdir(f'{MEDIA_ROOT}/uploads/exercices/exo_{instance.id_code}')
@receiver(models.signals.pre_save, sender=Exercice)
def auto_delete_file_on_change(sender, instance, **kwargs):
"""
Deletes old file from filesystem
when corresponding `MediaFile` object is updated
with new file.
"""
if not instance.pk:
return False
try:
old_file = Exercice.objects.get(id_code=instance.id_code).exo_model
except Exercice.DoesNotExist:
return False
new_file = instance.exo_model
if not old_file == new_file:
if os.path.isfile(old_file.path):
os.remove(old_file.path)