From fd1fefe0827a8d6f32c77a348be2280e3cc869fe Mon Sep 17 00:00:00 2001 From: Jean-Baptiste Jaillet Date: Mon, 8 May 2017 23:51:03 +0200 Subject: [PATCH 1/2] document: correct method delete (#16186) --- fargo/fargo/models.py | 13 +++++++------ tests/test_manager.py | 18 ++++++++++++++++++ 2 files changed, 25 insertions(+), 6 deletions(-) diff --git a/fargo/fargo/models.py b/fargo/fargo/models.py index 4a97455..180e2df 100644 --- a/fargo/fargo/models.py +++ b/fargo/fargo/models.py @@ -17,7 +17,7 @@ from django.utils.translation import ugettext_lazy as _ from django.utils.text import slugify from django.utils.http import urlquote from django.dispatch import receiver -from django.db.models.signals import post_save +from django.db.models.signals import post_save, post_delete from django.core.files.storage import default_storage from jsonfield import JSONField @@ -171,11 +171,6 @@ class Document(models.Model): magic_object.close() super(Document, self).save(*args, **kwargs) - def delete(self): - '''Delete file on model delete''' - self.document_file.delete() - super(Document, self).delete() - @property def thumbnail_path(self): name = os.path.basename(self.content.name) @@ -217,3 +212,9 @@ def create_thumbnail(sender, instance, created, **kwargs): instance.content.file.name, instance.thumbnail_full_path]) threading.Thread(target=do).start() + +@receiver(post_delete, sender=Document) +def delete_file(sender, instance, **kwargs): + if instance.content: + if os.path.isfile(instance.content.path): + os.remove(instance.content.path) diff --git a/tests/test_manager.py b/tests/test_manager.py index 196a6de..4a48643 100644 --- a/tests/test_manager.py +++ b/tests/test_manager.py @@ -1,3 +1,12 @@ +import os +import pytest + +from django.core.files.base import ContentFile + +from fargo.fargo.models import Document + +pytestmark = pytest.mark.django_db + def login(app, username='admin', password='admin', user=None): login_page = app.get('/login/') login_form = login_page.forms[0] @@ -10,3 +19,12 @@ def login(app, username='admin', password='admin', user=None): resp = login_form.submit() assert resp.status_int == 302 return app + +def test_document_delete(app): + f = ContentFile('A test file, ez pz.', 'test_file.txt') + doc = Document.objects.get_by_file(f) + file_path = doc.content.path + assert os.path.isfile(file_path) + + doc.delete() + assert not os.path.isfile(file_path) -- 2.11.0