Exemple #1
0
    def post(self, request):
        replace = 'replace' in request.POST

        file_ref = expose_cached_download(
            request.file.read(),
            file_extension=file_extention_from_filename(request.file.name),
            expiry=1*60*60,
        )

        # catch basic validation in the synchronous UI
        try:
            validate_fixture_file_format(file_ref.get_filename())
        except FixtureUploadError as e:
            messages.error(
                request, _(u'Please fix the following formatting issues in your excel file: %s') %
                '<ul><li>{}</li></ul>'.format('</li><li>'.join(e.errors)),
                extra_tags='html'
            )
            return HttpResponseRedirect(fixtures_home(self.domain))

        # hand off to async
        task = fixture_upload_async.delay(
            self.domain,
            file_ref.download_id,
            replace,
        )
        file_ref.set_task(task)
        return HttpResponseRedirect(
            reverse(
                FixtureUploadStatusView.urlname,
                args=[self.domain, file_ref.download_id]
            )
        )
Exemple #2
0
    def post(self, request):
        replace = 'replace' in request.POST

        file_ref = expose_cached_download(
            request.file.read(),
            file_extension=file_extention_from_filename(request.file.name),
            expiry=1*60*60,
        )

        # catch basic validation in the synchronous UI
        try:
            validate_fixture_file_format(file_ref.get_filename())
        except FixtureUploadError as e:
            messages.error(
                request, _('Please fix the following formatting issues in your Excel file: %s') %
                '<ul><li>{}</li></ul>'.format('</li><li>'.join(e.errors)),
                extra_tags='html'
            )
            return HttpResponseRedirect(fixtures_home(self.domain))

        # hand off to async
        task = fixture_upload_async.delay(
            self.domain,
            file_ref.download_id,
            replace,
        )
        file_ref.set_task(task)
        return HttpResponseRedirect(
            reverse(
                FixtureUploadStatusView.urlname,
                args=[self.domain, file_ref.download_id]
            )
        )
Exemple #3
0
 def _test(self, config):
     if config.error_messages:
         with self.assertRaises(FixtureUploadError) as context:
             validate_fixture_file_format(config.upload_file)
         self.assertEqual(context.exception.errors, config.error_messages)
     else:
         # assert doesn't raise anything
         validate_fixture_file_format(config.upload_file)
Exemple #4
0
 def _test(self, config):
     if config.error_messages:
         with self.assertRaises(FixtureUploadError) as context:
             validate_fixture_file_format(config.upload_file)
         self.assertEqual(context.exception.errors, config.error_messages)
     else:
         # assert doesn't raise anything
         validate_fixture_file_format(config.upload_file)
Exemple #5
0
def test_validation(self, filename, error_messages):
    upload_file = _make_path('test_upload', '{}.xlsx'.format(filename))
    if error_messages:
        with self.assertRaises(FixtureUploadError) as context:
            validate_fixture_file_format(upload_file)
        self.assertEqual(context.exception.errors, error_messages)
    else:
        # assert doesn't raise anything
        validate_fixture_file_format(upload_file)
Exemple #6
0
def test_validation(self, filename, error_messages):
    upload_file = _make_path('test_upload', '{}.xlsx'.format(filename))
    if error_messages:
        with self.assertRaises(FixtureUploadError) as context:
            validate_fixture_file_format(upload_file)
        self.assertEqual(context.exception.errors, error_messages)
    else:
        # assert doesn't raise anything
        validate_fixture_file_format(upload_file)
Exemple #7
0
def _upload_fixture_api(request, domain):
    try:
        excel_file, replace, is_async = _get_fixture_upload_args_from_request(request, domain)
    except FixtureAPIRequestError as e:
        return UploadFixtureAPIResponse('fail', six.text_type(e))

    with excel_file as filename:

        if is_async:
            with open(filename, 'r') as f:
                file_ref = expose_cached_download(
                    f.read(),
                    file_extension=file_extention_from_filename(filename),
                    expiry=1 * 60 * 60,
                )
                download_id = file_ref.download_id
                task = fixture_upload_async.delay(
                    domain,
                    download_id,
                    replace,
                )
                file_ref.set_task(task)

                status_url = "{}{}".format(
                    get_url_base(),
                    reverse('fixture_api_status', args=(domain, download_id))
                )

                curl_command = "curl -v --digest {} -u {}".format(
                    status_url, request.user.username
                )

                return UploadFixtureAPIResponse('success', {
                    "download_id": download_id,
                    "status_url": status_url,
                    "curl_command": curl_command,
                    "message": _("File uploaded successfully.")
                })

        try:
            validate_fixture_file_format(filename)
        except FixtureUploadError as e:
            return UploadFixtureAPIResponse(
                'fail',
                _('Please fix the following formatting issues in your Excel file: %s')
                % '\n'.join(e.errors))

        result = upload_fixture_file(domain, filename, replace=replace)
        status = 'warning' if result.errors else 'success'
        return UploadFixtureAPIResponse(status, result.get_display_message())
