Exemple #1
0
    def post(self, request, namespace=None, report_slug=None):
        if namespace is None or report_slug is None:
            return self.http_method_not_allowed(request)

        logger.debug("**")
        logger.debug("**")
        logger.debug("** REPORT - %s" % report_slug)
        logger.debug("**")
        logger.debug("**")
        logger.debug("Received POST for report %s, with params: %s" %
                     (report_slug, request.POST))

        report = get_object_or_404(Report, namespace=namespace,
                                   slug=report_slug)

        fields_by_section = report.collect_fields_by_section()
        all_fields = OrderedDict()
        [all_fields.update(c) for c in fields_by_section.values()]
        form = TableFieldForm(all_fields, hidden_fields=report.hidden_fields,
                              data=request.POST, files=request.FILES)

        if form.is_valid():
            logger.debug('Form passed validation: %s' % form)
            formdata = form.cleaned_data
            logger.debug('Form cleaned data: %s' % formdata)

            # parse time and localize to user profile timezone
            timezone = get_timezone(request)
            form.apply_timezone(timezone)

            if formdata['debug']:
                logger.debug("Debugging report and rotating logs now ...")
                management.call_command('rotate_logs')

            logger.debug("Report %s validated form: %s" %
                         (report_slug, formdata))

            # construct report definition
            now = datetime.datetime.now(timezone)
            widgets = report.widget_definitions(form.as_text())

            report_def = self.report_def(widgets, now, formdata['debug'])

            logger.debug("Sending widget definitions for report %s: %s" %
                         (report_slug, report_def))

            if settings.REPORT_HISTORY_ENABLED:
                create_report_history(request, report, widgets)

            return JsonResponse(report_def, safe=False)
        else:
            # return form with errors attached in a HTTP 400 Error response
            return HttpResponse(str(form.errors), status=400)