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)