diff --git a/knowledge.py b/knowledge.py index 981a72f..2377576 100644 --- a/knowledge.py +++ b/knowledge.py @@ -144,13 +144,13 @@ class StudentKnowledge(object): # - if answer ok, goes to next question # - if wrong, counts number of tries. If exceeded, moves on. # ------------------------------------------------------------------------ - def check_answer(self, answer): + async def check_answer(self, answer): logger.debug('StudentKnowledge.check_answer()') q = self.current_question q['answer'] = answer q['finish_time'] = datetime.now() - grade = q.correct() + grade = await q.correct_async() logger.debug(f'Grade {grade:.2} ({q["ref"]})') diff --git a/learnapp.py b/learnapp.py index 87fb66a..9013e15 100644 --- a/learnapp.py +++ b/learnapp.py @@ -138,14 +138,14 @@ class LearnApp(object): # ------------------------------------------------------------------------ # checks answer (updating student state) and returns grade. # ------------------------------------------------------------------------ - def check_answer(self, uid, answer): + async def check_answer(self, uid, answer): knowledge = self.online[uid]['state'] - q = knowledge.check_answer(answer) # also moves to next question + q = await knowledge.check_answer(answer) # also moves to next question logger.info(f'User "{uid}" got {q["grade"]:.2} in question "{q["ref"]}"') topic = knowledge.get_current_topic() # always save grade of answered question - with self.db_session(autoflush=False) as s: + with self.db_session() as s: s.add(Answer( ref=q['ref'], grade=q['grade'], @@ -155,13 +155,13 @@ class LearnApp(object): topic_id=topic)) logger.debug(f'Saved "{q["ref"]}" into database') - if knowledge.get_current_question() is None: - # finished topic, save into database - logger.info(f'User "{uid}" finished "{topic}"') - level = knowledge.get_topic_level(topic) - date = str(knowledge.get_topic_date(topic)) + if knowledge.get_current_question() is None: + # finished topic, save into database + logger.info(f'User "{uid}" finished "{topic}"') + level = knowledge.get_topic_level(topic) + date = str(knowledge.get_topic_date(topic)) - # with self.db_session(autoflush=False) as s: + with self.db_session() as s: a = s.query(StudentTopic).filter_by(student_id=uid, topic_id=topic).one_or_none() if a is None: # insert new studenttopic into database @@ -175,11 +175,10 @@ class LearnApp(object): a.date = date s.add(a) - logger.debug(f'Saved topic "{topic}" into database') - - if knowledge.get_current_question() is None: + logger.debug(f'Saved topic "{topic}" into database') return 'finished_topic' + if q['tries'] > 0 and q['grade'] <= 0.999: return 'wrong' # elif q['tries'] <= 0 and q['grade'] <= 0.999: diff --git a/serve.py b/serve.py index a23d599..073e3e8 100755 --- a/serve.py +++ b/serve.py @@ -275,8 +275,10 @@ class QuestionHandler(BaseHandler): answer = answer[0] # check answer in another thread (nonblocking) - action = await asyncio.get_event_loop().run_in_executor(None, - self.learn.check_answer, user, answer) + # action = await asyncio.get_event_loop().run_in_executor(None, + # self.learn.check_answer, user, answer) + action = await self.learn.check_answer(user, answer) + # get next question (same, new or None) question = self.learn.get_current_question(user) -- libgit2 0.21.2