1 import codecs as _codecs
4 from . import __version__
7 class AnswerDatabase (dict):
8 def __init__(self, path=None, encoding=None):
9 super(AnswerDatabase, self).__init__()
11 self.encoding = encoding
13 def _open(self, mode='r', path=None, encoding=None):
17 self.encoding = encoding
18 return _codecs.open(self.path, mode, self.encoding)
20 def load(self, **kwargs):
21 with self._open(mode='r', **kwargs) as f:
23 version = data.get('version', None)
24 if version != __version__:
25 raise NotImplementedError('upgrade from {} to {}'.format(
26 version, __version__))
27 self.update(data['answers'])
29 def save(self, **kwargs):
31 'version': __version__,
34 with self._open(mode='w', **kwargs) as f:
36 data, f, indent=2, separators=(',', ': '), sort_keys=True)
39 def add(self, question, answer, correct):
40 if question.id not in self:
41 self[question.id] = []
42 self[question.id].append({
47 def get_answered(self, questions):
48 return [q for q in questions if q.id in self]
50 def get_unanswered(self, questions):
51 return [q for q in questions if q.id not in self]
53 def get_correctly_answered(self, questions):
54 return [q for q in questions
55 if True in [a['correct'] for a in self.get(q.id, [])]]
57 def get_never_correctly_answered(self, questions):
58 return [q for q in questions
59 if True not in [a['correct'] for a in self.get(q.id, [])]]