Add context

This commit is contained in:
Christian Cueni 2024-07-22 15:28:28 +02:00
parent 9424979bef
commit 8e7f805067
2 changed files with 30 additions and 21 deletions

View File

@ -17,7 +17,8 @@ def query_competence_course_session_assignments(course_session_ids, circle_ids=N
AssignmentType.CASEWORK.value,
],
learning_content__content_assignment__competence_certificate__isnull=False,
).select_related("submission_deadline", "learning_content"):
).select_related("submission_deadline", "learning_content", "course_session",
"learning_content__content_assignment"):
if circle_ids and csa.learning_content.get_circle().id not in circle_ids:
continue
result.append(csa)
@ -34,7 +35,7 @@ def query_competence_course_session_edoniq_tests(course_session_ids, circle_ids=
for cset in CourseSessionEdoniqTest.objects.filter(
course_session_id__in=course_session_ids,
learning_content__content_assignment__competence_certificate__isnull=False,
).select_related("deadline", "learning_content"):
).select_related("deadline", "learning_content", "course_session", "learning_content__content_assignment"):
if circle_ids and cset.learning_content.get_circle().id not in circle_ids:
continue
result.append(cset)

View File

@ -1,8 +1,9 @@
import math
from typing import List
from typing import List, Dict, Tuple
import graphene
from django.db import connection, reset_queries
import structlog
from django.db import connections, reset_queries
import vbv_lernwelt.assignment.models
from vbv_lernwelt.assignment.models import (
@ -19,6 +20,8 @@ from vbv_lernwelt.course_session.models import (
CourseSessionEdoniqTest,
)
logger = structlog.get_logger()
class AssignmentCompletionMetricsType(graphene.ObjectType):
_id = graphene.ID(required=True)
@ -139,11 +142,21 @@ def create_record(
course_session_assignment: CourseSessionAssignment | CourseSessionEdoniqTest,
user_selection_ids: List[str] | None,
urql_id_postfix: str = "",
) -> AssignmentStatisticsRecordType:
if isinstance(course_session_assignment, CourseSessionAssignment):
due_date = course_session_assignment.submission_deadline
else:
due_date = course_session_assignment.deadline
context=None,
) -> Tuple[AssignmentStatisticsRecordType, Dict]:
if not context:
context = {}
assignment_type = "CourseSessionAssignment" if isinstance(course_session_assignment,
CourseSessionAssignment) else "CourseSessionEdoniqTest"
due_date = course_session_assignment.submission_deadline if assignment_type == "CourseSessionAssignment" else course_session_assignment.deadline
key = f"{assignment_type}_{course_session_assignment.learning_content.id}"
if not key in context:
context[key] = course_session_assignment.learning_content.get_circle().id
circle_id = context[key]
learning_content = course_session_assignment.learning_content
@ -152,7 +165,7 @@ def create_record(
_id=f"{course_session_assignment._meta.model_name}#{course_session_assignment.id}@{urql_id_postfix}",
# noqa
course_session_id=str(course_session_assignment.course_session.id), # noqa
circle_id=learning_content.get_circle().id, # noqa
circle_id=circle_id, # noqa
course_session_assignment_id=str(course_session_assignment.id), # noqa
generation=course_session_assignment.course_session.generation, # noqa
assignment_type_translation_key=due_date.assignment_type_translation_key,
@ -166,7 +179,7 @@ def create_record(
),
details_url=due_date.url_expert, # noqa
deadline=due_date.start, # noqa
)
), context
def assignments(
@ -176,9 +189,6 @@ def assignments(
circle_ids: List[graphene.ID] | None = None,
urql_id: str = None,
) -> AssignmentsStatisticsType:
import structlog
logger = structlog.get_logger()
if urql_id is None:
urql_id = str(course_id)
@ -186,22 +196,20 @@ def assignments(
id__in=course_session_selection_ids,
)
records: List[AssignmentStatisticsRecordType] = []
context = {}
reset_queries()
csas = query_competence_course_session_assignments(course_sessions, circle_ids)
csets = query_competence_course_session_edoniq_tests(course_sessions, circle_ids)
for csa in csas:
record = create_record(csa, user_selection_ids, urql_id_postfix=urql_id)
record, context = create_record(csa, user_selection_ids, urql_id_postfix=urql_id, context=context)
records.append(record)
for cset in csets:
record = create_record(cset, user_selection_ids, urql_id_postfix=urql_id)
record, context = create_record(cset, user_selection_ids, urql_id_postfix=urql_id, context=context)
records.append(record)
num_queries = len(connection.queries)
logger.info(f"cset number of queries executed: {num_queries}")
num_queries = len(connections["default"].queries)
logger.info(num_queries)
return AssignmentsStatisticsType(
_id=urql_id, # noqa
records=sorted(records, key=lambda r: r.deadline), # noqa