Commit fa8b4735 authored by Simon Charette's avatar Simon Charette
Browse files

Fixed #22299 -- Cleanup wizard temp files when possible.

Thanks to @erikr for the review.
parent b66e8534
Loading
Loading
Loading
Loading
+22 −1
Original line number Diff line number Diff line
from datetime import datetime
from importlib import import_module
import os
import tempfile

from django.http import HttpRequest
from django.conf import settings

from django.contrib.auth.models import User
from django.core.files.storage import FileSystemStorage
from django.core.files.uploadedfile import SimpleUploadedFile


temp_storage_location = tempfile.mkdtemp(dir=os.environ.get('DJANGO_TEST_TEMP_DIR'))
temp_storage = FileSystemStorage(location=temp_storage_location)


def get_request():
@@ -85,3 +92,17 @@ class TestStorage(object):
        storage.extra_data['test'] = True

        self.assertTrue('test' in storage.extra_data)

    def test_reset_deletes_tmp_files(self):
        request = get_request()
        storage = self.get_storage()('wizard1', request, temp_storage)

        step = 'start'
        file_ = SimpleUploadedFile('file.txt', b'content')
        storage.set_step_files(step, {'file': file_})

        tmp_name = storage.get_step_files(step)['file'].name
        self.assertTrue(storage.file_storage.exists(tmp_name))

        storage.reset()
        self.assertFalse(storage.file_storage.exists(tmp_name))
+5 −0
Original line number Diff line number Diff line
@@ -26,6 +26,11 @@ class BaseStorage(object):
        }

    def reset(self):
        # Delete temporary files before breaking reference to them.
        wizard_files = self.data[self.step_files_key]
        for step_files in six.itervalues(wizard_files):
            for step_file in six.itervalues(step_files):
                self.file_storage.delete(step_file['tmp_name'])
        self.init_data()

    def _get_current_step(self):
+3 −3
Original line number Diff line number Diff line
@@ -629,9 +629,9 @@ storage class <builtin-fs-storage>`)::

.. warning::

    Please remember to take care of removing old files as the
    :class:`WizardView` won't remove any files, whether the wizard gets
    finished correctly or not.
    Please remember to take care of removing old temporary files, as the
    :class:`WizardView` will only remove these files if the wizard finishes
    correctly.

Conditionally view/skip specific steps
======================================