Commit 1ad906edd57901ac8781e224a084e50104fdb512

Authored by Miguel Barão
1 parent f2567db3
Exists in dev

remove synchronous question generators

aprendizations/learnapp.py
... ... @@ -125,7 +125,7 @@ class LearnApp():
125 125 for qref, qfactory in self.factory.items():
126 126 logger.debug('checking %s...', qref)
127 127 try:
128   - question = qfactory.generate()
  128 + question = asyncio.run(qfactory.generate())
129 129 except QuestionException as exc:
130 130 logger.error(exc)
131 131 errors += 1
... ...
aprendizations/questions.py
... ... @@ -5,6 +5,7 @@ Description: Classes the implement several types of questions.
5 5  
6 6  
7 7 # python standard library
  8 +import asyncio
8 9 from datetime import datetime
9 10 import logging
10 11 from os import path
... ... @@ -14,7 +15,7 @@ from typing import Any, Dict, NewType
14 15 import uuid
15 16  
16 17 # this project
17   -from aprendizations.tools import run_script, run_script_async
  18 +from aprendizations.tools import run_script_async
18 19  
19 20 # setup logger for this module
20 21 logger = logging.getLogger(__name__)
... ... @@ -506,36 +507,39 @@ class QuestionTextArea(Question):
506 507 self['correct'] = path.join(self['path'], self['correct'])
507 508  
508 509 # ------------------------------------------------------------------------
509   - def correct(self) -> None:
510   - super().correct()
511   -
512   - if self['answer'] is not None: # correct answer and parse yaml ouput
513   - out = run_script(
514   - script=self['correct'],
515   - args=self['args'],
516   - stdin=self['answer'],
517   - timeout=self['timeout']
518   - )
519   -
520   - if out is None:
521   - logger.warning('No grade after running "%s".', self["correct"])
522   - self['comments'] = ('Erro interno durante a correcção. '
523   - 'Por favor reporte este erro')
524   - self['grade'] = 0.0
525   - elif isinstance(out, dict):
526   - self['comments'] = out.get('comments', '')
527   - try:
528   - self['grade'] = float(out['grade'])
529   - except ValueError:
530   - logger.error('Output error in "%s".', self["correct"])
531   - except KeyError:
532   - logger.error('No grade in "%s".', self["correct"])
533   - else:
534   - try:
535   - self['grade'] = float(out)
536   - except (TypeError, ValueError):
537   - logger.error('Invalid grade in "%s".', self["correct"])
538   -
  510 + # def correct(self) -> None:
  511 + # super().correct()
  512 + #
  513 + # if self['answer'] is not None: # correct answer and parse yaml ouput
  514 + # out = run_script(
  515 + # script=self['correct'],
  516 + # args=self['args'],
  517 + # stdin=self['answer'],
  518 + # timeout=self['timeout']
  519 + # )
  520 + #
  521 + # if out is None:
  522 + # logger.warning('No grade after running "%s".', self["correct"])
  523 + # self['comments'] = ('Erro interno durante a correcção. '
  524 + # 'Por favor reporte este erro')
  525 + # self['grade'] = 0.0
  526 + # elif isinstance(out, dict):
  527 + # self['comments'] = out.get('comments', '')
  528 + # try:
  529 + # self['grade'] = float(out['grade'])
  530 + # except ValueError:
  531 + # logger.error('Output error in "%s".', self["correct"])
  532 + # except KeyError:
  533 + # logger.error('No grade in "%s".', self["correct"])
  534 + # else:
  535 + # try:
  536 + # self['grade'] = float(out)
  537 + # except (TypeError, ValueError):
  538 + # logger.error('Invalid grade in "%s".', self["correct"])
  539 + #
  540 + def correct(self) -> None: # FIXME
  541 + asyncio.run(self.correct_async())
  542 +
539 543 # ------------------------------------------------------------------------
540 544 async def correct_async(self) -> None:
541 545 super().correct()
... ... @@ -663,7 +667,7 @@ class QFactory():
663 667 self.qdict = qdict
664 668  
665 669 # ------------------------------------------------------------------------
666   - async def gen_async(self) -> Question:
  670 + async def generate(self) -> Question:
667 671 '''
668 672 generates a question instance of QuestionRadio, QuestionCheckbox, ...,
669 673 which is a descendent of base class Question.
... ...
aprendizations/student.py
... ... @@ -114,7 +114,7 @@ class StudentState():
114 114 questions = topic['questions'][:k]
115 115 logger.debug('selected questions: %s', ', '.join(questions))
116 116  
117   - self.questions: List[Question] = [await self.factory[ref].gen_async()
  117 + self.questions: List[Question] = [await self.factory[ref].generate()
118 118 for ref in questions]
119 119  
120 120 logger.debug('generated %s questions', len(self.questions))
... ... @@ -171,7 +171,7 @@ class StudentState():
171 171 elif question['status'] == 'wrong':
172 172 if question['append_wrong']:
173 173 logger.debug(' wrong answer => append new question')
174   - new_question = await self.factory[question['ref']].gen_async()
  174 + new_question = await self.factory[question['ref']].generate()
175 175 self.questions.append(new_question)
176 176 self.next_question()
177 177  
... ...