Commit 41d56522cf719f184135595add656a883c8db79e

Authored by Miguel Barao
1 parent 34778ed8
Exists in master and in 1 other branch dev

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)
... ...