diff --git a/beat/web/reports/serializers.py b/beat/web/reports/serializers.py index 583667fcfdd6f0b476744aa615bc11fd42b197e9..f47c383525ae1dcecf5255c59a0aac896051bb32 100644 --- a/beat/web/reports/serializers.py +++ b/beat/web/reports/serializers.py @@ -25,21 +25,18 @@ # # ############################################################################### -from django.contrib.auth.models import User, AnonymousUser from rest_framework import serializers from .models import Report from ..common.models import Contribution -from ..common.fields import JSONSerializerField -from ..experiments.models import Experiment from ..ui.templatetags.markup import restructuredtext from ..common.utils import validate_restructuredtext import simplejson as json -#---------------------------------------------------------- +# ---------------------------------------------------------- class BasicReportSerializer(serializers.ModelSerializer): @@ -58,10 +55,10 @@ class BasicReportSerializer(serializers.ModelSerializer): class Meta: model = Report - fields = ['short_description', 'status', 'is_owner', 'accessibility'] + fields = ["short_description", "status", "is_owner", "accessibility"] def get_name(self, obj): - return '{}/{}'.format(obj.author.username, obj.name) + return "{}/{}".format(obj.author.username, obj.name) def get_author(self, obj): return obj.author.username @@ -77,25 +74,26 @@ class BasicReportSerializer(serializers.ModelSerializer): def get_status(self, obj): if obj.status == Report.EDITABLE: - return 'editable' + return "editable" elif obj.status == Report.LOCKED: - return 'locked' + return "locked" elif obj.status == Report.PUBLISHED: - return 'published' + return "published" else: - return 'editable' + return "editable" def get_experiments(self, obj): return map(lambda x: x.fullname(), obj.experiments.iterator()) def get_experiment_access_map(self, obj): - user = self.context['request'].user - access_map = list(map(lambda x: x.accessibility_for(user)[0], - obj.experiments.iterator())) + user = self.context["request"].user + access_map = list( + map(lambda x: x.accessibility_for(user)[0], obj.experiments.iterator()) + ) return access_map def get_analyzers_access_map(self, obj): - user = self.context['request'].user + user = self.context["request"].user access_map = list() for exp in obj.experiments.iterator(): # find analyzer @@ -114,99 +112,136 @@ class BasicReportSerializer(serializers.ModelSerializer): d = obj.description if len(d) > 0: return restructuredtext(d) - return '' + return "" def get_add_url(self, obj): return obj.get_api_add_url() -#---------------------------------------------------------- +# ---------------------------------------------------------- class SimpleReportSerializer(BasicReportSerializer): - class Meta(BasicReportSerializer.Meta): - fields = ['name', 'number', 'short_description', 'is_owner', 'author','status', 'description', 'creation_date', 'html_description', 'add_url', 'content'] + fields = [ + "name", + "number", + "short_description", + "is_owner", + "author", + "status", + "description", + "creation_date", + "html_description", + "add_url", + "content", + ] -#---------------------------------------------------------- +# ---------------------------------------------------------- class FullReportSerializer(BasicReportSerializer): - - class Meta(BasicReportSerializer.Meta): - fields = ['name', 'number', 'short_description', 'description', 'is_owner', 'author','status', 'creation_date', 'publication_date', 'experiments', 'analyzer', 'content', 'html_description', 'experiment_access_map', 'analyzers_access_map'] - - -#---------------------------------------------------------- + fields = [ + "name", + "number", + "short_description", + "description", + "is_owner", + "author", + "status", + "creation_date", + "publication_date", + "experiments", + "analyzer", + "content", + "html_description", + "experiment_access_map", + "analyzers_access_map", + ] + + +# ---------------------------------------------------------- class CreatedReportSerializer(BasicReportSerializer): - class Meta(BasicReportSerializer.Meta): - fields = ['name', 'short_description', 'experiments'] + fields = ["name", "short_description", "experiments"] -#---------------------------------------------------------- +# ---------------------------------------------------------- class UpdatedReportSerializer(BasicReportSerializer): - class Meta(BasicReportSerializer.Meta): - fields = ['short_description', 'description', 'experiments', 'content'] + fields = ["short_description", "description", "experiments", "content"] -#---------------------------------------------------------- +# ---------------------------------------------------------- class ReportCreationFailedException(Exception): pass -#---------------------------------------------------------- +# ---------------------------------------------------------- class ReportCreationSerializer(serializers.ModelSerializer): - content = JSONSerializerField() + content = serializers.JSONField() experiments = serializers.ListField(child=serializers.CharField()) class Meta: model = Report - fields = ['name', 'short_description', 'description', 'content', 'experiments'] + fields = ["name", "short_description", "description", "content", "experiments"] def create(self, validated_data): report = None - if 'name' not in validated_data: - raise serializers.ValidationError('No name provided') + if "name" not in validated_data: + raise serializers.ValidationError("No name provided") try: - report = Report.objects.get(author=self.context['request'].user, name=validated_data['name']) - except: + report = Report.objects.get( + author=self.context["request"].user, name=validated_data["name"] + ) + except Report.DoesNotExist: pass if report is not None: - raise serializers.ValidationError('A report with this name already exists') + raise serializers.ValidationError("A report with this name already exists") - (report, self.details) = self.Meta.model.objects.create_object(author=self.context['request'].user, **validated_data) + (report, self.details) = self.Meta.model.objects.create_object( + author=self.context["request"].user, **validated_data + ) if report is None: raise ReportCreationFailedException() return report def update(self, instance, validated_data): - instance.short_description = validated_data.get('short_description', instance.short_description) - instance.description = validated_data.get('description', instance.description) - instance.content = validated_data.get('content', instance.content) - instance.publication_date = validated_data.get('publication_date', instance.publication_date) + instance.short_description = validated_data.get( + "short_description", instance.short_description + ) + instance.description = validated_data.get("description", instance.description) + instance.content = validated_data.get("content", instance.content) + instance.publication_date = validated_data.get( + "publication_date", instance.publication_date + ) instance.save() - if 'experiments' in validated_data: - experiments = validated_data.get('experiments', []) - current_experiments = map(lambda x: x.fullname(), instance.experiments.iterator()) + if "experiments" in validated_data: + experiments = validated_data.get("experiments", []) + current_experiments = map( + lambda x: x.fullname(), instance.experiments.iterator() + ) - experiments_to_remove = filter(lambda x: x not in experiments, current_experiments) - experiments_to_add = filter(lambda x: x not in current_experiments, experiments) + experiments_to_remove = filter( + lambda x: x not in experiments, current_experiments + ) + experiments_to_add = filter( + lambda x: x not in current_experiments, experiments + ) instance.remove_experiments(experiments_to_remove) @@ -234,13 +269,12 @@ class ReportCreationSerializer(serializers.ModelSerializer): return serializer.data -#---------------------------------------------------------- +# ---------------------------------------------------------- class ReportUpdateSerializer(ReportCreationSerializer): - class Meta(ReportCreationSerializer.Meta): - fields = ['short_description', 'description', 'content', 'experiments'] + fields = ["short_description", "description", "content", "experiments"] def to_representation(self, obj): serializer = UpdatedReportSerializer(obj)