blob: f2e19db54808a53152369365f0af2a3db7ec2880 [file] [log] [blame]
from rest_framework import generics
from django.shortcuts import get_object_or_404
from crashreports.models import HeartBeat
from crashreports.serializers import HeartBeatSerializer
from crashreports.permissions import HasRightsOrIsDeviceOwnerDeviceCreation
# TODO: There is quite some code duplciation between here and the corresponding
# crashreport code. We should revisit this later.
class ListCreateView(generics.ListCreateAPIView):
queryset = HeartBeat.objects.all()
paginate_by = 20
permission_classes = (HasRightsOrIsDeviceOwnerDeviceCreation,)
serializer_class = HeartBeatSerializer
filter_fields = ("device", "build_fingerprint", "radio_version")
def get(self, *args, **kwargs):
if "uuid" in kwargs:
self.queryset = HeartBeat.objects.filter(
device__uuid=kwargs["uuid"]
)
return generics.ListCreateAPIView.get(self, *args, **kwargs)
class RetrieveUpdateDestroyView(generics.RetrieveUpdateDestroyAPIView):
queryset = HeartBeat.objects.all()
permission_classes = (HasRightsOrIsDeviceOwnerDeviceCreation,)
serializer_class = HeartBeatSerializer
multiple_lookup_fields = {"id", "device__uuid", "device_local_id"}
def get_object(self):
queryset = self.get_queryset()
filter = {}
for field in self.multiple_lookup_fields:
if field in self.kwargs:
filter[field] = self.kwargs[field]
obj = get_object_or_404(queryset, **filter)
self.check_object_permissions(self.request, obj)
return obj