Added csv export format for ship data
authorJean-Michel Nirgal Vourgère <jmv@nirgal.com>
Sun, 26 Sep 2010 22:17:38 +0000 (22:17 +0000)
committerJean-Michel Nirgal Vourgère <jmv@nirgal.com>
Sun, 26 Sep 2010 22:17:38 +0000 (22:17 +0000)
bin/djais/urls.py
bin/djais/views.py
html_templates/vessel.html

index e4329a657152a61f0d303037b858a5d78d49e31a..e9d15fcdd49e3c3c52121c946797ee6007de3333 100644 (file)
@@ -20,6 +20,7 @@ urlpatterns = patterns('',
     (r'^vessel/(?P<strmmsi>[0-9A-Z]{9})/manual_input$', 'ais.djais.views.vessel_manual_input'),
     (r'^vessel/(?P<strmmsi>[0-9A-Z]{9})/track$', 'ais.djais.views.vessel_track'),
     (r'^vessel/(?P<strmmsi>[0-9A-Z]{9})/animation$', 'ais.djais.views.vessel_animation'),
+    (r'^vessel/(?P<strmmsi>[0-9A-Z]{9})/csv$', 'ais.djais.views.vessel_csv'),
     (r'^user/$', 'ais.djais.views.users'),
     (r'^user/(?P<login>[a-zA-Z0-9_]+)/$', 'ais.djais.views.user_detail'),
     (r'^user/(?P<login>[a-zA-Z0-9_]+)/edit$', 'ais.djais.views.user_edit'),
index 8668d40598a6a7fcf2c0b919b278d608623454c3..5a537b9ee80ac184e63908bd0414c08f02c00aeb 100644 (file)
@@ -11,6 +11,8 @@ import crack
 import struct
 import operator
 import rrdtool
+import csv
+from StringIO import StringIO
 from django.http import *
 from django.template import loader, RequestContext
 from django import forms
@@ -395,6 +397,32 @@ def vessel_animation(request, strmmsi):
     return response
 
 
+@http_authenticate(auth, 'ais')
+def vessel_csv(request, strmmsi):
+    ndays = request.REQUEST.get('ndays', 90)
+    try:
+        ndays = int(ndays)
+    except ValueError:
+        ndays = 90
+    grain = request.REQUEST.get('grain', 3600)
+    try:
+        grain = int(grain)
+    except ValueError:
+        grain = 3600
+    date_end = datetime.utcnow()
+    date_start = date_end - timedelta(ndays)
+    nmea_iterator = NmeaFeeder(strmmsi, date_end, date_start, granularity=grain)
+    
+    value = StringIO()
+    output = csv.writer(value)
+    output.writerow(Nmea.csv_headers)
+    for nmea in nmea_iterator:
+        output.writerow(nmea.get_dump_row())
+    response = HttpResponse(value.getvalue(), mimetype='text/csv; charset="UTF-8"')
+    response['Content-Disposition'] = 'attachment; filename=%s.csv' % strmmsi
+    return response
+
+
 @http_authenticate(auth, 'ais')
 def fleets(request):
     fleetusers = request.user.fleetuser_set.all()
index 1d57d7b7aaf7a0c4e09c2bd5710df95d32130f15..c747c7c41255782bd3747f739716fb4185ef36da 100644 (file)
@@ -35,6 +35,7 @@ Destination: {{ nmea.get_destination }}<br>
 ETA: {{ nmea.get_eta_str }}<br>
 <br>
 Sources: position by {{ nmea.get_source_1_str }}, voyage by {{ nmea.get_source_5_str }}<br>
+
 <h2>Get historical track</h2>
 <form action='track'>
 Last <input name=ndays size=3 value=7> days <br>
@@ -48,4 +49,11 @@ Last <input name=ndays size=3 value=7> days <br>
 Definition <input name=grain size=4 value=3600> seconds<br>
 <input type=submit value=Get>
 </form>
+
+<h2>Get historical data in csv format</h2>
+<form action='csv'>
+Last <input name=ndays size=3 value=7> days <br>
+Definition <input name=grain size=4 value=3600> seconds<br>
+<input type=submit value=Get>
+</form>
 {% endblock %}