Skip to content

Commit 1e8ccbb

Browse files
Add types and converters for Sick and Fracas problems
1 parent b79e1cb commit 1e8ccbb

2 files changed

Lines changed: 99 additions & 0 deletions

File tree

backend/problem/services.py

Lines changed: 70 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,70 @@
1+
import json
2+
from .models import Problem
3+
from .types import FracasProblem, SickProblem
4+
5+
6+
def get_sick_problems() -> list[SickProblem]:
7+
"""
8+
Retrieves all Problem objects of type 'SICK' from the database
9+
and converts them into SickProblem instances.
10+
"""
11+
sick_problems: list[SickProblem] = []
12+
problem_objects = Problem.objects.filter(type=Problem.ProblemType.SICK)
13+
14+
for problem_obj in problem_objects:
15+
try:
16+
problem_data = json.loads(problem_obj.content)
17+
problem = SickProblem(
18+
pair_id=problem_data["pair_ID"],
19+
sentence_one=problem_data["sentence_A"],
20+
sentence_two=problem_data["sentence_B"],
21+
entailment_label=problem_data["entailment_label"],
22+
relatedness_score=float(problem_data["relatedness_score"]),
23+
)
24+
sick_problems.append(problem)
25+
except json.JSONDecodeError:
26+
print(
27+
f"Warning: Could not parse JSON content for Problem ID {problem_obj.id}"
28+
)
29+
except TypeError as e:
30+
print(
31+
f"Warning: Could not create SickProblem for Problem ID {problem_obj.id}: {e}"
32+
)
33+
34+
return sick_problems
35+
36+
37+
def get_fracas_problems() -> list[FracasProblem]:
38+
"""
39+
Retrieves all Problem objects of type 'Fracas' from the database
40+
and converts them into FracasProblem instances.
41+
"""
42+
fracas_problems: list[FracasProblem] = []
43+
problem_objects = Problem.objects.filter(type=Problem.ProblemType.FRACAS)
44+
45+
for problem_obj in problem_objects:
46+
try:
47+
problem_data = json.loads(problem_obj.content)
48+
problem = FracasProblem(
49+
fracas_id=problem_data["fracas_id"],
50+
question=problem_data["question"],
51+
hypothesis=problem_data["hypothesis"],
52+
answer=problem_data["answer"],
53+
fracas_answer=problem_data["fracas_answer"],
54+
fracas_non_standard=problem_data["fracas_non_standard"],
55+
note=problem_data["note"],
56+
section_name=problem_data["section_name"],
57+
subsection_name=problem_data["subsection_name"],
58+
premises=problem_data.get("premises", []),
59+
)
60+
fracas_problems.append(problem)
61+
except json.JSONDecodeError:
62+
print(
63+
f"Warning: Could not parse JSON content for Problem ID {problem_obj.id}"
64+
)
65+
except TypeError as e:
66+
print(
67+
f"Warning: Could not create FracasProblem for Problem ID {problem_obj.id}: {e}"
68+
)
69+
70+
return fracas_problems

backend/problem/types.py

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
from typing import Literal
2+
from dataclasses import dataclass, field
3+
4+
5+
@dataclass(frozen=True)
6+
class SickProblem:
7+
pair_id: int
8+
sentence_one: str
9+
sentence_two: str
10+
entailment_label: Literal["neutral", "contradiction", "entailment"]
11+
relatedness_score: float
12+
13+
14+
@dataclass(frozen=True)
15+
class FracasProblem:
16+
fracas_id: int
17+
question: str
18+
hypothesis: str
19+
answer: str
20+
fracas_answer: Literal["yes", "no", "unknown", "undefined"]
21+
fracas_non_standard: bool
22+
note: str
23+
section_name: str
24+
subsection_name: str
25+
premises: list[str] = field(default_factory=list)
26+
27+
28+
29+

0 commit comments

Comments
 (0)