Commit 41d56522cf719f184135595add656a883c8db79e
1 parent
34778ed8
Exists in
master
and in
1 other branch
check answer is now async
Showing
3 changed files
with
17 additions
and
16 deletions
Show diff stats
knowledge.py
| ... | ... | @@ -144,13 +144,13 @@ class StudentKnowledge(object): |
| 144 | 144 | # - if answer ok, goes to next question |
| 145 | 145 | # - if wrong, counts number of tries. If exceeded, moves on. |
| 146 | 146 | # ------------------------------------------------------------------------ |
| 147 | - def check_answer(self, answer): | |
| 147 | + async def check_answer(self, answer): | |
| 148 | 148 | logger.debug('StudentKnowledge.check_answer()') |
| 149 | 149 | |
| 150 | 150 | q = self.current_question |
| 151 | 151 | q['answer'] = answer |
| 152 | 152 | q['finish_time'] = datetime.now() |
| 153 | - grade = q.correct() | |
| 153 | + grade = await q.correct_async() | |
| 154 | 154 | |
| 155 | 155 | logger.debug(f'Grade {grade:.2} ({q["ref"]})') |
| 156 | 156 | ... | ... |
learnapp.py
| ... | ... | @@ -138,14 +138,14 @@ class LearnApp(object): |
| 138 | 138 | # ------------------------------------------------------------------------ |
| 139 | 139 | # checks answer (updating student state) and returns grade. |
| 140 | 140 | # ------------------------------------------------------------------------ |
| 141 | - def check_answer(self, uid, answer): | |
| 141 | + async def check_answer(self, uid, answer): | |
| 142 | 142 | knowledge = self.online[uid]['state'] |
| 143 | - q = knowledge.check_answer(answer) # also moves to next question | |
| 143 | + q = await knowledge.check_answer(answer) # also moves to next question | |
| 144 | 144 | logger.info(f'User "{uid}" got {q["grade"]:.2} in question "{q["ref"]}"') |
| 145 | 145 | topic = knowledge.get_current_topic() |
| 146 | 146 | |
| 147 | 147 | # always save grade of answered question |
| 148 | - with self.db_session(autoflush=False) as s: | |
| 148 | + with self.db_session() as s: | |
| 149 | 149 | s.add(Answer( |
| 150 | 150 | ref=q['ref'], |
| 151 | 151 | grade=q['grade'], |
| ... | ... | @@ -155,13 +155,13 @@ class LearnApp(object): |
| 155 | 155 | topic_id=topic)) |
| 156 | 156 | logger.debug(f'Saved "{q["ref"]}" into database') |
| 157 | 157 | |
| 158 | - if knowledge.get_current_question() is None: | |
| 159 | - # finished topic, save into database | |
| 160 | - logger.info(f'User "{uid}" finished "{topic}"') | |
| 161 | - level = knowledge.get_topic_level(topic) | |
| 162 | - date = str(knowledge.get_topic_date(topic)) | |
| 158 | + if knowledge.get_current_question() is None: | |
| 159 | + # finished topic, save into database | |
| 160 | + logger.info(f'User "{uid}" finished "{topic}"') | |
| 161 | + level = knowledge.get_topic_level(topic) | |
| 162 | + date = str(knowledge.get_topic_date(topic)) | |
| 163 | 163 | |
| 164 | - # with self.db_session(autoflush=False) as s: | |
| 164 | + with self.db_session() as s: | |
| 165 | 165 | a = s.query(StudentTopic).filter_by(student_id=uid, topic_id=topic).one_or_none() |
| 166 | 166 | if a is None: |
| 167 | 167 | # insert new studenttopic into database |
| ... | ... | @@ -175,11 +175,10 @@ class LearnApp(object): |
| 175 | 175 | a.date = date |
| 176 | 176 | |
| 177 | 177 | s.add(a) |
| 178 | - logger.debug(f'Saved topic "{topic}" into database') | |
| 179 | 178 | |
| 180 | - | |
| 181 | - if knowledge.get_current_question() is None: | |
| 179 | + logger.debug(f'Saved topic "{topic}" into database') | |
| 182 | 180 | return 'finished_topic' |
| 181 | + | |
| 183 | 182 | if q['tries'] > 0 and q['grade'] <= 0.999: |
| 184 | 183 | return 'wrong' |
| 185 | 184 | # elif q['tries'] <= 0 and q['grade'] <= 0.999: | ... | ... |
serve.py
| ... | ... | @@ -275,8 +275,10 @@ class QuestionHandler(BaseHandler): |
| 275 | 275 | answer = answer[0] |
| 276 | 276 | |
| 277 | 277 | # check answer in another thread (nonblocking) |
| 278 | - action = await asyncio.get_event_loop().run_in_executor(None, | |
| 279 | - self.learn.check_answer, user, answer) | |
| 278 | + # action = await asyncio.get_event_loop().run_in_executor(None, | |
| 279 | + # self.learn.check_answer, user, answer) | |
| 280 | + action = await self.learn.check_answer(user, answer) | |
| 281 | + | |
| 280 | 282 | |
| 281 | 283 | # get next question (same, new or None) |
| 282 | 284 | question = self.learn.get_current_question(user) | ... | ... |