12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758 |
- import json
- from datetime import datetime
- from django.shortcuts import render
- from django.http import JsonResponse, HttpResponse
- from django.views import View
- from django.contrib.auth.decorators import permission_required
- from django.contrib.auth.mixins import PermissionRequiredMixin
- from .models import *
- from pprint import pprint
- def index(request):
- return render(request, 'gps_logger/index.html')
- @permission_required("gps-logger.markers.change")
- def upload(request):
- return render(request, 'gps_logger/upload.html')
- class MarkerCreateView(View, PermissionRequiredMixin):
- permission_required = ("gps-logger.markers.change")
- def post(self, request):
- status_code = 204
- data = json.loads(request.body)
- for file in data:
- if len(data[file]) == 0:
- continue
- objects = [Marker(
- timestamp=datetime.strptime(x['timestamp'].replace("Z","-0000"), r"%Y-%m-%dT%H:%M:%S.%f%z"),
- lat = x['lat'],
- lng = x['lng'],
- alt = x['alt'],
- hdop = x.get('hdop', None),
- speed = x.get('speed', None)
- ) for x in data[file]]
- start_date = objects[0].timestamp
- end_date = objects[-1].timestamp
- oldMarkers = Marker.objects.filter(timestamp__range=(start_date, end_date)).all()
- identical = len(oldMarkers) == len(objects)
- if identical:
- for i, marker in enumerate(oldMarkers):
- if marker.timestamp != objects[i].timestamp:
- print(type(marker.timestamp), type(objects[i].timestamp))
- identical = False
- break
- print(len(oldMarkers), len(objects), identical)
- if not identical:
- oldMarkers.delete()
- Marker.objects.bulk_create(objects)
- status_code = 201
- return HttpResponse(status=status_code)
- class MarkerView(View):
- def get(self, request):
- return JsonResponse(list(Marker.objects.values()), safe=False)
|