Ejemplo n.º 1
0
def download_excel_analyser(request, username, form_id_string):
    xform = get_object_or_404(XForm,
                              user__username__iexact=username,
                              id_string__exact=form_id_string)
    owner = User.objects.get(username__iexact=username)
    helper_auth_helper(request)

    if not has_permission(xform, owner, request, xform.shared):
        return HttpResponseForbidden('Not shared.')

    # Get the XLSForm.
    xlsform_io= _get_xlsform(request, username, form_id_string)
    # FIXME: Really don't like this overloading...
    if isinstance(xlsform_io, HttpResponse):
        return xlsform_io

    # Get the data.
    data_export= Export.objects.filter(
            xform=xform, export_type=Export.XLS_EXPORT).order_by('-created_on').first()
    if not data_export:
        raise Http404('Please generate an XLS export of your data before generating an Excel Analyser copy.')

    analyser_filename= os.path.splitext(data_export.filename)[0] + '_EXCEL_ANALYSER.xlsx'
    with get_storage_class()().open(data_export.filepath) as data_file_xlsx:
        analyser_io= generate_analyser(xlsform_io, data_file_xlsx)

    response = StreamingHttpResponse(FileWrapper(analyser_io),
            content_type='application/vnd.ms-excel; charset=utf-8')
    response['Content-Disposition'] = 'attachment; filename={}'.format(analyser_filename)
    return response
Ejemplo n.º 2
0
def download_excel_analyser(request, username, form_id_string):
    xform = get_object_or_404(XForm, user__username__iexact=username, id_string__exact=form_id_string)
    owner = User.objects.get(username__iexact=username)
    helper_auth_helper(request)

    if not has_permission(xform, owner, request, xform.shared):
        return HttpResponseForbidden("Not shared.")

    # Get the XLSForm.
    xlsform_io = _get_xlsform(request, username, form_id_string)
    # FIXME: Really don't like this overloading...
    if isinstance(xlsform_io, HttpResponse):
        return xlsform_io

    # Get the data.
    data_export = Export.objects.filter(xform=xform, export_type=Export.XLS_EXPORT).order_by("-created_on").first()
    if not data_export or not data_export.filename:
        if not data_export:
            err_msg = _(u"Please generate an XLS export of your data before generating an Excel Analyser copy.")
        elif data_export.status == Export.PENDING:
            err_msg = _(
                u"Please wait for your XLS export to be generated " u"before trying to generate an Excel Analyser copy."
            )
        elif data_export.status == Export.FAILED:
            err_msg = _(
                u"Last attempt for XLS export creation failed. An XLS export of your data must "
                u"have been successfully generated before trying to generate an Excel Analyser copy."
            )
        else:
            err_msg = _(
                u"Unknown XLS export state. "
                u"Please generate an XLS export of your data before generating an Excel Analyser copy."
            )
        return HttpResponseNotFound(
            loader.render_to_string("404_xls_analyzer_error.html", {"error_message": err_msg}, RequestContext(request))
        )

    analyser_filename = os.path.splitext(data_export.filename)[0] + "_EXCEL_ANALYSER.xlsx"
    with get_storage_class()().open(data_export.filepath) as data_file_xlsx:
        analyser_io = generate_analyser(xlsform_io, data_file_xlsx)

    response = StreamingHttpResponse(FileWrapper(analyser_io), content_type="application/vnd.ms-excel; charset=utf-8")
    response["Content-Disposition"] = "attachment; filename={}".format(analyser_filename)
    return response
Ejemplo n.º 3
0
def download_excel_analyser(request, username, form_id_string):
    xform = get_object_or_404(XForm,
                              user__username__iexact=username,
                              id_string__exact=form_id_string)
    owner = User.objects.get(username__iexact=username)
    helper_auth_helper(request)

    if not has_permission(xform, owner, request, xform.shared):
        return HttpResponseForbidden('Not shared.')

    # Get the XLSForm.
    xlsform_io= _get_xlsform(request, username, form_id_string)
    # FIXME: Really don't like this overloading...
    if isinstance(xlsform_io, HttpResponse):
        return xlsform_io

    # Get the data.
    data_export= Export.objects.filter(
            xform=xform, export_type=Export.XLS_EXPORT).order_by('-created_on').first()
    if not data_export or not data_export.filename:
        if not data_export:
            err_msg = _(u'Please generate an XLS export of your data before generating an Excel Analyser copy.')
        elif data_export.status == Export.PENDING:
            err_msg = _(u'Please wait for your XLS export to be generated '
                        u'before trying to generate an Excel Analyser copy.');
        elif data_export.status == Export.FAILED:
            err_msg = _(u'Last attempt for XLS export creation failed. An XLS export of your data must '
                        u'have been successfully generated before trying to generate an Excel Analyser copy.')
        else:
            err_msg = _(u'Unknown XLS export state. '
                        u'Please generate an XLS export of your data before generating an Excel Analyser copy.')
        return HttpResponseNotFound(loader.render_to_string('404_xls_analyzer_error.html', {'error_message': err_msg},
                                                            RequestContext(request)))

    analyser_filename= os.path.splitext(data_export.filename)[0] + '_EXCEL_ANALYSER.xlsx'
    with get_storage_class()().open(data_export.filepath) as data_file_xlsx:
        analyser_io= generate_analyser(xlsform_io, data_file_xlsx)

    response = StreamingHttpResponse(FileWrapper(analyser_io),
            content_type='application/vnd.ms-excel; charset=utf-8')
    response['Content-Disposition'] = 'attachment; filename={}'.format(analyser_filename)
    return response