Skip to content

Commit a8738b1

Browse files
delete uploaded file on import job delete
1 parent a08f82d commit a8738b1

File tree

2 files changed

+29
-1
lines changed

2 files changed

+29
-1
lines changed
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
import os
2+
from django.test import TestCase
3+
from django.core.files.base import ContentFile
4+
5+
from import_export_celery.models.importjob import ImportJob
6+
7+
8+
class ImportJobTestCases(TestCase):
9+
10+
def test_delete_file_on_job_delete(self):
11+
job = ImportJob.objects.create(
12+
file=ContentFile(b"", "file.csv"),
13+
)
14+
file_path = job.file.path
15+
assert os.path.exists(file_path)
16+
job.delete()
17+
assert not os.path.exists(file_path)
18+
assert not ImportJob.objects.filter(id=job.id).exists()

import_export_celery/models/importjob.py

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
from django.db import models, transaction
99
from django.dispatch import receiver
1010

11-
from django.db.models.signals import post_save
11+
from django.db.models.signals import post_save, post_delete
1212
from django.utils.translation import gettext_lazy as _
1313

1414
from import_export.formats.base_formats import DEFAULT_FORMATS
@@ -95,3 +95,13 @@ def importjob_post_save(sender, instance, **kwargs):
9595
dry_run=getattr(settings, "IMPORT_DRY_RUN_FIRST_TIME", True),
9696
)
9797
)
98+
99+
100+
@receiver(post_delete, sender=ImportJob)
101+
def auto_delete_file_on_delete(sender, instance, **kwargs):
102+
"""
103+
Deletes file related to the import job
104+
"""
105+
if instance.file:
106+
instance.file.delete()
107+
instance.delete()

0 commit comments

Comments
 (0)