2019-03-07 12:41:22 -07:00
|
|
|
from django.core.exceptions import ObjectDoesNotExist
|
2017-08-12 09:25:53 -06:00
|
|
|
from django.shortcuts import get_object_or_404
|
|
|
|
from django.utils.timezone import now
|
2015-02-14 14:47:31 -07:00
|
|
|
|
2017-08-12 09:25:53 -06:00
|
|
|
from rest_framework import viewsets, mixins, status
|
2015-09-09 02:12:36 -06:00
|
|
|
from rest_framework.response import Response
|
2014-10-15 13:20:46 -06:00
|
|
|
|
2015-06-21 18:44:25 -06:00
|
|
|
from network.api.perms import StationOwnerCanEditPermission
|
2017-09-17 07:48:21 -06:00
|
|
|
from network.api import serializers, filters, pagination
|
2018-12-02 07:44:00 -07:00
|
|
|
from network.base.models import Observation, Station, Transmitter
|
2014-10-15 13:20:46 -06:00
|
|
|
|
|
|
|
|
2019-04-21 11:48:35 -06:00
|
|
|
class ObservationView(mixins.ListModelMixin, mixins.RetrieveModelMixin,
|
|
|
|
mixins.UpdateModelMixin, viewsets.GenericViewSet):
|
2017-09-11 04:33:49 -06:00
|
|
|
queryset = Observation.objects.all()
|
|
|
|
serializer_class = serializers.ObservationSerializer
|
|
|
|
filter_class = filters.ObservationViewFilter
|
2014-12-13 10:49:15 -07:00
|
|
|
permission_classes = [
|
|
|
|
StationOwnerCanEditPermission
|
|
|
|
]
|
2017-09-17 07:48:21 -06:00
|
|
|
pagination_class = pagination.LinkedHeaderPageNumberPagination
|
2015-02-14 07:15:26 -07:00
|
|
|
|
2017-08-12 09:25:53 -06:00
|
|
|
def update(self, request, *args, **kwargs):
|
2019-03-07 12:41:22 -07:00
|
|
|
instance = self.get_object()
|
2018-10-01 06:24:48 -06:00
|
|
|
if request.data.get('client_version'):
|
|
|
|
instance.ground_station.client_version = request.data.get('client_version')
|
|
|
|
instance.ground_station.save()
|
2017-08-12 09:25:53 -06:00
|
|
|
if request.data.get('demoddata'):
|
2019-03-07 12:41:22 -07:00
|
|
|
try:
|
|
|
|
file_path = 'data_obs/{0}/{1}'.format(instance.id, request.data.get('demoddata'))
|
|
|
|
instance.demoddata.get(payload_demod=file_path)
|
|
|
|
return Response(data='This data file has already been uploaded',
|
|
|
|
status=status.HTTP_403_FORBIDDEN)
|
|
|
|
except ObjectDoesNotExist:
|
|
|
|
instance.demoddata.create(payload_demod=request.data.get('demoddata'))
|
|
|
|
if request.data.get('waterfall'):
|
|
|
|
if instance.has_waterfall:
|
|
|
|
return Response(data='Watefall has already been uploaded',
|
|
|
|
status=status.HTTP_403_FORBIDDEN)
|
|
|
|
if request.data.get('payload'):
|
|
|
|
if instance.has_audio:
|
|
|
|
return Response(data='Audio has already been uploaded',
|
|
|
|
status=status.HTTP_403_FORBIDDEN)
|
2017-08-12 09:25:53 -06:00
|
|
|
|
2017-09-11 04:33:49 -06:00
|
|
|
super(ObservationView, self).update(request, *args, **kwargs)
|
2017-08-12 09:25:53 -06:00
|
|
|
return Response(status=status.HTTP_200_OK)
|
|
|
|
|
2015-02-14 12:58:11 -07:00
|
|
|
|
2019-04-21 11:48:35 -06:00
|
|
|
class StationView(mixins.ListModelMixin, mixins.RetrieveModelMixin, viewsets.GenericViewSet):
|
2018-04-01 05:52:20 -06:00
|
|
|
queryset = Station.objects.all()
|
|
|
|
serializer_class = serializers.StationSerializer
|
2018-12-01 12:39:18 -07:00
|
|
|
filter_class = filters.StationViewFilter
|
2018-04-01 05:52:20 -06:00
|
|
|
pagination_class = pagination.LinkedHeaderPageNumberPagination
|
|
|
|
|
|
|
|
|
2019-04-21 11:48:35 -06:00
|
|
|
class TransmitterView(mixins.ListModelMixin, mixins.RetrieveModelMixin, viewsets.GenericViewSet):
|
2018-12-02 07:44:00 -07:00
|
|
|
queryset = Transmitter.objects.all().order_by('uuid')
|
|
|
|
serializer_class = serializers.TransmitterSerializer
|
|
|
|
filter_class = filters.TransmitterViewFilter
|
|
|
|
pagination_class = pagination.LinkedHeaderPageNumberPagination
|
|
|
|
|
|
|
|
|
2015-02-14 12:58:11 -07:00
|
|
|
class JobView(viewsets.ReadOnlyModelViewSet):
|
2017-09-11 04:33:49 -06:00
|
|
|
queryset = Observation.objects.filter(payload='')
|
2015-02-14 12:58:11 -07:00
|
|
|
serializer_class = serializers.JobSerializer
|
2017-09-11 04:33:49 -06:00
|
|
|
filter_class = filters.ObservationViewFilter
|
2015-02-14 12:58:11 -07:00
|
|
|
filter_fields = ('ground_station')
|
2015-02-14 14:47:31 -07:00
|
|
|
|
|
|
|
def get_queryset(self):
|
2015-06-21 18:44:25 -06:00
|
|
|
queryset = self.queryset.filter(start__gte=now())
|
2016-01-22 10:47:27 -07:00
|
|
|
gs_id = self.request.query_params.get('ground_station', None)
|
2015-06-21 18:44:25 -06:00
|
|
|
if gs_id and self.request.user.is_authenticated():
|
|
|
|
gs = get_object_or_404(Station, id=gs_id)
|
|
|
|
if gs.owner == self.request.user:
|
2019-02-01 18:15:46 -07:00
|
|
|
lat = self.request.query_params.get('lat', None)
|
|
|
|
lon = self.request.query_params.get('lon', None)
|
|
|
|
alt = self.request.query_params.get('alt', None)
|
|
|
|
if not (lat is None or lon is None or alt is None):
|
|
|
|
gs.lat = float(lat)
|
|
|
|
gs.lng = float(lon)
|
|
|
|
gs.alt = int(alt)
|
2015-06-21 18:44:25 -06:00
|
|
|
gs.last_seen = now()
|
|
|
|
gs.save()
|
|
|
|
return queryset
|