blob: 841dec8342d37162c17fdd1ee53d60365c8858a7 [file] [log] [blame]
Dirk Vogtc9e10ab2016-10-12 13:58:15 +02001from rest_framework import generics
Dirk Vogte1784882016-10-13 16:09:38 +02002from django.shortcuts import get_object_or_404
Dirk Vogtc9e10ab2016-10-12 13:58:15 +02003from crashreports.models import HeartBeat
4from crashreports.serializers import HeartBeatSerializer
5from crashreports.permissions import HasRightsOrIsDeviceOwnerDeviceCreation
6
Dirk Vogte1784882016-10-13 16:09:38 +02007# TODO: There is quite some code duplciation between here and the corresponding
8# crashreport code. We should revisit this later.
Dirk Vogtc9e10ab2016-10-12 13:58:15 +02009
Dirk Vogte1784882016-10-13 16:09:38 +020010
11class ListCreateView(generics.ListCreateAPIView):
Dirk Vogtc9e10ab2016-10-12 13:58:15 +020012 queryset = HeartBeat.objects.all()
13 paginate_by = 20
14 permission_classes = (HasRightsOrIsDeviceOwnerDeviceCreation, )
15 serializer_class = HeartBeatSerializer
Borjan Tchakaloff6f239a62018-02-19 09:05:50 +010016 filter_fields = ('device', 'build_fingerprint', 'radio_version')
Dirk Vogt83107df2017-05-02 12:04:19 +020017
Dirk Vogte1784882016-10-13 16:09:38 +020018
19 def get(self, *args, **kwargs):
20 if 'uuid' in kwargs:
21 self.queryset = HeartBeat.objects.filter(
22 device__uuid=kwargs['uuid'])
23 return generics.ListCreateAPIView.get(self, *args, **kwargs)
24
25
26class RetrieveUpdateDestroyView(generics.RetrieveUpdateDestroyAPIView):
27 queryset = HeartBeat.objects.all()
28 permission_classes = (HasRightsOrIsDeviceOwnerDeviceCreation, )
29 serializer_class = HeartBeatSerializer
Dirk Vogt0d9d5d22016-10-13 16:17:57 +020030 multiple_lookup_fields = {'id', 'device__uuid', 'device_local_id'}
Dirk Vogte1784882016-10-13 16:09:38 +020031
32 def get_object(self):
33 queryset = self.get_queryset()
34 filter = {}
35 for field in self.multiple_lookup_fields:
36 if field in self.kwargs:
37 filter[field] = self.kwargs[field]
38 obj = get_object_or_404(queryset, **filter)
39 self.check_object_permissions(self.request, obj)
40 return obj