Hot-keys on this page
r m x p toggle line displays
j k next/prev highlighted chunk
0 (zero) top of page
1 (one) first highlighted chunk
1# -*- coding: utf-8 -*-
2"""
3@file
4@brief Base classes.
5"""
6from collections import OrderedDict
7from .base_classes import Activity
10class QuestionChoice(Activity):
11 """
12 Defines a question with multiple choices.
13 """
15 def __init__(self, eid, name, lang, title, notion=None,
16 description=None, answers=None,
17 expected_answers=None, show=None):
18 """
19 @param eid identifier
20 @param name unique name
21 @param lang language
22 @param title display name
23 @param notion notion (@see cl Notion)
24 @param description description
25 @param answers answers (dictionary ``{ code, display }``)
26 @param expected_answers expected_answers, list of codes
27 @param show one image to show
28 """
29 if not isinstance(expected_answers, list):
30 raise TypeError( # pragma: no cover
31 "expected_answers must be a list")
32 if isinstance(answers, list):
33 ans = OrderedDict()
34 for i, k in enumerate(answers):
35 ans["a%d" % i] = k
36 answers = ans
37 rev = {v: k for k, v in answers.items()}
38 expe = []
39 for a in expected_answers:
40 try:
41 v = rev[a]
42 except KeyError: # pragma: no cover
43 raise KeyError( # pylint: disable=W0707
44 "Unable to find '{0}' in {1}".format(
45 a, list(sorted(rev))))
46 expe.append(v)
47 expected_answers = expe
48 elif isinstance(answers, dict):
49 ans = OrderedDict()
50 for i, k in enumerate(sorted(answers.items())):
51 ans["a%d" % i] = k
52 answers = ans
53 elif answers is None:
54 # input, not checkboxes
55 answers = None
56 elif not isinstance(answers, OrderedDict):
57 raise TypeError( # pragma: no cover
58 "answers must be a of OrderedDict")
59 if answers is not None:
60 for exp in expected_answers:
61 if exp not in answers:
62 raise ValueError( # pragma: no cover
63 "One expected answer '{0}' is unknown.".format(exp))
64 content = dict(answers=answers,
65 expected_answers=expected_answers)
66 if show:
67 content['show'] = show
68 Activity.__init__(self, eid, name, lang, title, notion=notion,
69 description=description, content=content)
71 @property
72 def Answers(self):
73 """
74 Returns the list of answers.
75 """
76 return self._col_content['answers']
78 @property
79 def ExpectedAnswers(self):
80 """
81 Returns the list of expected answers.
82 """
83 return self._col_content['expected_answers']