Hide keyboard shortcuts

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 

8 

9 

10class QuestionChoice(Activity): 

11 """ 

12 Defines a question with multiple choices. 

13 """ 

14 

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) 

70 

71 @property 

72 def Answers(self): 

73 """ 

74 Returns the list of answers. 

75 """ 

76 return self._col_content['answers'] 

77 

78 @property 

79 def ExpectedAnswers(self): 

80 """ 

81 Returns the list of expected answers. 

82 """ 

83 return self._col_content['expected_answers']