Exemple #8
0
def _upload_fixture_api(request, domain):
    try:
        excel_file, replace = _get_fixture_upload_args_from_request(request, domain)
    except FixtureAPIRequestError as e:
        return UploadFixtureAPIResponse('fail', e.message)

    with excel_file as filename:
        try:
            validate_fixture_file_format(filename)
        except FixtureUploadError as e:
            return UploadFixtureAPIResponse(
                'fail',
                _('Please fix the following formatting issues in your Excel file: %s')
                % '\n'.join(e.errors))

        result = upload_fixture_file(domain, filename, replace=replace)
        status = 'warning' if result.errors else 'success'
        return UploadFixtureAPIResponse(status, result.get_display_message())
Exemple #9
0
def _upload_fixture_api(request, domain):
    try:
        excel_file, replace = _get_fixture_upload_args_from_request(request, domain)
    except FixtureAPIRequestError as e:
        return UploadFixtureAPIResponse('fail', e.message)

    with excel_file as filename:
        try:
            validate_fixture_file_format(filename)
        except FixtureUploadError as e:
            return UploadFixtureAPIResponse(
                'fail',
                _(u'Please fix the following formatting issues in your excel file: %s')
                % '\n'.join(e.errors))

        result = upload_fixture_file(domain, filename, replace=replace)
        status = 'warning' if result.errors else 'success'
        return UploadFixtureAPIResponse(status, result.get_display_message())
Exemple #10
0
def _upload_fixture_api(request, domain):
    try:
        excel_file, replace, is_async, skip_orm, email = _get_fixture_upload_args_from_request(
            request, domain)
    except FixtureAPIRequestError as e:
        return UploadFixtureAPIResponse('fail', str(e))

    with excel_file as filename:

        if is_async:
            with open(filename, 'rb') as f:
                file_ref = expose_cached_download(
                    f.read(),
                    file_extension=file_extention_from_filename(filename),
                    expiry=1 * 60 * 60,
                )
                download_id = file_ref.download_id
                task = fixture_upload_async.delay(domain,
                                                  download_id,
                                                  replace,
                                                  skip_orm,
                                                  user_email=email)
                file_ref.set_task(task)

                status_url = "{}{}".format(
                    get_url_base(),
                    reverse('fixture_api_status', args=(domain, download_id)))

                return AsyncUploadFixtureAPIResponse(
                    'success',
                    _("File has been uploaded successfully and is queued for processing."
                      ), download_id, status_url)

        try:
            validate_fixture_file_format(filename)
        except FixtureUploadError as e:
            return UploadFixtureAPIResponse(
                'fail',
                _('Please fix the following formatting issues in your Excel file: %s'
                  ) % '\n'.join(e.errors))

        result = upload_fixture_file(domain, filename, replace=replace)
        status = 'warning' if result.errors else 'success'
        return UploadFixtureAPIResponse(status, result.get_display_message())
Exemple #11
0
def test_validation(self, filename, error_messages, file_contents):
    if file_contents:
        workbook = openpyxl.Workbook()
        for title, rows in file_contents.items():
            if title == 'types':
                sheet = workbook.create_sheet(title, 0)
            else:
                sheet = workbook.create_sheet(title)
            for row in rows:
                sheet.append(row)
        upload_file = tempfile.TemporaryFile()
        workbook.save(upload_file)
        upload_file.seek(0)
    else:
        upload_file = _make_path('test_upload', '{}.xlsx'.format(filename))
    if error_messages:
        with self.assertRaises(FixtureUploadError) as context:
            validate_fixture_file_format(upload_file)
        self.assertEqual(context.exception.errors, error_messages)
    else:
        # assert doesn't raise anything
        validate_fixture_file_format(upload_file)
Exemple #12
0
def test_validation(self, filename, error_messages, file_contents):
    if file_contents:
        workbook = openpyxl.Workbook()
        for title, rows in file_contents.items():
            if title == 'types':
                sheet = workbook.create_sheet(title, 0)
            else:
                sheet = workbook.create_sheet(title)
            for row in rows:
                sheet.append(row)
        upload_file = tempfile.TemporaryFile()
        workbook.save(upload_file)
        upload_file.seek(0)
    else:
        upload_file = _make_path('test_upload', '{}.xlsx'.format(filename))
    if error_messages:
        with self.assertRaises(FixtureUploadError) as context:
            validate_fixture_file_format(upload_file)
        self.assertEqual(context.exception.errors, error_messages)
    else:
        # assert doesn't raise anything
        validate_fixture_file_format(upload_file)