Exemple #1
0
def edit_custom_export(req, domain, export_id):
    """
    Customize an export
    """
    try:
        helper = CustomExportHelper.make(req, domain, export_id)
    except ResourceNotFound:
        raise Http404()
    if req.method == "POST":
        helper.update_custom_export()
        messages.success(req, "Custom export saved!")
        return _redirect_to_export_home(helper.export_type, domain, ajax=True)
    else:
        return helper.get_response()
Exemple #2
0
def edit_custom_export(req, domain, export_id):
    """
    Customize an export
    """
    try:
        helper = CustomExportHelper.make(req, domain, export_id)
    except ResourceNotFound:
        raise Http404()
    if req.method == "POST":
        helper.update_custom_export()
        messages.success(req, "Custom export saved!")
        return _redirect_to_export_home(helper.export_type, domain, ajax=True)
    else:
        return helper.get_response()
Exemple #3
0
def custom_export(req, domain):
    """
    Customize an export
    """
    try:
        export_tag = [
            domain,
            json.loads(req.GET.get("export_tag", "null") or "null")
        ]
    except ValueError:
        return HttpResponseBadRequest()

    helper = CustomExportHelper.make(req, domain)

    if req.method == "POST":
        helper.update_custom_export()
        messages.success(
            req, "Custom export created! You can continue editing here.")
        return _redirect_to_export_home(helper.export_type, domain, ajax=True)

    schema = build_latest_schema(export_tag)

    if schema:
        app_id = req.GET.get('app_id')
        helper.custom_export = helper.ExportSchemaClass.default(
            schema=schema,
            name="%s: %s" %
            (xmlns_to_name(domain, export_tag[1], app_id=app_id)
             if helper.export_type == "form" else export_tag[1],
             datetime.utcnow().strftime("%Y-%m-%d")),
            type=helper.export_type)

        if helper.export_type == 'form':
            helper.custom_export.app_id = app_id
        return helper.get_response()
    else:
        messages.warning(req, "<strong>No data found for that form "
                      "(%s).</strong> Submit some data before creating an export!" % \
                      xmlns_to_name(domain, export_tag[1], app_id=None), extra_tags="html")
        return HttpResponseRedirect(
            export.ExcelExportReport.get_url(domain=domain))
Exemple #4
0
def custom_export(req, domain):
    """
    Customize an export
    """
    try:
        export_tag = [domain, json.loads(req.GET.get("export_tag", "null") or "null")]
    except ValueError:
        return HttpResponseBadRequest()

    helper = CustomExportHelper.make(req, domain)

    if req.method == "POST":
        helper.update_custom_export()
        messages.success(req, _("Custom export created!"))
        return _redirect_to_export_home(helper.export_type, domain, ajax=True)

    schema = build_latest_schema(export_tag)

    if schema:
        app_id = req.GET.get('app_id')
        helper.custom_export = helper.ExportSchemaClass.default(
            schema=schema,
            name="%s: %s" % (
                xmlns_to_name(domain, export_tag[1], app_id=app_id) if helper.export_type == "form" else export_tag[1],
                datetime.utcnow().strftime("%Y-%m-%d")
            ),
            type=helper.export_type
        )

        if helper.export_type == 'form':
            helper.custom_export.app_id = app_id
        return helper.get_response()
    else:
        messages.warning(req, "<strong>No data found for that form "
                      "(%s).</strong> Submit some data before creating an export!" % \
                      xmlns_to_name(domain, export_tag[1], app_id=None), extra_tags="html")
        return HttpResponseRedirect(export.ExcelExportReport.get_url(domain=domain))
