Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit 26bdd14

Browse files
committed
Fixed #22772 -- Defer wizard temporary files deletion.
1 parent d8486e3 commit 26bdd14

File tree

2 files changed

+9
-3
lines changed

2 files changed

+9
-3
lines changed

formtools/tests/wizard/storage.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
import os
44
import tempfile
55

6-
from django.http import HttpRequest
6+
from django.http import HttpRequest, HttpResponse
77
from django.conf import settings
88
from django.contrib.auth.models import User
99
from django.core.files.storage import FileSystemStorage
@@ -107,4 +107,5 @@ def test_reset_deletes_tmp_files(self):
107107
self.assertTrue(storage.file_storage.exists(tmp_name))
108108

109109
storage.reset()
110+
storage.update_response(HttpResponse())
110111
self.assertFalse(storage.file_storage.exists(tmp_name))

formtools/wizard/storage/base.py

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ def __init__(self, prefix, request=None, file_storage=None):
1717
self.request = request
1818
self.file_storage = file_storage
1919
self._files = {}
20+
self._tmp_files = []
2021

2122
def init_data(self):
2223
self.data = {
@@ -27,11 +28,13 @@ def init_data(self):
2728
}
2829

2930
def reset(self):
30-
# Delete temporary files before breaking reference to them.
31+
# Store unused temporary file names in order to delete them
32+
# at the end of the response cycle through a callback attached in
33+
# `update_response`.
3134
wizard_files = self.data[self.step_files_key]
3235
for step_files in six.itervalues(wizard_files):
3336
for step_file in six.itervalues(step_files):
34-
self.file_storage.delete(step_file['tmp_name'])
37+
self._tmp_files.append(step_file['tmp_name'])
3538
self.init_data()
3639

3740
def _get_current_step(self):
@@ -118,6 +121,8 @@ def post_render_callback(response):
118121
for file in self._files.values():
119122
if not file.closed:
120123
file.close()
124+
for tmp_file in self._tmp_files:
125+
self.file_storage.delete(tmp_file)
121126

122127
if hasattr(response, 'render'):
123128
response.add_post_render_callback(post_render_callback)

0 commit comments

Comments
 (0)