Add script invocation to ScriptQuestion
[quizzer.git] / quizzer / ui / __init__.py
1 from .. import answerdb as _answerdb
2
3
4 class UserInterface (object):
5     "Give a quiz over a generic user interface"
6     def __init__(self, quiz=None, answers=None, stack=None):
7         self.quiz = quiz
8         if answers is None:
9             answers = _answerdb.AnswerDatabase()
10         self.answers = answers
11         if stack is None:
12             stack = self.answers.get_never_correctly_answered(
13                 questions=quiz.leaf_questions())
14         self.stack = stack
15
16     def run(self):
17         raise NotImplementedError()
18
19     def display_results(self):
20         raise NotImplementedError()
21
22     def get_question(self):
23         if self.stack:
24             return self.stack.pop(0)
25
26     def process_answer(self, question, answer):
27         correct = question.check(answer)
28         self.answers.add(question=question, answer=answer, correct=correct)
29         if not correct:
30             self.stack.insert(0, question)
31             for qid in reversed(question.dependencies):
32                 self.stack.insert(0, self.quiz.get(id=qid))
33         return correct