diff --git a/knowledge.py b/knowledge.py index 942978d..3f640c2 100644 --- a/knowledge.py +++ b/knowledge.py @@ -68,7 +68,6 @@ class StudentKnowledge(object): # ------------------------------------------------------------------------ # Start a new topic. If not provided, gets a recommendation. # questions: list of generated questions to do in the topic - # finished_questions: [] will contain correctly answered questions # current_question: the current question to be presented # ------------------------------------------------------------------------ def init_topic(self, topic=''): @@ -92,7 +91,6 @@ class StudentKnowledge(object): self.correct_answers = 0 self.wrong_answers = 0 - self.finished_questions = [] size = min(self.MAX_QUESTIONS, len(questionlist)) # number of questions questionlist = random.sample(questionlist, k=size) @@ -135,14 +133,11 @@ class StudentKnowledge(object): logger.debug('StudentKnowledge.check_answer()') q = self.current_question - ref = q['ref'] - q['answer'] = answer q['finish_time'] = datetime.now() grade = q.correct() - logger.debug(f'Grade = {grade:.2} ({q["ref"]})') - self.finished_questions.append(q) # both correct and wrong answers + logger.debug(f'Grade {grade:.2} ({q["ref"]})') # if answer is correct, get next question if grade > 0.999: @@ -159,9 +154,8 @@ class StudentKnowledge(object): self.wrong_answers += 1 factory = self.deps.node[self.current_topic]['factory'] self.questions.append(factory[q['ref']].generate()) - # returns answered and corrected question - return ref, grade + return q # ======================================================================== @@ -180,10 +174,6 @@ class StudentKnowledge(object): return self.current_question # ------------------------------------------------------------------------ - def get_finished_questions(self): - return self.finished_questions - - # ------------------------------------------------------------------------ def get_current_topic(self): return self.current_topic @@ -206,7 +196,7 @@ class StudentKnowledge(object): # ------------------------------------------------------------------------ def get_topic_progress(self): - return len(self.finished_questions) / (1 + len(self.finished_questions) + len(self.questions)) + return self.correct_answers / (1 + self.correct_answers + len(self.questions)) # ------------------------------------------------------------------------ def get_topic_level(self, topic): diff --git a/learnapp.py b/learnapp.py index ae16791..6b2b1cd 100644 --- a/learnapp.py +++ b/learnapp.py @@ -106,23 +106,32 @@ class LearnApp(object): # ------------------------------------------------------------------------ def check_answer(self, uid, answer): knowledge = self.online[uid]['state'] - ref, grade = knowledge.check_answer(answer) # also moves to next question - logger.info(f'User "{uid}" got {grade:.2} in question "{ref}"') - - if knowledge.get_current_question() is None: - # finished topic, save into database - finished_topic = knowledge.get_current_topic() - level = knowledge.get_topic_level(finished_topic) - date = str(knowledge.get_topic_date(finished_topic)) - finished_questions = knowledge.get_finished_questions() - logger.info(f'User "{uid}" finished "{finished_topic}"') - - with self.db_session(autoflush=False) as s: - # save topic - a = s.query(StudentTopic).filter_by(student_id=uid, topic_id=finished_topic).one_or_none() + q = knowledge.check_answer(answer) # also moves to next question + logger.info(f'User "{uid}" got {q["grade"]:.2} in question "{q["ref"]}"') + topic = knowledge.get_current_topic() + + # always save grade of answered question + with self.db_session(autoflush=False) as s: + s.add(Answer( + ref=q['ref'], + grade=q['grade'], + starttime=str(q['start_time']), + finishtime=str(q['finish_time']), + student_id=uid, + topic_id=topic)) + logger.debug(f'Saved "{q["ref"]}" into database') + + if knowledge.get_current_question() is None: + # finished topic, save into database + logger.info(f'User "{uid}" finished "{topic}"') + level = knowledge.get_topic_level(topic) + date = str(knowledge.get_topic_date(topic)) + + # with self.db_session(autoflush=False) as s: + a = s.query(StudentTopic).filter_by(student_id=uid, topic_id=topic).one_or_none() if a is None: # insert new studenttopic into database - t = s.query(Topic).get(finished_topic) + t = s.query(Topic).get(topic) a = StudentTopic(level=level, date=date, topic=t) u = s.query(Student).get(uid) u.topics.append(a) @@ -132,21 +141,9 @@ class LearnApp(object): a.date = date s.add(a) - logger.debug(f'Saved topic "{finished_topic}" into database') - - # save answered questions from finished_questions list - s.add_all([ - Answer( - ref=q['ref'], - grade=q['grade'], - starttime=str(q['start_time']), - finishtime=str(q['finish_time']), - student_id=uid, - topic_id=finished_topic) - for q in finished_questions]) - logger.debug(f'Saved {len(finished_questions)} answers into database') - - return grade + logger.debug(f'Saved topic "{topic}" into database') + + return q['grade'] # ------------------------------------------------------------------------ # Start new topic -- libgit2 0.21.2