Exemple #5
0
def _export_default_or_custom_data(request,
                                   domain,
                                   export_id=None,
                                   bulk_export=False,
                                   safe_only=False):
    async = request.GET.get('async') == 'true'
    next = request.GET.get("next", "")
    format = request.GET.get("format", "")
    export_type = request.GET.get("type", "form")
    previous_export_id = request.GET.get("previous_export", None)
    filename = request.GET.get("filename", None)
    max_column_size = int(request.GET.get("max_column_size", 2000))

    filter = util.create_export_filter(request,
                                       domain,
                                       export_type=export_type)
    if bulk_export:
        try:
            is_custom = json.loads(request.GET.get("is_custom", "false"))
            export_tags = json.loads(
                request.GET.get("export_tags", "null") or "null")
        except ValueError:
            return HttpResponseBadRequest()

        export_helper = (CustomBulkExportHelper if is_custom else
                         ApplicationBulkExportHelper)(domain=domain,
                                                      safe_only=safe_only)

        return export_helper.prepare_export(export_tags, filter)

    elif export_id:
        # this is a custom export
        try:
            export_object = CustomExportHelper.make(request, domain,
                                                    export_id).custom_export
            if safe_only and not export_object.is_safe:
                return HttpResponseForbidden()
        except ResourceNotFound:
            raise Http404()
    elif safe_only:
        return HttpResponseForbidden()
    else:
        if not async:
            # this function doesn't support synchronous export without a custom export object
            # if we ever want that (i.e. for HTML Preview) then we just need to give
            # FakeSavedExportSchema a download_data function (called below)
            return HttpResponseBadRequest()
        try:
            export_tag = json.loads(
                request.GET.get("export_tag", "null") or "null")
        except ValueError:
            return HttpResponseBadRequest()
        assert (export_tag[0] == domain)
        export_object = FakeSavedExportSchema(index=export_tag)

    if not filename:
        filename = export_object.name
    filename += ' ' + date.today().isoformat()

    if async:
        return export_object.export_data_async(
            filter=filter,
            filename=filename,
            previous_export_id=previous_export_id,
            format=format,
            max_column_size=max_column_size,
        )
    else:
        if not next:
            next = export.ExcelExportReport.get_url(domain=domain)
        resp = export_object.download_data(format, filter=filter)
        if resp:
            return resp
        else:
            messages.error(
                request, "Sorry, there was no data found for the tag '%s'." %
                export_object.name)
            return HttpResponseRedirect(next)
Exemple #6
0
def _export_default_or_custom_data(request, domain, export_id=None, bulk_export=False, safe_only=False):
    async = request.GET.get('async') == 'true'
    next = request.GET.get("next", "")
    format = request.GET.get("format", "")
    export_type = request.GET.get("type", "form")
    previous_export_id = request.GET.get("previous_export", None)
    filename = request.GET.get("filename", None)
    max_column_size = int(request.GET.get("max_column_size", 2000))

    filter = util.create_export_filter(request, domain, export_type=export_type)
    if bulk_export:
        try:
            is_custom = json.loads(request.GET.get("is_custom", "false"))
            export_tags = json.loads(request.GET.get("export_tags", "null") or "null")
        except ValueError:
            return HttpResponseBadRequest()


        export_helper = (CustomBulkExportHelper if is_custom else ApplicationBulkExportHelper)(
            domain=domain,
            safe_only=safe_only
        )

        return export_helper.prepare_export(export_tags, filter)

    elif export_id:
        # this is a custom export
        try:
            export_object = CustomExportHelper.make(request, domain, export_id).custom_export
            if safe_only and not export_object.is_safe:
                return HttpResponseForbidden()
        except ResourceNotFound:
            raise Http404()
    elif safe_only:
        return HttpResponseForbidden()
    else:
        if not async:
            # this function doesn't support synchronous export without a custom export object
            # if we ever want that (i.e. for HTML Preview) then we just need to give
            # FakeSavedExportSchema a download_data function (called below)
            return HttpResponseBadRequest()
        try:
            export_tag = json.loads(request.GET.get("export_tag", "null") or "null")
        except ValueError:
            return HttpResponseBadRequest()
        assert(export_tag[0] == domain)
        export_object = FakeSavedExportSchema(index=export_tag)

    if not filename:
        filename = export_object.name
    filename += ' ' + date.today().isoformat()

    if async:
        return export_object.export_data_async(
            filter=filter,
            filename=filename,
            previous_export_id=previous_export_id,
            format=format,
            max_column_size=max_column_size,
        )
    else:
        if not next:
            next = export.ExcelExportReport.get_url(domain=domain)
        resp = export_object.download_data(format, filter=filter)
        if resp:
            return resp
        else:
            messages.error(request, "Sorry, there was no data found for the tag '%s'." % export_object.name)
            return HttpResponseRedirect(next)