update sba testing (and fix others)

This commit is contained in:
Ross
2023-10-09 12:44:11 +01:00
parent 297f8619b4
commit 9b16596d0c
13 changed files with 363 additions and 243 deletions
+10
View File
@@ -128,6 +128,13 @@ class Question(QuestionBase):
def get_questions(self):
return [self.a, self.b, self.c, self.d, self.e]
def get_unanswered_mark_and_text(self) -> tuple[int, tuple[str, str, str, str, str]]:
"""
returns score, tuple[answers]
"""
return ((0,) * 5, ("Not answered",) * 5)
#@reversion.register
class Exam(ExamBase):
@@ -209,6 +216,9 @@ class UserAnswer(UserAnswerBase):
def get_answers(self):
return (self.a, self.b, self.c, self.d, self.e)
def get_answer(self):
return self.get_answers()
def get_answer_string(self):
return [str(i) for i in (self.a, self.b, self.c, self.d, self.e)]
+10 -10
View File
@@ -60,16 +60,16 @@ urlpatterns.extend(
name="user_answer_delete",
),
# TODO: consider merging with generic...
path(
"exam/<int:pk>/scores/<int:cid>/<str:passcode>/",
views.exam_scores_cid_user,
name="exam_scores_cid_user",
),
path(
"exam/<int:pk>/scores/",
views.exam_scores_cid_user,
name="exam_scores_user",
),
#path(
# "exam/<int:pk>/scores/<int:cid>/<str:passcode>/",
# views.exam_scores_cid_user,
# name="exam_scores_cid_user",
#),
#path(
# "exam/<int:pk>/scores/",
# views.exam_scores_cid_user,
# name="exam_scores_user",
#),
]
)
+62 -62
View File
@@ -100,68 +100,68 @@ def active_exams(request):
return render(request, "physics/available_exam_list.html", {"exams": active_exams})
def exam_scores_cid_user(request, pk, cid=None, passcode=None):
exam = get_object_or_404(Exam, pk=pk)
exam.check_user_can_review(cid, passcode, request)
questions = exam.exam_questions.all()
answers_and_marks = []
answers_marks = []
answers = []
view_all_results = False
if request.user.groups.filter(name="view_all_results").exists():
view_all_results = True
for q in questions:
# Get user answer
if cid is not None:
user_answer = q.cid_user_answers.filter(cid=cid, exam__id=pk).first()
else:
user_answer = q.cid_user_answers.filter(
user=request.user, exam__id=pk
).first()
if user_answer is None:
answer_scores = (0, 0, 0, 0, 0)
ans = ("", "", "", "", "")
else:
ans = user_answer.get_answers()
answer_scores = user_answer.get_answer_score()
correct_answers = q.get_answers()
if not exam.publish_results and not view_all_results:
correct_answers = ("*****", "*****", "*****", "*****", "*****")
answer_scores = (0, 0, 0, 0, 0)
answers.append(ans)
answers_marks.append(answer_scores)
merged_ans = zip(q.get_questions(), ans, answer_scores, correct_answers)
answers_and_marks.append((q, merged_ans))
total_score = sum(sum(i) for i in answers_marks)
max_score = len(questions) * 5
return render(
request,
"physics/exam_scores_user.html",
{
"exam": exam,
"cid": cid,
"passcode": passcode,
"questions": questions,
"answers": answers,
"answers_marks": answers_marks,
"total_score": total_score,
"max_score": max_score,
"answers_and_marks": answers_and_marks,
"view_all_results": view_all_results,
},
)
#def exam_scores_cid_user(request, pk, cid=None, passcode=None):
# exam = get_object_or_404(Exam, pk=pk)
#
# exam.check_user_can_review(cid, passcode, request)
#
# questions = exam.exam_questions.all()
#
# answers_and_marks = []
# answers_marks = []
# answers = []
#
# view_all_results = False
# if request.user.groups.filter(name="view_all_results").exists():
# view_all_results = True
#
# for q in questions:
# # Get user answer
# if cid is not None:
# user_answer = q.cid_user_answers.filter(cid=cid, exam__id=pk).first()
# else:
# user_answer = q.cid_user_answers.filter(
# user=request.user, exam__id=pk
# ).first()
#
# if user_answer is None:
# answer_scores = (0, 0, 0, 0, 0)
# ans = ("", "", "", "", "")
# else:
# ans = user_answer.get_answers()
# answer_scores = user_answer.get_answer_score()
#
# correct_answers = q.get_answers()
#
# if not exam.publish_results and not view_all_results:
# correct_answers = ("*****", "*****", "*****", "*****", "*****")
# answer_scores = (0, 0, 0, 0, 0)
# answers.append(ans)
# answers_marks.append(answer_scores)
#
# merged_ans = zip(q.get_questions(), ans, answer_scores, correct_answers)
# answers_and_marks.append((q, merged_ans))
#
# total_score = sum(sum(i) for i in answers_marks)
#
# max_score = len(questions) * 5
#
# return render(
# request,
# "physics/exam_scores_user.html",
# {
# "exam": exam,
# "cid": cid,
# "passcode": passcode,
# "questions": questions,
# "answers": answers,
# "answers_marks": answers_marks,
# "total_score": total_score,
# "max_score": max_score,
# "answers_and_marks": answers_and_marks,
# "view_all_results": view_all_results,
# },
# )
def exam_take_old(request, pk):