Projet

Général

Profil

0001-document-correct-method-delete-16186.patch

Jean-Baptiste Jaillet, 09 mai 2017 00:01

Télécharger (2,58 ko)

Voir les différences:

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(-)
fargo/fargo/models.py
17 17
from django.utils.text import slugify
18 18
from django.utils.http import urlquote
19 19
from django.dispatch import receiver
20
from django.db.models.signals import post_save
20
from django.db.models.signals import post_save, post_delete
21 21
from django.core.files.storage import default_storage
22 22

  
23 23
from jsonfield import JSONField
......
171 171
            magic_object.close()
172 172
        super(Document, self).save(*args, **kwargs)
173 173

  
174
    def delete(self):
175
        '''Delete file on model delete'''
176
        self.document_file.delete()
177
        super(Document, self).delete()
178

  
179 174
    @property
180 175
    def thumbnail_path(self):
181 176
        name = os.path.basename(self.content.name)
......
217 212
                         instance.content.file.name,
218 213
                         instance.thumbnail_full_path])
219 214
    threading.Thread(target=do).start()
215

  
216
@receiver(post_delete, sender=Document)
217
def delete_file(sender, instance, **kwargs):
218
    if instance.content:
219
        if os.path.isfile(instance.content.path):
220
            os.remove(instance.content.path)
tests/test_manager.py
1
import os
2
import pytest
3

  
4
from django.core.files.base import ContentFile
5

  
6
from fargo.fargo.models import Document
7

  
8
pytestmark = pytest.mark.django_db
9

  
1 10
def login(app, username='admin', password='admin', user=None):
2 11
    login_page = app.get('/login/')
3 12
    login_form = login_page.forms[0]
......
10 19
    resp = login_form.submit()
11 20
    assert resp.status_int == 302
12 21
    return app
22

  
23
def test_document_delete(app):
24
    f = ContentFile('A test file, ez pz.', 'test_file.txt')
25
    doc = Document.objects.get_by_file(f)
26
    file_path = doc.content.path
27
    assert os.path.isfile(file_path)
28

  
29
    doc.delete()
30
    assert not os.path.isfile(file_path)
13
-