Commit b44bf1c04f9542d88b86c26409a0c294314a2c6f

Authored by Miguel Barão
1 parent c6d6055c
Exists in master and in 1 other branch dev

- changed the way progress bar was calculated.

- all answers are saved, right or wrong, when submitted.
Showing 2 changed files with 30 additions and 43 deletions   Show diff stats
@@ -68,7 +68,6 @@ class StudentKnowledge(object): @@ -68,7 +68,6 @@ class StudentKnowledge(object):
68 # ------------------------------------------------------------------------ 68 # ------------------------------------------------------------------------
69 # Start a new topic. If not provided, gets a recommendation. 69 # Start a new topic. If not provided, gets a recommendation.
70 # questions: list of generated questions to do in the topic 70 # questions: list of generated questions to do in the topic
71 - # finished_questions: [] will contain correctly answered questions  
72 # current_question: the current question to be presented 71 # current_question: the current question to be presented
73 # ------------------------------------------------------------------------ 72 # ------------------------------------------------------------------------
74 def init_topic(self, topic=''): 73 def init_topic(self, topic=''):
@@ -92,7 +91,6 @@ class StudentKnowledge(object): @@ -92,7 +91,6 @@ class StudentKnowledge(object):
92 91
93 self.correct_answers = 0 92 self.correct_answers = 0
94 self.wrong_answers = 0 93 self.wrong_answers = 0
95 - self.finished_questions = []  
96 94
97 size = min(self.MAX_QUESTIONS, len(questionlist)) # number of questions 95 size = min(self.MAX_QUESTIONS, len(questionlist)) # number of questions
98 questionlist = random.sample(questionlist, k=size) 96 questionlist = random.sample(questionlist, k=size)
@@ -135,14 +133,11 @@ class StudentKnowledge(object): @@ -135,14 +133,11 @@ class StudentKnowledge(object):
135 logger.debug('StudentKnowledge.check_answer()') 133 logger.debug('StudentKnowledge.check_answer()')
136 134
137 q = self.current_question 135 q = self.current_question
138 - ref = q['ref']  
139 -  
140 q['answer'] = answer 136 q['answer'] = answer
141 q['finish_time'] = datetime.now() 137 q['finish_time'] = datetime.now()
142 grade = q.correct() 138 grade = q.correct()
143 - logger.debug(f'Grade = {grade:.2} ({q["ref"]})')  
144 139
145 - self.finished_questions.append(q) # both correct and wrong answers 140 + logger.debug(f'Grade {grade:.2} ({q["ref"]})')
146 141
147 # if answer is correct, get next question 142 # if answer is correct, get next question
148 if grade > 0.999: 143 if grade > 0.999:
@@ -159,9 +154,8 @@ class StudentKnowledge(object): @@ -159,9 +154,8 @@ class StudentKnowledge(object):
159 self.wrong_answers += 1 154 self.wrong_answers += 1
160 factory = self.deps.node[self.current_topic]['factory'] 155 factory = self.deps.node[self.current_topic]['factory']
161 self.questions.append(factory[q['ref']].generate()) 156 self.questions.append(factory[q['ref']].generate())
162 -  
163 # returns answered and corrected question 157 # returns answered and corrected question
164 - return ref, grade 158 + return q
165 159
166 160
167 # ======================================================================== 161 # ========================================================================
@@ -180,10 +174,6 @@ class StudentKnowledge(object): @@ -180,10 +174,6 @@ class StudentKnowledge(object):
180 return self.current_question 174 return self.current_question
181 175
182 # ------------------------------------------------------------------------ 176 # ------------------------------------------------------------------------
183 - def get_finished_questions(self):  
184 - return self.finished_questions  
185 -  
186 - # ------------------------------------------------------------------------  
187 def get_current_topic(self): 177 def get_current_topic(self):
188 return self.current_topic 178 return self.current_topic
189 179
@@ -206,7 +196,7 @@ class StudentKnowledge(object): @@ -206,7 +196,7 @@ class StudentKnowledge(object):
206 196
207 # ------------------------------------------------------------------------ 197 # ------------------------------------------------------------------------
208 def get_topic_progress(self): 198 def get_topic_progress(self):
209 - return len(self.finished_questions) / (1 + len(self.finished_questions) + len(self.questions)) 199 + return self.correct_answers / (1 + self.correct_answers + len(self.questions))
210 200
211 # ------------------------------------------------------------------------ 201 # ------------------------------------------------------------------------
212 def get_topic_level(self, topic): 202 def get_topic_level(self, topic):
@@ -106,23 +106,32 @@ class LearnApp(object): @@ -106,23 +106,32 @@ class LearnApp(object):
106 # ------------------------------------------------------------------------ 106 # ------------------------------------------------------------------------
107 def check_answer(self, uid, answer): 107 def check_answer(self, uid, answer):
108 knowledge = self.online[uid]['state'] 108 knowledge = self.online[uid]['state']
109 - ref, grade = knowledge.check_answer(answer) # also moves to next question  
110 - logger.info(f'User "{uid}" got {grade:.2} in question "{ref}"')  
111 -  
112 - if knowledge.get_current_question() is None:  
113 - # finished topic, save into database  
114 - finished_topic = knowledge.get_current_topic()  
115 - level = knowledge.get_topic_level(finished_topic)  
116 - date = str(knowledge.get_topic_date(finished_topic))  
117 - finished_questions = knowledge.get_finished_questions()  
118 - logger.info(f'User "{uid}" finished "{finished_topic}"')  
119 -  
120 - with self.db_session(autoflush=False) as s:  
121 - # save topic  
122 - a = s.query(StudentTopic).filter_by(student_id=uid, topic_id=finished_topic).one_or_none() 109 + q = knowledge.check_answer(answer) # also moves to next question
  110 + logger.info(f'User "{uid}" got {q["grade"]:.2} in question "{q["ref"]}"')
  111 + topic = knowledge.get_current_topic()
  112 +
  113 + # always save grade of answered question
  114 + with self.db_session(autoflush=False) as s:
  115 + s.add(Answer(
  116 + ref=q['ref'],
  117 + grade=q['grade'],
  118 + starttime=str(q['start_time']),
  119 + finishtime=str(q['finish_time']),
  120 + student_id=uid,
  121 + topic_id=topic))
  122 + logger.debug(f'Saved "{q["ref"]}" into database')
  123 +
  124 + if knowledge.get_current_question() is None:
  125 + # finished topic, save into database
  126 + logger.info(f'User "{uid}" finished "{topic}"')
  127 + level = knowledge.get_topic_level(topic)
  128 + date = str(knowledge.get_topic_date(topic))
  129 +
  130 + # with self.db_session(autoflush=False) as s:
  131 + a = s.query(StudentTopic).filter_by(student_id=uid, topic_id=topic).one_or_none()
