Commit f30a74bb by David Ormsbee

Cache serializations of Assessments themselves.

parent d27acba5
......@@ -18,7 +18,7 @@ from openassessment.assessment.models import (
InvalidOptionSelection, PeerWorkflow, PeerWorkflowItem,
)
from openassessment.assessment.serializers import (
AssessmentSerializer, AssessmentFeedbackSerializer,
AssessmentSerializer, AssessmentFeedbackSerializer, RubricSerializer,
rubric_from_dict, serialize_assessments
)
from submissions import api as sub_api
......@@ -260,16 +260,19 @@ def get_rubric_max_scores(submission_uuid):
the submission, or its associated rubric.
"""
try:
serialized_assessments = serialize_assessments(
Assessment.objects.filter(submission_uuid=submission_uuid).order_by( "-scored_at", "-id")[:1]
assessments = list(
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
assessment = serialized_assessments[0]
assessment = assessments[0]
rubric_dict = RubricSerializer.serialized_from_cache(assessment.rubric)
return {
criterion["name"]: criterion["points_possible"]
for criterion in assessment["rubric"]["criteria"]
for criterion in rubric_dict["criteria"]
}
except Submission.DoesNotExist:
return None
......
......@@ -195,6 +195,13 @@ def full_assessment_dict(assessment, rubric_dict=None):
Returns:
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
if not rubric_dict:
rubric_dict = RubricSerializer.serialized_from_cache(assessment.rubric)
......@@ -225,6 +232,8 @@ def full_assessment_dict(assessment, rubric_dict=None):
)
assessment_dict["points_possible"] = rubric_dict["points_possible"]
cache.set(assessment_cache_key, 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