blob: f2e19db54808a53152369365f0af2a3db7ec2880 [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
Mitja Nikolauscb50f2c2018-08-24 13:54:48 +020014 permission_classes = (HasRightsOrIsDeviceOwnerDeviceCreation,)
Dirk Vogtc9e10ab2016-10-12 13:58:15 +020015 serializer_class = HeartBeatSerializer
Mitja Nikolauscb50f2c2018-08-24 13:54:48 +020016 filter_fields = ("device", "build_fingerprint", "radio_version")
Dirk Vogte1784882016-10-13 16:09:38 +020017
18 def get(self, *args, **kwargs):
Mitja Nikolauscb50f2c2018-08-24 13:54:48 +020019 if "uuid" in kwargs:
Dirk Vogte1784882016-10-13 16:09:38 +020020 self.queryset = HeartBeat.objects.filter(
Mitja Nikolauscb50f2c2018-08-24 13:54:48 +020021 device__uuid=kwargs["uuid"]
22 )
Dirk Vogte1784882016-10-13 16:09:38 +020023 return generics.ListCreateAPIView.get(self, *args, **kwargs)
24
25
26class RetrieveUpdateDestroyView(generics.RetrieveUpdateDestroyAPIView):
27 queryset = HeartBeat.objects.all()
Mitja Nikolauscb50f2c2018-08-24 13:54:48 +020028 permission_classes = (HasRightsOrIsDeviceOwnerDeviceCreation,)
Dirk Vogte1784882016-10-13 16:09:38 +020029 serializer_class = HeartBeatSerializer
Mitja Nikolauscb50f2c2018-08-24 13:54:48 +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