From ef9bc9b7dd25c2476a2caff6cccc5fdda2824283 Mon Sep 17 00:00:00 2001 From: "Chris J. Karr" Date: Thu, 9 Feb 2017 21:38:20 +0000 Subject: [PATCH] Code cleanup and extracting generator ID --- admin.py | 16 +++++++++------- management/commands/process_bundles.py | 21 +++++++++++++-------- views.py | 14 +++++++++----- 3 files changed, 31 insertions(+), 20 deletions(-) diff --git a/admin.py b/admin.py index c64e48a..7deda7d 100644 --- a/admin.py +++ b/admin.py @@ -1,33 +1,35 @@ -from django.contrib import admin +from django.contrib.gis import admin from .models import DataPoint, DataBundle, DataSource, DataSourceGroup, \ DataPointVisualizations, ReportJob @admin.register(DataPointVisualizations) -class DataPointVisualizationsAdmin(admin.ModelAdmin): +class DataPointVisualizationsAdmin(admin.OSMGeoAdmin): list_display = ('source', 'generator_identifier', 'last_updated',) list_filter = ('source', 'generator_identifier', 'last_updated',) @admin.register(DataPoint) -class DataPointAdmin(admin.ModelAdmin): +class DataPointAdmin(admin.OSMGeoAdmin): + openlayers_url = 'https://openlayers.org/api/2.13.1/OpenLayers.js' + list_display = ('source', 'generator_identifier', 'created', 'recorded',) list_filter = ('created', 'recorded', 'generator_identifier',) @admin.register(DataBundle) -class DataBundleAdmin(admin.ModelAdmin): +class DataBundleAdmin(admin.OSMGeoAdmin): list_display = ('recorded', 'processed',) list_filter = ('processed', 'recorded',) @admin.register(DataSourceGroup) -class DataBundleAdmin(admin.ModelAdmin): +class DataSourceGroupAdmin(admin.OSMGeoAdmin): list_display = ('name',) @admin.register(DataSource) -class DataBundleAdmin(admin.ModelAdmin): +class DataSourceAdmin(admin.OSMGeoAdmin): list_display = ('name', 'identifier', 'group') list_filter = ('group',) @admin.register(ReportJob) -class ReportJobAdmin(admin.ModelAdmin): +class ReportJobAdmin(admin.OSMGeoAdmin): list_display = ('requester', 'requested', 'started', 'completed') list_filter = ('requested', 'started', 'completed',) diff --git a/management/commands/process_bundles.py b/management/commands/process_bundles.py index 9efbeea..79023b1 100644 --- a/management/commands/process_bundles.py +++ b/management/commands/process_bundles.py @@ -1,5 +1,6 @@ import datetime +from django.contrib.gis.geos import * from django.core.management.base import BaseCommand, CommandError from django.utils import timezone @@ -28,16 +29,20 @@ def handle(self, *args, **options): for bundle in DataBundle.objects.filter(processed=False)[:options['bundle_count']]: for bundle_point in bundle.properties: - point = DataPoint(recorded=timezone.now()) - point.source = bundle_point['passive-data-metadata']['source'] - point.generator = bundle_point['passive-data-metadata']['generator'] + if 'passive-data-metadata' in bundle_point: + point = DataPoint(recorded=timezone.now()) + point.source = bundle_point['passive-data-metadata']['source'] + point.generator = bundle_point['passive-data-metadata']['generator'] - if 'generator-id' in bundle_point['passive-data-metadata']: - point.generator_identifier = bundle_point['passive-data-metadata']['generator-id'] + if 'generator-id' in bundle_point['passive-data-metadata']: + point.generator_identifier = bundle_point['passive-data-metadata']['generator-id'] + + if 'latitude' in bundle_point['passive-data-metadata'] and 'longitude' in bundle_point['passive-data-metadata']: + point.generated_at = GEOSGeometry('POINT(' + str(bundle_point['passive-data-metadata']['longitude']) + ' ' + str(bundle_point['passive-data-metadata']['latitude']) + ')') - point.created = datetime.datetime.fromtimestamp(bundle_point['passive-data-metadata']['timestamp'], tz=timezone.get_default_timezone()) - point.properties = bundle_point - point.save() + point.created = datetime.datetime.fromtimestamp(bundle_point['passive-data-metadata']['timestamp'], tz=timezone.get_default_timezone()) + point.properties = bundle_point + point.save() bundle.processed = True bundle.save() diff --git a/views.py b/views.py index 5379320..cb575a3 100644 --- a/views.py +++ b/views.py @@ -90,12 +90,16 @@ def add_data_bundle(request): response['Access-Control-Allow-Methods'] = 'CREATE, POST' response['Access-Control-Request-Headers'] = 'Content-Type' response['Access-Control-Allow-Headers'] = 'Content-Type' - - points = json.loads(request.POST['payload']) + + try: + points = json.loads(request.POST['payload']) - bundle = DataBundle(recorded=timezone.now()) - bundle.properties = points - bundle.save() + bundle = DataBundle(recorded=timezone.now()) + bundle.properties = points + bundle.save() + except ValueError: + response = { 'message': 'Unable to parse data bundle.' } + response = HttpResponse(json.dumps(response, indent=2), content_type='application/json', status=201) return response elif request.method == 'OPTIONS':