src/iconolab/serializers.py
author Alexandre Segura <mex.zktk@gmail.com>
Mon, 13 Mar 2017 18:48:35 +0100
changeset 418 a04c55054afe
parent 396 0a4743126d74
child 427 2a9ce7ec3a29
permissions -rw-r--r--
Introduce display of all annotations at the same time. - Add stats to serialized annotation. - Introduce AnnotationList component. - Pass array of annotations to component. - Handle click on annotation & drawing.

from iconolab.models import AnnotationRevision, IconolabComment, AnnotationStats
from rest_framework import serializers

class AnnotationStatsSerializer(serializers.ModelSerializer):
    class Meta:
        model = AnnotationStats
        fields = ('submitted_revisions_count', 'awaiting_revisions_count', 'accepted_revisions_count', 'contributors_count', 'views_count', 'comments_count', 'tag_count')

class AnnotationRevisionSerializer(serializers.ModelSerializer):
    tags = serializers.SerializerMethodField('get_normalized_tags')
    annotation_guid = serializers.SerializerMethodField()
    stats = AnnotationStatsSerializer(source='annotation.stats')

    def get_normalized_tags(self, obj):
        tags = []
        for tagging_info in obj.tagginginfo_set.all():
            tags.append({
                "tag_label": tagging_info.tag.label,
                "tag_link": tagging_info.tag.link,
                "accuracy": tagging_info.accuracy,
                "relevancy": tagging_info.relevancy,
            })
        return tags

    def get_annotation_guid(self, obj):
        return obj.annotation.annotation_guid

    class Meta:
        model = AnnotationRevision
        fields = ('annotation_guid', 'title', 'description', 'fragment', 'tags', 'stats')

class IconolabCommentSerializer(serializers.ModelSerializer):
    allow_thread = serializers.BooleanField()
    class Meta:
        model = IconolabComment
        fields = '__all__'