def get_exam_performance(user_role: Role, exam_id: str): is_authorized(user_role, "get_exam_performance") exam = Exam.get(id=exam_id) if not exam: raise HTTPException(status_code=status.HTTP_404_NOT_FOUND, detail="Exam not found : id: {}".format(exam_id)) results = select(p for p in Performance if p.exam == exam)[:] performance = [] for result in results: performance.append(result.to_dict()) return performance
def add_participant(user_id: UUID, user_role: Role, participant: schemas.Participant): is_authorized(user_role, "add_participant") exam_id = participant.exam_id learner_id = participant.user_id exam = Exam.get(id=exam_id, user=User[user_id]) if not exam: raise HTTPException(status_code=status.HTTP_404_NOT_FOUND, detail="Exam not found : id: {}".format(exam_id)) learner = User.get(id=learner_id, role=Role.learner) if not learner: raise HTTPException( status_code=status.HTTP_404_NOT_FOUND, detail="Learner not found : id: {}".format(learner_id)) participant = Participant(exam=exam, user=learner) return participant.to_dict()
def create_question(user_id: UUID, user_role: Role, question_in: schemas.Question): is_authorized(user_role, "create_question") exam = Exam.get(id=question_in.exam_id) if not exam: raise HTTPException(status_code=status.HTTP_404_NOT_FOUND, detail="Exam not found : id: {}".format( question_in.exam_id)) question = dict(text=question_in.text, marks=question_in.marks, exam=exam) if question_in.multi_choice: question["multi_choice"] = question_in.multi_choice if question_in.answer: question["answer"] = question_in.answer counter = select(max(q.number) for q in Question if q.exam == exam)[:][0] if not counter: counter = 0 question["number"] = counter + 1 return Question(**question).to_dict()
def increase_mistake(self, exam_id): exam = Exam.get(id=exam_id) exam.mistake += 1 commit() return exam