Commit f30a74bb by David Ormsbee

Cache serializations of Assessments themselves.

parent d27acba5
...@@ -18,7 +18,7 @@ from openassessment.assessment.models import ( ...@@ -18,7 +18,7 @@ from openassessment.assessment.models import (
InvalidOptionSelection, PeerWorkflow, PeerWorkflowItem, InvalidOptionSelection, PeerWorkflow, PeerWorkflowItem,
) )
from openassessment.assessment.serializers import ( from openassessment.assessment.serializers import (
AssessmentSerializer, AssessmentFeedbackSerializer, AssessmentSerializer, AssessmentFeedbackSerializer, RubricSerializer,
rubric_from_dict, serialize_assessments rubric_from_dict, serialize_assessments
) )
from submissions import api as sub_api from submissions import api as sub_api
...@@ -260,16 +260,19 @@ def get_rubric_max_scores(submission_uuid): ...@@ -260,16 +260,19 @@ def get_rubric_max_scores(submission_uuid):
the submission, or its associated rubric. the submission, or its associated rubric.
""" """
try: try:
serialized_assessments = serialize_assessments( assessments = list(
Assessment.objects.filter(submission_uuid=submission_uuid).order_by( "-scored_at", "-id")[:1] Assessment.objects.filter(
submission_uuid=submission_uuid
).order_by( "-scored_at", "-id").select_related("rubric")[:1]
) )
if not serialized_assessments: if not assessments:
return None return None
assessment = serialized_assessments[0] assessment = assessments[0]
rubric_dict = RubricSerializer.serialized_from_cache(assessment.rubric)
return { return {
criterion["name"]: criterion["points_possible"] criterion["name"]: criterion["points_possible"]
for criterion in assessment["rubric"]["criteria"] for criterion in rubric_dict["criteria"]
} }
except Submission.DoesNotExist: except Submission.DoesNotExist:
return None return None
......
...@@ -195,6 +195,13 @@ def full_assessment_dict(assessment, rubric_dict=None): ...@@ -195,6 +195,13 @@ def full_assessment_dict(assessment, rubric_dict=None):
Returns: Returns:
dict with keys 'rubric' (serialized Rubric model) and 'parts' (serialized assessment parts) dict with keys 'rubric' (serialized Rubric model) and 'parts' (serialized assessment parts)
""" """
assessment_cache_key = "assessment.full_assessment_dict.{}.{}.{}".format(
assessment.id, assessment.submission_uuid, assessment.scored_at.isoformat()
)
assessment_dict = cache.get(assessment_cache_key)
if assessment_dict:
return assessment_dict
assessment_dict = AssessmentSerializer(assessment).data assessment_dict = AssessmentSerializer(assessment).data
if not rubric_dict: if not rubric_dict:
rubric_dict = RubricSerializer.serialized_from_cache(assessment.rubric) rubric_dict = RubricSerializer.serialized_from_cache(assessment.rubric)
...@@ -225,6 +232,8 @@ def full_assessment_dict(assessment, rubric_dict=None): ...@@ -225,6 +232,8 @@ def full_assessment_dict(assessment, rubric_dict=None):
) )
assessment_dict["points_possible"] = rubric_dict["points_possible"] assessment_dict["points_possible"] = rubric_dict["points_possible"]
cache.set(assessment_cache_key, assessment_dict)
return assessment_dict return assessment_dict
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment