Beispiel #1
0
def historian_importer(request, resource, dataset, template):
    context = {}
    if request.POST:
        result = resource.import_data(dataset,
                                      dry_run=True,
                                      raise_errors=False,
                                      file_name=tmp_storage.name,
                                      user=request.user)
        context['result'] = result
        if not result.has_errors():
            tmp_storage = TempFolderStorage()
            input_format = JSON
            tmp_storage.save(
                dataset.export('json').encode(), input_format.get_read_mode)
            context['confirm_form'] = ConfirmImportForm(
                initial={
                    'import_file_name': tmp_storage.name,
                    'original_file_name': tmp_storage.name,
                    'input_format': input_format
                })

    context['fields'] = [
        f.column_name for f in resource.get_user_visible_fields()
    ]
    return TemplateResponse(request, [template], context)
Beispiel #2
0
 def write_to_tmp_storage(self, import_file, input_format):
     tmp_storage = TempFolderStorage()
     data = bytes()
     for chunk in import_file.chunks():
         data += chunk
     tmp_storage.save(data, input_format.get_read_mode())
     return tmp_storage
    def test_temp_folder_storage(self):
        tmp_storage = TempFolderStorage()
        tmp_storage.save(self.test_string)
        name = tmp_storage.name

        tmp_storage = TempFolderStorage(name=name)
        self.assertEqual(self.test_string.decode('utf-8'), tmp_storage.read())

        self.assertTrue(os.path.isfile(tmp_storage.get_full_path()))
        tmp_storage.remove()
        self.assertFalse(os.path.isfile(tmp_storage.get_full_path()))
Beispiel #4
0
    def test_temp_folder_storage(self):
        tmp_storage = TempFolderStorage()
        tmp_storage.save(self.test_string)
        name = tmp_storage.name

        tmp_storage = TempFolderStorage(name=name)
        self.assertEqual(self.test_string.decode(), tmp_storage.read())

        self.assertTrue(os.path.isfile(tmp_storage.get_full_path()))
        tmp_storage.remove()
        self.assertFalse(os.path.isfile(tmp_storage.get_full_path()))
Beispiel #5
0
def importer(request, resource, template):
    '''
    Perform a dry_run of the import to make sure the import will not
    result in errors.  If there where no error, save the user
    uploaded file to a local temp file that will be used by
    'process_import' for the actual import.
    '''
    from_encoding = "utf-8"
    context = {}
    import_formats = [f for f in DEFAULT_FORMATS if f().can_import()]
    form = ImportForm(import_formats, request.POST or None, request.FILES
                      or None)

    if request.POST and form.is_valid():
        input_format = import_formats[int(form.cleaned_data['input_format'])]()
        import_file = form.cleaned_data['import_file']
        tmp_storage = TempFolderStorage()

        try:
            #save
            data = bytes()
            for chunk in import_file.chunks():
                data += chunk
            tmp_storage.save(data, input_format.get_read_mode())

            #read
            data = tmp_storage.read(input_format.get_read_mode())

            #decoding
            if not input_format.is_binary() and from_encoding:
                data = force_text(data, from_encoding)

            #dataset
            dataset = input_format.create_dataset(data)

        except UnicodeDecodeError as e:
            return HttpResponse(
                _(u"<h1>Imported file has a wrong encoding: %s</h1>" % e))
        except Exception as e:
            return HttpResponse(
                _(u"<h1>%s encountered while trying to load or the read file: %s</h1>"
                  % (type(e).__name__, import_file.name)))
        print(dataset)
        result = resource.import_data(dataset,
                                      dry_run=True,
                                      raise_errors=False,
                                      file_name=import_file.name,
                                      user=request.user)
        context['result'] = result
        if not result.has_errors():
            context['confirm_form'] = ConfirmImportForm(
                initial={
                    'import_file_name': tmp_storage.name,
                    'original_file_name': import_file.name,
                    'input_format': form.cleaned_data['input_format']
                })

    context['form'] = form
    context['fields'] = [
        f.column_name for f in resource.get_user_visible_fields()
    ]
    return TemplateResponse(request, [template], context)