diff --git a/backend/api/serializers.py b/backend/api/serializers.py index f26bb5d7..4290e2c0 100644 --- a/backend/api/serializers.py +++ b/backend/api/serializers.py @@ -8,10 +8,12 @@ from rest_polymorphic.serializers import PolymorphicSerializer from .models import (DOCUMENT_CLASSIFICATION, SEQ2SEQ, SEQUENCE_LABELING, SPEECH2TEXT, AutoLabelingConfig, Comment, Document, - DocumentAnnotation, Label, Project, Role, RoleMapping, - Seq2seqAnnotation, Seq2seqProject, SequenceAnnotation, - SequenceLabelingProject, Speech2textAnnotation, - Speech2textProject, Tag, TextClassificationProject) + DocumentAnnotation, Image, ImageCategoryLabel, + ImageClassificationProject, Label, Project, Role, + RoleMapping, Seq2seqAnnotation, Seq2seqProject, + SequenceAnnotation, SequenceLabelingProject, + Speech2textAnnotation, Speech2textProject, Tag, + TextClassificationProject) class UserSerializer(serializers.ModelSerializer): @@ -103,6 +105,31 @@ class DocumentSerializer(serializers.ModelSerializer): fields = ('id', 'text', 'annotations', 'meta', 'annotation_approver', 'comment_count') +class ImageSerializer(serializers.ModelSerializer): + annotations = serializers.SerializerMethodField() + annotation_approver = serializers.SerializerMethodField() + + def get_annotations(self, instance): + request = self.context.get('request') + project = instance.project + model = project.get_annotation_class() + serializer = get_annotation_serializer(task=project.project_type) + annotations = model.objects.filter(document=instance.id) + if request and not project.collaborative_annotation: + annotations = annotations.filter(user=request.user) + serializer = serializer(annotations, many=True) + return serializer.data + + @classmethod + def get_annotation_approver(cls, instance): + approver = instance.annotations_approved_by + return approver.username if approver else None + + class Meta: + model = Image + fields = ('id', 'filename', 'annotations', 'meta', 'annotation_approver', 'comment_count') + + class ApproverSerializer(DocumentSerializer): class Meta: @@ -170,6 +197,14 @@ class Speech2textProjectSerializer(ProjectSerializer): read_only_fields = ('updated_at', 'users', 'current_users_role') +class ImageClassificationProjectSerializer(ProjectSerializer): + + class Meta: + model = ImageClassificationProject + fields = ProjectSerializer.Meta.fields + read_only_fields = ProjectSerializer.Meta.read_only_fields + + class ProjectPolymorphicSerializer(PolymorphicSerializer): model_serializer_mapping = { Project: ProjectSerializer, @@ -177,6 +212,7 @@ class ProjectPolymorphicSerializer(PolymorphicSerializer): SequenceLabelingProject: SequenceLabelingProjectSerializer, Seq2seqProject: Seq2seqProjectSerializer, Speech2textProject: Speech2textProjectSerializer, + ImageClassificationProject: ImageClassificationProjectSerializer } @@ -229,6 +265,16 @@ class Speech2textAnnotationSerializer(serializers.ModelSerializer): read_only_fields = ('user',) +class ImageClassificationLabelSerializer(serializers.ModelSerializer): + label = serializers.PrimaryKeyRelatedField(queryset=Label.objects.all()) + image = serializers.PrimaryKeyRelatedField(queryset=Image.objects.all()) + + class Meta: + model = ImageCategoryLabel + fields = ('id', 'prob', 'label', 'user', 'image', 'created_at', 'updated_at') + read_only_fields = ('user',) + + class RoleSerializer(serializers.ModelSerializer): class Meta: model = Role