Factor REST handlers to prepare for radio versions
And apply the pythonic style to what was updated.
Issue: HIC-141
Change-Id: I97ed66a6327aff726db3dcda60df9d951d39c6f7
diff --git a/crashreport_stats/rest_endpoints.py b/crashreport_stats/rest_endpoints.py
index 53867cf..4a84aa1 100644
--- a/crashreport_stats/rest_endpoints.py
+++ b/crashreport_stats/rest_endpoints.py
@@ -91,47 +91,75 @@
fo = zf.open(f)
ret[f.filename] = fo.read()
return Response(ret)
-
-class VersionFilter(filters.FilterSet):
+
+class _VersionStatsFilter(filters.FilterSet):
first_seen_before = django_filters.DateFilter(name="first_seen_on", lookup_expr='lte')
- first_seen_after = django_filters.DateFilter(name="first_seen_on", lookup_expr='gte')
+ first_seen_after = django_filters.DateFilter(name="first_seen_on", lookup_expr='gte')
released_before = django_filters.DateFilter(name="released_on", lookup_expr='lte')
- released_after = django_filters.DateFilter(name="released_on", lookup_expr='gte')
- class Meta:
- model = Version
+ released_after = django_filters.DateFilter(name="released_on", lookup_expr='gte')
-class VersionSerializer(serializers.ModelSerializer):
- permission_classes = (HasRightsOrIsDeviceOwnerDeviceCreation, )
- class Meta:
- model = Version
+class _VersionStatsSerializer(serializers.ModelSerializer):
+ permission_classes = (HasRightsOrIsDeviceOwnerDeviceCreation,)
-class VersionListView(generics.ListAPIView):
- queryset = Version.objects.all().order_by('-heartbeats')
- permission_classes = (HasRightsOrIsDeviceOwnerDeviceCreation, )
- serializer_class = VersionSerializer
+class _VersionStatsListView(generics.ListAPIView):
+ permission_classes = (HasRightsOrIsDeviceOwnerDeviceCreation,)
filter_backends = (filters.DjangoFilterBackend,)
- filter_class = (VersionFilter)
-class VersionDailyFilter(filters.FilterSet):
+class _DailyVersionStatsFilter(filters.FilterSet):
date_start = django_filters.DateFilter(name="date", lookup_expr='gte')
- date_end = django_filters.DateFilter(name="date", lookup_expr='lte')
+ date_end = django_filters.DateFilter(name="date", lookup_expr='lte')
+
+class _DailyVersionStatsSerializer(serializers.ModelSerializer):
+ permission_classes = (HasRightsOrIsDeviceOwnerDeviceCreation,)
+
+class _DailyVersionStatsListView(generics.ListAPIView):
+ permission_classes = (HasRightsOrIsDeviceOwnerDeviceCreation,)
+ filter_backends = (filters.DjangoFilterBackend,)
+
+
+class VersionSerializer(_VersionStatsSerializer):
+ class Meta:
+ model = Version
+ fields = '__all__'
+
+class VersionFilter(_VersionStatsFilter):
+ class Meta:
+ model = Version
+ fields = '__all__'
+
+class VersionListView(_VersionStatsListView):
+ queryset = Version.objects.all().order_by('-heartbeats')
+ filter_class = VersionFilter
+ serializer_class = VersionSerializer
+
+class VersionDailyFilter(_DailyVersionStatsFilter):
version__build_fingerprint = django_filters.CharFilter()
version__is_official_release = django_filters.BooleanFilter()
version__is_beta_release = django_filters.BooleanFilter()
+
class Meta:
model = VersionDaily
+ fields = '__all__'
-class VersionDailySerializer(serializers.ModelSerializer):
- permission_classes = (HasRightsOrIsDeviceOwnerDeviceCreation, )
- build_fingerprint = serializers.CharField()
+class VersionDailySerializer(_DailyVersionStatsSerializer):
+ build_fingerprint = serializers.CharField()
+
class Meta:
model = VersionDaily
+ fields = '__all__'
-class VersionDailyListView(generics.ListAPIView):
- queryset = VersionDaily.objects.annotate(build_fingerprint=F('version__build_fingerprint')).all().order_by('date')
- permission_classes = (HasRightsOrIsDeviceOwnerDeviceCreation, )
- filter_backends = (filters.DjangoFilterBackend,)
+class VersionDailyListView(_DailyVersionStatsListView):
+ queryset = (
+ VersionDaily.objects
+ .annotate(build_fingerprint=F('version__build_fingerprint'))
+ .all()
+ .order_by('date')
+ )
+ filter_class = VersionDailyFilter
+ filter_fields = (
+ 'version__build_fingerprint',
+ 'version__is_official_release',
+ 'version__is_beta_release',
+ )
serializer_class = VersionDailySerializer
- filter_class = (VersionDailyFilter)
- filter_fields = ('version__build_fingerprint','version__is_official_release','version__is_beta_release',)