Commit b44bf1c04f9542d88b86c26409a0c294314a2c6f
1 parent
c6d6055c
Exists in
master
and in
1 other branch
- 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
knowledge.py
@@ -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): |
learnapp.py
@@ -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 |