Description
Let say you have a wizard with steps A, B, C... such that step A (for example) has an uploaded file. When step A is passed, form A is validated and the selected file is remembered by storage.get_step_files() in a cache called self._files, and now the current step is B.
If one navigates back to A, even if the selected file is changed, the cache is NOT refreshed because the logic for self._files look like this:
if (step, field) not in self._files:
self._files[(step, field)] = UploadedFile(
file=self.file_storage.open(tmp_name), **field_dict)
Since neither step nor field have changed, the cache is not refreshed!
The problem is most obvious when the physical name of the file changes, because the content of self.data[self.step_files_key][step]
has the new file, but self.get_step_files(self.current_step)
and thus current_step_files
have the old file name.
I'm not 100% sure of the reason for the cache, but it seems to me that when a step is revisited, the cache MUST be cleared (even if the filename is the same, it might contain something new!!!).