3 import codecs as _codecs
6 from . import __version__
9 class AnswerDatabase (dict):
10 def __init__(self, path=None, encoding=None):
11 super(AnswerDatabase, self).__init__()
13 self.encoding = encoding
15 def _open(self, mode='r', path=None, encoding=None):
19 self.encoding = encoding
20 return _codecs.open(self.path, mode, self.encoding)
22 def load(self, **kwargs):
23 with self._open(mode='r', **kwargs) as f:
25 version = data.get('version', None)
26 if version != __version__:
27 raise NotImplementedError('upgrade from {} to {}'.format(
28 version, __version__))
29 self.update(data['answers'])
31 def save(self, **kwargs):
33 'version': __version__,
36 with self._open(mode='w', **kwargs) as f:
38 data, f, indent=2, separators=(',', ': '), sort_keys=True)
41 def add(self, question, answer, correct):
42 if question.id not in self:
43 self[question.id] = []
44 self[question.id].append({
49 def get_answered(self, questions):
50 return [q for q in questions if q.id in self]
52 def get_unanswered(self, questions):
53 return [q for q in questions if q.id not in self]
55 def get_correctly_answered(self, questions):
56 return [q for q in questions
57 if True in [a['correct'] for a in self.get(q.id, [])]]
59 def get_never_correctly_answered(self, questions):
60 return [q for q in questions
61 if True not in [a['correct'] for a in self.get(q.id, [])]]