From 7f93fd0300f9f2d66b8f03851523d7327e83e987 Mon Sep 17 00:00:00 2001 From: Nikos Roussos Date: Mon, 25 Apr 2016 17:54:38 +0300 Subject: [PATCH] Amend Data serializer to provide nested demodulated payloads --- network/api/serializers.py | 29 +++++++++++++++++++++++++++-- network/api/views.py | 2 ++ requirements/base.txt | 2 +- requirements/dev.txt | 2 +- 4 files changed, 31 insertions(+), 4 deletions(-) diff --git a/network/api/serializers.py b/network/api/serializers.py index 6ec4184..b440a32 100644 --- a/network/api/serializers.py +++ b/network/api/serializers.py @@ -1,14 +1,39 @@ from rest_framework import serializers +from django.contrib.sites.models import Site +from django.core.urlresolvers import reverse -from network.base.models import Data, Station +from network.base.models import Data, Station, DemodData + + +class DemodDataSerializer(serializers.ModelSerializer): + class Meta: + model = DemodData + fields = ('payload_demod', ) class DataSerializer(serializers.ModelSerializer): + transmitter = serializers.SerializerMethodField() + demoddata = DemodDataSerializer(many=True) + class Meta: model = Data - fields = ('id', 'start', 'end', 'observation', 'ground_station', 'payload', 'payload_demode') + fields = ('id', 'start', 'end', 'observation', 'ground_station', 'transmitter', + 'payload', 'demoddata') read_only_fields = ['id', 'start', 'end', 'observation', 'ground_station'] + def update(self, instance, validated_data): + demod_data = validated_data.pop('demoddata') + data = super(DataSerializer, self).update(instance, validated_data) + for demod in demod_data: + data.demoddata.create(payload_demod=demod['payload_demod']) + return data + + def get_transmitter(self, obj): + try: + return obj.observation.transmitter.uuid + except AttributeError: + return '' + class JobSerializer(serializers.ModelSerializer): frequency = serializers.SerializerMethodField() diff --git a/network/api/views.py b/network/api/views.py index aeefc0a..6736567 100644 --- a/network/api/views.py +++ b/network/api/views.py @@ -13,6 +13,8 @@ from network.base.models import Data, Station class DataView(viewsets.ModelViewSet, mixins.UpdateModelMixin): queryset = Data.objects.all() serializer_class = serializers.DataSerializer + filter_class = filters.DataViewFilter + filter_fields = ('ground_station', 'start', 'end') permission_classes = [ StationOwnerCanEditPermission ] diff --git a/requirements/base.txt b/requirements/base.txt index 43e2a79..62891e9 100644 --- a/requirements/base.txt +++ b/requirements/base.txt @@ -27,4 +27,4 @@ git+https://github.com/comzeradd/orbit.git@cache##egg=orbit # API djangorestframework==3.3.3 Markdown==2.6.6 -git+https://github.com/alex/django-filter.git@0.12.0#egg=django-filter +django-filter.git==0.13.0 diff --git a/requirements/dev.txt b/requirements/dev.txt index 589ea73..1801be5 100644 --- a/requirements/dev.txt +++ b/requirements/dev.txt @@ -5,4 +5,4 @@ django-debug-toolbar==1.4 sqlparse==0.1.19 flake8==2.5.4 -factory-boy==2.6.1 +factory-boy==2.7.0