69b120315e463074075c3e91e6e0c84a770441f7
[quizzer.git] / quizzer / ui / __init__.py
1 class UserInterface (object):
2     "Give a quiz over a generic user interface"
3     def __init__(self, quiz=None, answers=None):
4         self.quiz = quiz
5         if answers is None:
6             answers = {}
7         self.answers = answers
8
9     def run(self):
10         raise NotImplementedError()
11
12     def display_results(self):
13         raise NotImplementedError()
14
15     def get_question(self):
16         remaining = self.get_unanswered()
17         if remaining:
18             return remaining[0]
19
20     def process_answer(self, question, answer):
21         if question not in self.answers:
22             self.answers[question] = []
23         correct = question.check(answer)
24         self.answers[question].append({
25                 'answer': answer,
26                 'correct': correct,
27                 })
28         return correct
29
30     def get_answered(self):
31         return [q for q in self.quiz if q in self.answers]
32
33     def get_unanswered(self):
34         return [q for q in self.quiz if q not in self.answers]
35
36     def get_correctly_answered(self):
37         return [q for q in self.quiz
38                 if True in [a['correct'] for a in self.answers.get(q, [])]]
39
40     def get_never_correctly_answered(self):
41         return [q for q in self.quiz
42                 if True not in [a['correct'] for a in self.answers.get(q, [])]]