123 if a is None: 132 if a is None:
124 # insert new studenttopic into database 133 # insert new studenttopic into database
125 - t = s.query(Topic).get(finished_topic) 134 + t = s.query(Topic).get(topic)
126 a = StudentTopic(level=level, date=date, topic=t) 135 a = StudentTopic(level=level, date=date, topic=t)
127 u = s.query(Student).get(uid) 136 u = s.query(Student).get(uid)
128 u.topics.append(a) 137 u.topics.append(a)
@@ -132,21 +141,9 @@ class LearnApp(object): @@ -132,21 +141,9 @@ class LearnApp(object):
132 a.date = date 141 a.date = date
133 142
134 s.add(a) 143 s.add(a)
135 - logger.debug(f'Saved topic "{finished_topic}" into database')  
136 -  
137 - # save answered questions from finished_questions list  
138 - s.add_all([  
139 - Answer(  
140 - ref=q['ref'],  
141 - grade=q['grade'],  
142 - starttime=str(q['start_time']),  
143 - finishtime=str(q['finish_time']),  
144 - student_id=uid,  
145 - topic_id=finished_topic)  
146 - for q in finished_questions])  
147 - logger.debug(f'Saved {len(finished_questions)} answers into database')  
148 -  
149 - return grade 144 + logger.debug(f'Saved topic "{topic}" into database')
  145 +
  146 + return q['grade']
150 147
151 # ------------------------------------------------------------------------ 148 # ------------------------------------------------------------------------
152 # Start new topic 149 # Start new topic