From 10c4f2eec669d790dbfff9855abff0a5fb2f4654 Mon Sep 17 00:00:00 2001 From: sunnybansal Date: Wed, 1 Apr 2020 00:36:37 -0400 Subject: [PATCH] This commit is about adding export as json for event data --- mercury/templates/events.html | 5 +- mercury/urls.py | 3 +- mercury/views/events.py | 111 ++++++++++++++++++++++------------ 3 files changed, 80 insertions(+), 39 deletions(-) diff --git a/mercury/templates/events.html b/mercury/templates/events.html index 11a6910b..72d96865 100644 --- a/mercury/templates/events.html +++ b/mercury/templates/events.html @@ -84,7 +84,10 @@

All Events

{{ item.date }} {{ item.description }} - Export + Export CSV +

+ Export JSON +

Delete diff --git a/mercury/urls.py b/mercury/urls.py index ccd80e6e..492a1fd3 100644 --- a/mercury/urls.py +++ b/mercury/urls.py @@ -37,7 +37,8 @@ path("events/delete/", events.delete_event), path("events/update/", events.update_event), path("events/updatevenue/", events.update_venue), - path("events/export/", events.export_event), + path("events/export//csv", events.export_event), + path("events/export//json", events.export_event), path("pitcrew/", pitcrew.PitCrewView.as_view(), name="pitcrew"), path("gfconfig/", gf_config.GFConfigView.as_view(), name="gfconfig"), path( diff --git a/mercury/views/events.py b/mercury/views/events.py index 9feb0ab2..ad533b72 100644 --- a/mercury/views/events.py +++ b/mercury/views/events.py @@ -1,16 +1,17 @@ import csv import logging +from django.contrib import messages from django.http import HttpResponse -from django.shortcuts import render from django.shortcuts import redirect +from django.shortcuts import render from django.views.generic import TemplateView -from ..event_check import require_event_code -from mercury.forms import EventForm, VenueForm + from ag_data.models import AGMeasurement, AGEvent, AGVenue, AGSensor -from django.contrib import messages +from mercury.forms import EventForm, VenueForm from mercury.grafanaAPI.grafana_api import Grafana from mercury.models import GFConfig +from ..event_check import require_event_code log = logging.getLogger(__name__) log.setLevel(logging.ERROR) @@ -47,48 +48,84 @@ def delete_event(request, event_uuid=None): return redirect("/events") -def export_event(request, event_uuid=None): +def export_event(request, event_uuid=None, file_format="CSV"): event_to_export = AGEvent.objects.get(uuid=event_uuid) if event_to_export: - response = HttpResponse(content_type="text/csv") filename = event_to_export.name.replace(" ", "").lower() - response["Content-Disposition"] = 'attachment; filename="' + filename + '".csv' measurement_data = AGMeasurement.objects.filter(event_uuid=event_uuid) - if len(measurement_data) == 0: - return redirect("/events") - writer = csv.writer(response) - writer.writerow( - [ - "S.No", - "Event Name", - "Event Date", - "Event Description", - "Venue Name", - "Sensor Name", - "Sensor Data TimeStamp", - "Sensor Value", - ] - ) - i = 0 venue = AGVenue.objects.get(uuid=event_to_export.venue_uuid.uuid) - sensor = AGSensor.objects.get(id=measurement_data[0].sensor_id.id) - for measurement in measurement_data: - i += 1 - if sensor.id != measurement.sensor_id: - sensor = AGSensor.objects.get(id=measurement.sensor_id.id) + if request.path.__contains__("json"): + event_info = { + "name": event_to_export.name, + "event date": str(event_to_export.date), + "event description": event_to_export.description, + } + if venue: + event_info["venue name"] = venue.name + event_info["venue description"] = venue.description + + measurement_info = [] + if measurement_data: + sensor = AGSensor.objects.get(id=measurement_data[0].sensor_id.id) + for measurement in measurement_data: + if sensor.id != measurement.sensor_id: + sensor = AGSensor.objects.get(id=measurement.sensor_id.id) + temp = { + "sensor name": sensor.name, + "timestamp": str(measurement.timestamp), + "reading": measurement.value["reading"], + } + measurement_info.append(temp) + + data = { + "event_info": event_info, + "measurement_info": measurement_info, + } + + response = HttpResponse(str(data), content_type="application/json") + response["Content-Disposition"] = ( + 'attachment; filename="' + filename + '".json' + ) + return response + else: + response = HttpResponse(content_type="text/csv") + response["Content-Disposition"] = ( + 'attachment; filename="' + filename + '".csv' + ) + if len(measurement_data) == 0: + return redirect("/events") + writer = csv.writer(response) writer.writerow( [ - str(i), - event_to_export.name, - event_to_export.date, - event_to_export.description, - venue.name, - sensor.name, - measurement.timestamp, - measurement.value["reading"], + "S.No", + "Event Name", + "Event Date", + "Event Description", + "Venue Name", + "Sensor Name", + "Sensor Data TimeStamp", + "Sensor Value", ] ) - return response + i = 0 + sensor = AGSensor.objects.get(id=measurement_data[0].sensor_id.id) + for measurement in measurement_data: + i += 1 + if sensor.id != measurement.sensor_id: + sensor = AGSensor.objects.get(id=measurement.sensor_id.id) + writer.writerow( + [ + str(i), + event_to_export.name, + event_to_export.date, + event_to_export.description, + venue.name, + sensor.name, + measurement.timestamp, + measurement.value["reading"], + ] + ) + return response else: return redirect("/events")