Skip to content

Commit e7927b4

Browse files
Add AnnotationSerializer
1 parent 67fcc9a commit e7927b4

File tree

4 files changed

+49
-20
lines changed

4 files changed

+49
-20
lines changed

backend/annotation/serializers.py

Lines changed: 40 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,9 @@
11
from rest_framework import serializers
2-
from annotation.models import ProblemAnnotation, KnowledgeBaseAnnotation
2+
from annotation.models import (
3+
AnnotationSession,
4+
ProblemAnnotation,
5+
KnowledgeBaseAnnotation,
6+
)
37

48

59
class KnowledgeBaseAnnotationSerializer(serializers.ModelSerializer):
@@ -33,23 +37,48 @@ def update(
3337

3438

3539
class ProblemAnnotationSerializer(serializers.ModelSerializer):
36-
kb_items = KnowledgeBaseAnnotationSerializer(
37-
many=True, source="session.kb_annotations"
38-
)
3940

4041
class Meta:
4142
model = ProblemAnnotation
4243
fields = [
4344
"id",
44-
"entailment_label",
4545
"created_at",
46+
"entailment_label",
47+
]
48+
49+
50+
class AnnotationSerializer(serializers.Serializer):
51+
kbAnnotations = serializers.SerializerMethodField()
52+
problemAnnotations = serializers.SerializerMethodField()
53+
54+
class Meta:
55+
fields = [
56+
"kbAnnotations",
57+
"problemAnnotations",
4658
]
4759

48-
def get_kb_items(self, problem_annotation: ProblemAnnotation):
49-
"""Get the KnowledgeBaseAnnotation items related to this ProblemAnnotation."""
60+
def get_kbAnnotations(self, obj):
61+
problem, last_session = self._get_problem_and_last_session()
62+
if not problem or not last_session:
63+
return []
5064
kb_annotations = KnowledgeBaseAnnotation.objects.filter(
51-
session=problem_annotation.session
65+
session=last_session, problem=problem
66+
)
67+
return KnowledgeBaseAnnotationSerializer(kb_annotations, many=True).data
68+
69+
def get_problemAnnotations(self, obj):
70+
problem, last_session = self._get_problem_and_last_session()
71+
problem_annotations = ProblemAnnotation.objects.filter(
72+
session=last_session, problem=problem
73+
)
74+
return ProblemAnnotationSerializer(problem_annotations, many=True).data
75+
76+
def _get_problem_and_last_session(self):
77+
problem = self.context.get("problem", None)
78+
user = self.context.get("user", None)
79+
if not problem or not user or user.is_authenticated is False:
80+
return None, None
81+
last_session = (
82+
AnnotationSession.objects.filter(user=user).order_by("-created_at").first()
5283
)
53-
return KnowledgeBaseAnnotationSerializer(
54-
kb_annotations, many=True
55-
).data
84+
return problem, last_session

backend/problem/models.py

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
from django.db import models
22
from django.db.models import QuerySet
33

4-
from problem.services import FracasData, SNLIData, SickData
54
from langpro_annotator.logger import logger
65

76

backend/problem/serializers.py

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,11 @@
11
from rest_framework import serializers
22
from annotation.models import (
33
AnnotationSession,
4-
ProblemAnnotation,
54
KnowledgeBaseAnnotation,
65
)
76
from annotation.serializers import (
7+
AnnotationSerializer,
88
KnowledgeBaseAnnotationSerializer,
9-
ProblemAnnotationSerializer,
109
)
1110
from problem.services import FracasData, SNLIData, SickData
1211
from problem.models import Problem, Sentence
@@ -33,7 +32,7 @@ class Meta:
3332
"hypothesis",
3433
"entailmentLabel",
3534
"extraData",
36-
"kbItems",
35+
"annotation",
3736
"base",
3837
]
3938

@@ -58,9 +57,12 @@ def get_extraData(self, problem):
5857
return {}
5958

6059
def get_annotation(self, problem: Problem):
61-
"""Get the last annotation for the problem."""
62-
annotation = problem.annotations.last()
63-
return ProblemAnnotationSerializer(annotation).data if annotation else None
60+
request = self.context.get("request")
61+
if not request or not request.user:
62+
return None
63+
return AnnotationSerializer(
64+
{}, context={"problem": problem, "user": request.user}
65+
).data
6466

6567
def create(self, validated_data: dict) -> Problem:
6668
"""

backend/problem/views/problem.py

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -125,7 +125,7 @@ def _handle_update_create_problem(
125125
input_serializer.is_valid(raise_exception=True)
126126
validated_input: dict = input_serializer.validated_data # type: ignore
127127

128-
problem_serializer = ProblemSerializer()
128+
problem_serializer = ProblemSerializer(context={"request": request})
129129

130130
if problem_id is None:
131131
problem = problem_serializer.create(validated_input) # type: ignore
@@ -140,4 +140,3 @@ def _handle_update_create_problem(
140140
status = HTTP_200_OK
141141

142142
return Response({"id": problem.pk}, status=status)
143-

0 commit comments

Comments
 (0)