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,13 +144,13 @@ class StudentKnowledge(object): | ||
| 144 | # - if answer ok, goes to next question | 144 | # - if answer ok, goes to next question |
| 145 | # - if wrong, counts number of tries. If exceeded, moves on. | 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 | logger.debug('StudentKnowledge.check_answer()') | 148 | logger.debug('StudentKnowledge.check_answer()') |
| 149 | 149 | ||
| 150 | q = self.current_question | 150 | q = self.current_question |
| 151 | q['answer'] = answer | 151 | q['answer'] = answer |
| 152 | q['finish_time'] = datetime.now() | 152 | q['finish_time'] = datetime.now() |
| 153 | - grade = q.correct() | 153 | + grade = await q.correct_async() |
| 154 | 154 | ||
| 155 | logger.debug(f'Grade {grade:.2} ({q["ref"]})') | 155 | logger.debug(f'Grade {grade:.2} ({q["ref"]})') |
| 156 | 156 |
learnapp.py
| @@ -138,14 +138,14 @@ class LearnApp(object): | @@ -138,14 +138,14 @@ class LearnApp(object): | ||
| 138 | # ------------------------------------------------------------------------ | 138 | # ------------------------------------------------------------------------ |
| 139 | # checks answer (updating student state) and returns grade. | 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 | knowledge = self.online[uid]['state'] | 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 | logger.info(f'User "{uid}" got {q["grade"]:.2} in question "{q["ref"]}"') | 144 | logger.info(f'User "{uid}" got {q["grade"]:.2} in question "{q["ref"]}"') |
| 145 | topic = knowledge.get_current_topic() | 145 | topic = knowledge.get_current_topic() |
| 146 | 146 | ||
| 147 | # always save grade of answered question | 147 | # always save grade of answered question |
| 148 | - with self.db_session(autoflush=False) as s: | 148 | + with self.db_session() as s: |
| 149 | s.add(Answer( | 149 | s.add(Answer( |
| 150 | ref=q['ref'], | 150 | ref=q['ref'], |
| 151 | grade=q['grade'], | 151 | grade=q['grade'], |
| @@ -155,13 +155,13 @@ class LearnApp(object): | @@ -155,13 +155,13 @@ class LearnApp(object): | ||
| 155 | topic_id=topic)) | 155 | topic_id=topic)) |
| 156 | logger.debug(f'Saved "{q["ref"]}" into database') | 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 | a = s.query(StudentTopic).filter_by(student_id=uid, topic_id=topic).one_or_none() | 165 | a = s.query(StudentTopic).filter_by(student_id=uid, topic_id=topic).one_or_none() |
| 166 | if a is None: | 166 | if a is None: |
| 167 | # insert new studenttopic into database | 167 | # insert new studenttopic into database |
| @@ -175,11 +175,10 @@ class LearnApp(object): | @@ -175,11 +175,10 @@ class LearnApp(object): | ||
| 175 | a.date = date | 175 | a.date = date |
| 176 | 176 | ||
| 177 | s.add(a) | 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 | return 'finished_topic' | 180 | return 'finished_topic' |
| 181 | + | ||
| 183 | if q['tries'] > 0 and q['grade'] <= 0.999: | 182 | if q['tries'] > 0 and q['grade'] <= 0.999: |
| 184 | return 'wrong' | 183 | return 'wrong' |
| 185 | # elif q['tries'] <= 0 and q['grade'] <= 0.999: | 184 | # elif q['tries'] <= 0 and q['grade'] <= 0.999: |
serve.py
| @@ -275,8 +275,10 @@ class QuestionHandler(BaseHandler): | @@ -275,8 +275,10 @@ class QuestionHandler(BaseHandler): | ||
| 275 | answer = answer[0] | 275 | answer = answer[0] |
| 276 | 276 | ||
| 277 | # check answer in another thread (nonblocking) | 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 | # get next question (same, new or None) | 283 | # get next question (same, new or None) |
| 282 | question = self.learn.get_current_question(user) | 284 | question = self.learn.get_current_question(user) |