Beispiel #1
0
        def render_to_response(self, context, **response_kwargs):
            if self.csv:
                response = HttpResponse(content_type='text/csv', status=200)
                response['Content-Disposition'] = 'attachment; filename="responses.csv"'
                writer = unicodecsv.writer(response)

                questions = self.derive_questions().values()

                resp_headers = ['Date']
                contact_headers = ['Name', 'URN', 'Region', 'Group']
                question_headers = [q.name for q in questions]
                writer.writerow(resp_headers + contact_headers + question_headers)

                for resp in context['object_list']:
                    resp_cols = [format_datetime(resp.updated_on)]
                    contact_cols = [
                        resp.contact.name, resp.contact.urn,
                        resp.contact.region, resp.contact.group]
                    answer_cols = []

                    answers_by_question_id = {a.question_id: a for a in resp.answers.all()}
                    for question in questions:
                        answer = answers_by_question_id.get(question.pk, None)
                        answer_cols.append(answer.value if answer else '')

                    writer.writerow(resp_cols + contact_cols + answer_cols)

                return response
            return super(ResponseCRUDL.ByPollrun, self).render_to_response(
                context, **response_kwargs)
Beispiel #2
0
        def render_to_response(self, context, **response_kwargs):
            _format = self.request.POST.get("_format", self.request.GET.get("_format", None))

            if _format == "csv":
                response = HttpResponse(content_type="text/csv", status=200)
                response["Content-Disposition"] = 'attachment; filename="responses.csv"'
                writer = unicodecsv.writer(response)

                questions = self.derive_questions().values()

                resp_headers = ["Date"]
                contact_headers = ["Name", "URN", "Region", "Group"]
                question_headers = [q.text for q in questions]
                writer.writerow(resp_headers + contact_headers + question_headers)

                for resp in context["object_list"]:
                    resp_cols = [format_datetime(resp.updated_on)]
                    contact_cols = [resp.contact.name, resp.contact.urn, resp.contact.region, resp.contact.group]
                    answer_cols = []

                    answers_by_question_id = {a.question_id: a for a in resp.answers.all()}
                    for question in questions:
                        answer = answers_by_question_id.get(question.pk, None)
                        answer_cols.append(answer.value if answer else "")

                    writer.writerow(resp_cols + contact_cols + answer_cols)

                return response
            else:
                return super(ResponseCRUDL.ByPollrun, self).render_to_response(context, **response_kwargs)
Beispiel #3
0
 def get_last_flow_run_fetch(self, obj):
     result = obj.get_task_result(constants.TaskType.fetch_runs)
     if result:
         return "%s (%d fetched)" % (format_datetime(
             ms_to_datetime(result['time'])), result.get(
                 'counts', {}).get('fetched', 0))
     else:
         return None
Beispiel #4
0
 def get_last_contact_sync(self, obj):
     result = obj.get_task_result(TaskType.sync_contacts)
     if result:
         return "%s (%d created, %d updated, %d deleted, %d failed)" % (
             format_datetime(ms_to_datetime(result['time'])),
             result['counts']['created'], result['counts']['updated'],
             result['counts']['deleted'], result['counts']['failed'])
     else:
         return None
Beispiel #5
0
 def get_last_flow_run_fetch(self, obj):
     result = obj.get_task_result(constants.TaskType.fetch_runs)
     if result:
         return "%s (%d fetched)" % (
             format_datetime(ms_to_datetime(result['time'])),
             result.get('counts', {}).get('fetched', 0)
         )
     else:
         return None
Beispiel #6
0
 def get_last_label_task(self, obj):
     result = obj.get_task_result(TaskType.label_messages)
     if result:
         when = format_datetime(ms_to_datetime(result['time']))
         num_messages = int(result['counts'].get('messages', 0))
         num_labelled = int(result['counts'].get('labelled', 0))
         return "%s (%d new messages, %d labelled)" % (when, num_messages, num_labelled)
     else:
         return None
Beispiel #7
0
 def get_last_contact_sync(self, obj):
     result = obj.get_task_result(TaskType.sync_contacts)
     if result:
         return "%s (%d created, %d updated, %d deleted, %d failed)" % (format_datetime(ms_to_datetime(result['time'])),
                                                                        result['counts']['created'],
                                                                        result['counts']['updated'],
                                                                        result['counts']['deleted'],
                                                                        result['counts']['failed'])
     else:
         return None
Beispiel #8
0
 def get_last_label_task(self, obj):
     result = obj.get_task_result(TaskType.label_messages)
     if result:
         when = format_datetime(ms_to_datetime(result['time']))
         num_messages = int(result['counts'].get('messages', 0))
         num_labelled = int(result['counts'].get('labelled', 0))
         return "%s (%d new messages, %d labelled)" % (
             when, num_messages, num_labelled)
     else:
         return None
Beispiel #9
0
        def render_to_response(self, context, **response_kwargs):
            if self.csv:
                response = HttpResponse(content_type='text/csv', status=200)
                response[
                    'Content-Disposition'] = 'attachment; filename="responses.csv"'
                writer = unicodecsv.writer(response)

                questions = self.derive_questions().values()

                resp_headers = ['Date']
                contact_headers = ['Name', 'URN', 'Region', 'Group']
                question_headers = [q.name for q in questions]
                writer.writerow(resp_headers + contact_headers +
                                question_headers)

                for resp in context['object_list']:
                    resp_cols = [format_datetime(resp.updated_on)]
                    contact_cols = [
                        resp.contact.name, resp.contact.urn,
                        resp.contact.region, resp.contact.group
                    ]
                    answer_cols = []

                    answers_by_question_id = {
                        a.question_id: a
                        for a in resp.answers.all()
                    }
                    for question in questions:
                        answer = answers_by_question_id.get(question.pk, None)
                        answer_cols.append(answer.value if answer else '')

                    writer.writerow(resp_cols + contact_cols + answer_cols)

                return response
            return super(ResponseCRUDL.ByPollrun,
                         self).render_to_response(context, **response_kwargs)
Beispiel #10
0
 def get_last_flow_run_fetch(self, obj):
     result = obj.get_task_result(TaskType.fetch_runs)
     if result:
         return format_datetime(ms_to_datetime(result['time']))
     else:
         return None