def test_writing_file_with_format(self): f = "{}/files/example.csv".format(TEST_ROOT) (_, filename) = os.path.split(f) with open(f, "rb") as infile: content_orig = infile.read() upload_file = ContentFile(content_orig) import_formats = get_import_formats() import_formats = [x for x in import_formats if x.__name__ == "CSV"] input_format = import_formats[0]() file_storage = write_to_file_storage(upload_file, input_format) self.assertEqual(type(file_storage).__name__, "TempFolderStorage") file_orig_checksum = hashlib.md5() file_orig_checksum.update(content_orig) file_orig_checksum = file_orig_checksum.hexdigest() file_new_checksum = hashlib.md5() with open(file_storage.get_full_path(), "rb") as file_new: file_new_checksum.update(file_new.read()) file_new_checksum = file_new_checksum.hexdigest() self.assertEqual(file_orig_checksum, file_new_checksum)
def start_import(request): supported_extensions = get_supported_extensions() from_encoding = "utf-8" query_string = request.GET.get('q', "") if request.POST or request.FILES: form_kwargs = {} form = ImportForm(supported_extensions, request.POST or None, request.FILES or None, **form_kwargs) else: form = ImportForm(supported_extensions) if not request.FILES or not form.is_valid(): return render( request, "wagtailredirects/choose_import_file.html", { 'search_form': SearchForm(data=dict(q=query_string) if query_string else None, placeholder=_("Search redirects")), "form": form, }, ) import_file = form.cleaned_data["import_file"] _name, extension = os.path.splitext(import_file.name) extension = extension.lstrip(".") if extension not in supported_extensions: messages.error( request, _('File format of type "{}" is not supported').format(extension)) return redirect('wagtailredirects:start_import') import_format_cls = get_format_cls_by_extension(extension) input_format = import_format_cls() file_storage = write_to_file_storage(import_file, input_format) try: data = file_storage.read(input_format.get_read_mode()) if not input_format.is_binary() and from_encoding: data = force_str(data, from_encoding) dataset = input_format.create_dataset(data) except UnicodeDecodeError as e: messages.error(request, _("Imported file has a wrong encoding: %s") % e) return redirect('wagtailredirects:start_import') except Exception as e: # pragma: no cover messages.error( request, _("%(error)s encountered while trying to read file: %(filename)s") % { 'error': type(e).__name__, 'filename': import_file.name }) return redirect('wagtailredirects:start_import') initial = { "import_file_name": file_storage.name, "original_file_name": import_file.name, "input_format": get_import_formats().index(import_format_cls), } return render( request, "wagtailredirects/confirm_import.html", { "form": ConfirmImportForm(dataset.headers, initial=initial), "dataset": dataset, }, )