Refactor feedback image handling and enhance sample answers display in exam scores user template
This commit is contained in:
@@ -34,6 +34,17 @@ from django.utils.html import format_html
|
||||
from helpers.images import combine_dicom_images_side_by_side
|
||||
from django.core.files import File
|
||||
import tempfile
|
||||
from typing import List, TypedDict, Required, NotRequired
|
||||
|
||||
|
||||
class QuestionData(TypedDict):
|
||||
images: Required[list[str]]
|
||||
annotations: Required[List[str]]
|
||||
type: Required[str]
|
||||
history: NotRequired[str]
|
||||
answers: NotRequired[List[str]]
|
||||
feedback: NotRequired[str]
|
||||
feedback_images: NotRequired[List[str]]
|
||||
|
||||
|
||||
def image_directory_path(instance, filename):
|
||||
@@ -214,6 +225,66 @@ class Question(QuestionBase):
|
||||
"""Returns a string of the examinations associated with the question."""
|
||||
examinations = self.examination.all().values_list("examination", flat=True)
|
||||
return ", ".join(examinations)
|
||||
|
||||
def get_sample_answers(self):
|
||||
return self.sample_answers.all().order_by("-score")
|
||||
|
||||
def get_question_json(
|
||||
self,
|
||||
based: bool = True,
|
||||
feedback: bool = False,
|
||||
answers: bool = True,
|
||||
history: bool = False,
|
||||
annotations: bool = False,
|
||||
) -> QuestionData:
|
||||
"""Returns a json representation of the question"""
|
||||
|
||||
# Loop through rapidimage associations
|
||||
images = []
|
||||
annotations_list = []
|
||||
feedback_images = []
|
||||
i: QuestionImage
|
||||
for i in self.images.all():
|
||||
# TODO: add anotations
|
||||
|
||||
if i.feedback_image:
|
||||
if feedback:
|
||||
#annotations_list.append(i.image_annotations)
|
||||
if based:
|
||||
feedback_images.append(image_as_base64(i.image))
|
||||
else:
|
||||
feedback_images.append(
|
||||
"{}/{}".format(settings.REMOTE_URL, i.image.url)
|
||||
)
|
||||
# feedback_images.append("{}/{}".format(settings.REMOTE_URL, i.image.url))
|
||||
else:
|
||||
#annotations_list.append(i.image_annotations)
|
||||
if based:
|
||||
images.append(image_as_base64(i.image))
|
||||
else:
|
||||
images.append("{}/{}".format(settings.REMOTE_URL, i.image.url))
|
||||
|
||||
json = {
|
||||
"images": images,
|
||||
# "feedback_image": [],
|
||||
"type": "shorts",
|
||||
}
|
||||
|
||||
#if annotations:
|
||||
# json["annotations"] = annotations_list
|
||||
|
||||
if history:
|
||||
json["history"] = self.history
|
||||
|
||||
if answers:
|
||||
sample_answers = list(self.get_sample_answers().values_list("answer", "score"))
|
||||
json["answers"] = sample_answers
|
||||
|
||||
if feedback:
|
||||
json["feedback_images"] = feedback_images
|
||||
json["feedback"] = self.feedback
|
||||
|
||||
return json
|
||||
|
||||
|
||||
class QuestionImage(models.Model):
|
||||
|
||||
Reference in New Issue
Block a user