5bbb214c8dcc471e0870feed2895867267d3db31
[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 = quiz.leaf_questions()
13         self.stack = stack
14
15     def run(self):
16         raise NotImplementedError()
17
18     def display_results(self):
19         raise NotImplementedError()
20
21     def get_question(self):
22         if self.stack:
23             return self.stack.pop(0)
24
25     def process_answer(self, question, answer):
26         correct = question.check(answer)
27         self.answers.add(question=question, answer=answer, correct=correct)
28         if not correct:
29             self.stack.insert(0, question)
30             for qid in reversed(question.dependencies):
31                 self.stack.insert(0, self.quiz.get(id=qid))
32         return correct