blob: 99d3e434a0dfd9b257385a03aae83260bfab4f6d [file] [log] [blame]
Dirk Vogtd1345212016-09-14 14:31:45 +02001from rest_framework import serializers
Dirk Vogt67eb1482016-10-13 12:42:56 +02002from rest_framework.utils.serializer_helpers import ReturnDict
Dirk Vogtc9e10ab2016-10-12 13:58:15 +02003
Dirk Vogtf2a33422016-10-11 17:17:26 +02004from rest_framework.exceptions import NotFound
5from crashreports.models import Crashreport
6from crashreports.models import Device
Dirk Vogtc9e10ab2016-10-12 13:58:15 +02007from crashreports.models import HeartBeat
Dirk Vogtd1345212016-09-14 14:31:45 +02008from rest_framework import permissions
Dirk Vogt67eb1482016-10-13 12:42:56 +02009from crashreports.permissions import user_is_hiccup_staff
10
11
12class PrivateField(serializers.ReadOnlyField):
13
14 def get_attribute(self, instance):
15 """
16 Given the *outgoing* object instance, return the primitive value
17 that should be used for this field.
18 """
19 if user_is_hiccup_staff(self.context['request'].user):
20 return super(PrivateField, self).get_attribute(instance)
21 return -1
Dirk Vogtd1345212016-09-14 14:31:45 +020022
Dirk Vogtf2a33422016-10-11 17:17:26 +020023
Dirk Vogtd1345212016-09-14 14:31:45 +020024class CrashReportSerializer(serializers.ModelSerializer):
Dirk Vogtf2a33422016-10-11 17:17:26 +020025 permission_classes = (permissions.AllowAny,)
26 uuid = serializers.CharField(max_length=64)
Dirk Vogt67eb1482016-10-13 12:42:56 +020027 id = PrivateField()
28 device_local_id = serializers.IntegerField(required=False)
Dirk Vogtc9e10ab2016-10-12 13:58:15 +020029
Dirk Vogtd1345212016-09-14 14:31:45 +020030 class Meta:
31 model = Crashreport
Dirk Vogtf2a33422016-10-11 17:17:26 +020032 exclude = ('device',)
33
34 def create(self, validated_data):
35 try:
36 device = Device.objects.get(uuid=validated_data['uuid'])
37 except:
38 raise NotFound(detail="uuid does not exist")
39 validated_data.pop('uuid', None)
40 report = Crashreport(**validated_data)
Dirk Vogtc9e10ab2016-10-12 13:58:15 +020041 report.device = device
Dirk Vogtf2a33422016-10-11 17:17:26 +020042 report.save()
43 return report
Dirk Vogtc9e10ab2016-10-12 13:58:15 +020044
45
46class HeartBeatSerializer(serializers.ModelSerializer):
47 permission_classes = (permissions.AllowAny,)
48 uuid = serializers.CharField(max_length=64)
Dirk Vogt67eb1482016-10-13 12:42:56 +020049 id = PrivateField()
50 device_local_id = serializers.IntegerField(required=False)
51
Dirk Vogtc9e10ab2016-10-12 13:58:15 +020052 class Meta:
53 model = HeartBeat
54 exclude = ('device',)
55
56 def create(self, validated_data):
57 try:
58 device = Device.objects.get(uuid=validated_data['uuid'])
59 except:
60 raise NotFound(detail="uuid does not exist")
61 validated_data.pop('uuid', None)
62 heartbeat = HeartBeat(**validated_data)
63 heartbeat.device = device
64 heartbeat.save()
65 return heartbeat
66
Dirk Vogtf2a33422016-10-11 17:17:26 +020067
68class DeviceSerializer(serializers.ModelSerializer):
69 permission_classes = (permissions.IsAdminUser,)
Dirk Vogtc9e10ab2016-10-12 13:58:15 +020070
Dirk Vogtf2a33422016-10-11 17:17:26 +020071 class Meta:
72 model = Device