def export_progress(request, username, id_string, export_type): owner = get_object_or_404(User, username__iexact=username) xform = get_object_or_404(XForm, id_string__exact=id_string, user=owner) if not has_permission(xform, owner, request): return HttpResponseForbidden(_(u'Not shared.')) # find the export entry in the db export_ids = request.GET.getlist('export_ids') exports = Export.objects.filter(xform=xform, id__in=export_ids) statuses = [] for export in exports: status = { 'complete': False, 'url': None, 'filename': None, 'export_id': export.id } if export.status == Export.SUCCESSFUL: status['url'] = reverse(export_download, kwargs={ 'username': owner.username, 'id_string': xform.id_string, 'export_type': export.export_type, 'filename': export.filename }) status['filename'] = export.filename if export.export_type == Export.GDOC_EXPORT and \ export.export_url is None: redirect_url = reverse(export_progress, kwargs={ 'username': username, 'id_string': id_string, 'export_type': export_type }) token = _get_google_token(request, redirect_url) if isinstance(token, HttpResponse): return token status['url'] = None try: url = google_export_xls(export.full_filepath, xform.title, token, blob=True) except Exception, e: status['error'] = True status['message'] = e.message else: export.export_url = url export.save() status['url'] = url if export.export_type == Export.EXTERNAL_EXPORT \ and export.export_url is None: status['url'] = url # mark as complete if it either failed or succeeded but NOT pending if export.status == Export.SUCCESSFUL \ or export.status == Export.FAILED: status['complete'] = True statuses.append(status)
def export_progress(request, username, id_string, export_type): owner = get_object_or_404(User, username__iexact=username) xform = get_object_or_404(XForm, id_string__exact=id_string, user=owner) if not has_permission(xform, owner, request): return HttpResponseForbidden(_(u'Not shared.')) # find the export entry in the db export_ids = request.GET.getlist('export_ids') exports = Export.objects.filter(xform=xform, id__in=export_ids) statuses = [] for export in exports: status = { 'complete': False, 'url': None, 'filename': None, 'export_id': export.id } if export.status == Export.SUCCESSFUL: status['url'] = reverse(export_download, kwargs={ 'username': owner.username, 'id_string': xform.id_string, 'export_type': export.export_type, 'filename': export.filename }) status['filename'] = export.filename if export.export_type == Export.GDOC_EXPORT and \ export.export_url is None: redirect_url = reverse( export_progress, kwargs={ 'username': username, 'id_string': id_string, 'export_type': export_type}) token = _get_google_token(request, redirect_url) if isinstance(token, HttpResponse): return token status['url'] = None try: url = google_export_xls( export.full_filepath, xform.title, token, blob=True) except Exception, e: status['error'] = True status['message'] = e.message else: export.export_url = url export.save() status['url'] = url if export.export_type == Export.EXTERNAL_EXPORT \ and export.export_url is None: status['url'] = url # mark as complete if it either failed or succeeded but NOT pending if export.status == Export.SUCCESSFUL \ or export.status == Export.FAILED: status['complete'] = True statuses.append(status)
def google_xls_export(request, username, id_string): token = None if request.user.is_authenticated(): try: ts = TokenStorageModel.objects.get(id=request.user) except TokenStorageModel.DoesNotExist: pass else: token = ts.token elif request.session.get('access_token'): token = request.session.get('access_token') if token is None: request.session["google_redirect_url"] = reverse(google_xls_export, kwargs={ 'username': username, 'id_string': id_string }) return HttpResponseRedirect(redirect_uri) owner = get_object_or_404(User, username__iexact=username) xform = get_object_or_404(XForm, id_string__exact=id_string, user=owner) if not has_permission(xform, owner, request): return HttpResponseForbidden(_(u'Not shared.')) valid, dd = dd_for_params(id_string, owner, request) if not valid: return dd ddw = XlsWriter() tmp = NamedTemporaryFile(delete=False) ddw.set_file(tmp) ddw.set_data_dictionary(dd) temp_file = ddw.save_workbook_to_file() temp_file.close() url = google_export_xls(tmp.name, xform.title, token, blob=True) os.unlink(tmp.name) audit = {"xform": xform.id_string, "export_type": "google"} audit_log( Actions.EXPORT_CREATED, request.user, owner, _("Created Google Docs export on '%(id_string)s'.") % { 'id_string': xform.id_string, }, audit, request) return HttpResponseRedirect(url)
def google_xls_export(request, username, id_string): token = None if request.user.is_authenticated(): try: ts = TokenStorageModel.objects.get(id=request.user) except TokenStorageModel.DoesNotExist: pass else: token = ts.token elif request.session.get('access_token'): token = request.session.get('access_token') if token is None: request.session["google_redirect_url"] = reverse( google_xls_export, kwargs={'username': username, 'id_string': id_string}) return HttpResponseRedirect(redirect_uri) owner = get_object_or_404(User, username__iexact=username) xform = get_object_or_404(XForm, id_string__exact=id_string, user=owner) if not has_permission(xform, owner, request): return HttpResponseForbidden(_(u'Not shared.')) valid, dd = dd_for_params(id_string, owner, request) if not valid: return dd ddw = XlsWriter() tmp = NamedTemporaryFile(delete=False) ddw.set_file(tmp) ddw.set_data_dictionary(dd) temp_file = ddw.save_workbook_to_file() temp_file.close() url = google_export_xls(tmp.name, xform.title, token, blob=True) os.unlink(tmp.name) audit = { "xform": xform.id_string, "export_type": "google" } audit_log( Actions.EXPORT_CREATED, request.user, owner, _("Created Google Docs export on '%(id_string)s'.") % { 'id_string': xform.id_string, }, audit, request) return HttpResponseRedirect(url)