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
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
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