From 06ceb9c2ce15cb21b6e095e5522cf429c8180fbf Mon Sep 17 00:00:00 2001 From: Ross Date: Mon, 22 Dec 2025 12:07:25 +0000 Subject: [PATCH] Add manual submission flag to CidUserExam and improve logging for exam completion --- generic/models.py | 1 + physics/views.py | 23 +++-------------------- 2 files changed, 4 insertions(+), 20 deletions(-) diff --git a/generic/models.py b/generic/models.py index 0190fdca..1391ac2f 100644 --- a/generic/models.py +++ b/generic/models.py @@ -1698,6 +1698,7 @@ class CidUserExam(models.Model): # TODO add examuserstatus? self.end_time = timezone.now() self.completed = True + self.manual_submission = True self.save() diff --git a/physics/views.py b/physics/views.py index 5f6c0911..dbcb21e7 100644 --- a/physics/views.py +++ b/physics/views.py @@ -69,6 +69,8 @@ from .decorators import ( user_is_exam_author_or_physics_checker, ) +from loguru import logger + class AuthorOrCheckerRequiredMixin(object): def get_object(self, *args, **kwargs): @@ -158,6 +160,7 @@ def exam_complete(request, pk, cid=None, passcode=None): extra="physics", ) except Exception: + logger.error("Failed to log exam completion status") # avoid crashing the user flow if logging fails pass @@ -190,28 +193,8 @@ def exam_take_overview(request, pk, cid=None, passcode=None): else: question_answer_tuples.append((q, None)) - # detect whether a CidUserExam already exists so we only log the initial start once - content_type = ContentType.objects.get_for_model(exam) - existing = False - if cid is not None: - cid_user_obj = CidUser.objects.filter(cid=cid).first() - existing = CidUserExam.objects.filter(content_type=content_type, object_id=exam.pk, cid_user=cid_user_obj).exists() - else: - existing = CidUserExam.objects.filter(content_type=content_type, object_id=exam.pk, user_user=request.user).exists() - cid_user_exam = exam.get_or_create_cid_user_exam(cid=cid, user_user=request.user) - if not existing: - try: - ExamUserStatus.objects.create( - content_type=content_type, - object_id=exam.pk, - cid_user_exam=cid_user_exam, - status="started", - extra="physics", - ) - except Exception: - pass return render( request,