Commit be1efae85b214151d0b1d749b17e9d3664ea3047
1 parent
24244d74
Exists in
master
and in
1 other branch
new feature: in the test yaml, choose several questions from a list
instead of just one.
Showing
2 changed files
with
32 additions
and
27 deletions
Show diff stats
perguntations/app.py
... | ... | @@ -114,9 +114,11 @@ class App(): |
114 | 114 | logger.info('Students not yet allowed to login.') |
115 | 115 | |
116 | 116 | # pre-generate tests |
117 | - logger.info('Generating tests for %d students...', len(self.allowed)) | |
118 | - self._pregenerate_tests(len(self.allowed)) | |
119 | - logger.info('Tests done.') | |
117 | + if self.allowed: | |
118 | + logger.info('Generating tests for %d students...', len(self.allowed)) | |
119 | + self._pregenerate_tests(len(self.allowed)) | |
120 | + else: | |
121 | + logger.info('No tests were generated.') | |
120 | 122 | |
121 | 123 | # ------------------------------------------------------------------------ |
122 | 124 | async def login(self, uid, try_pw): |
... | ... | @@ -458,7 +460,7 @@ class App(): |
458 | 460 | |
459 | 461 | enrolled = set(s[0] for s in self._get_all_students()) # in database |
460 | 462 | self.allowed.update(allowed_in_file & enrolled) |
461 | - logger.info('Allowed %d students provided in %s.', len(self.allowed), | |
463 | + logger.info('Allowed %d students provided in "%s"', len(self.allowed), | |
462 | 464 | filename) |
463 | 465 | |
464 | 466 | not_enrolled = allowed_in_file - enrolled | ... | ... |
perguntations/test.py
... | ... | @@ -49,7 +49,7 @@ class TestFactory(dict): |
49 | 49 | 'autosubmit': False, |
50 | 50 | 'debug': False, |
51 | 51 | 'show_ref': False, |
52 | - # 'allow_students': None, | |
52 | + 'allow_students': [], | |
53 | 53 | }) |
54 | 54 | self.update(conf) |
55 | 55 | |
... | ... | @@ -123,7 +123,8 @@ class TestFactory(dict): |
123 | 123 | if qmissing: |
124 | 124 | raise TestFactoryException(f'Could not find questions {qmissing}.') |
125 | 125 | |
126 | - | |
126 | + # if isinstance(allow_students, str): FIXME | |
127 | + # try to o | |
127 | 128 | |
128 | 129 | # ------------------------------------------------------------------------ |
129 | 130 | def check_test_ref(self): |
... | ... | @@ -237,27 +238,29 @@ class TestFactory(dict): |
237 | 238 | nerr = 0 # count errors during questions generation |
238 | 239 | |
239 | 240 | for qlist in self['questions']: |
240 | - # choose one question variant | |
241 | - qref = random.choice(qlist['ref']) | |
242 | - | |
243 | - # generate instance of question | |
244 | - try: | |
245 | - question = await self.question_factory[qref].gen_async() | |
246 | - except QuestionException: | |
247 | - logger.error('Can\'t generate question "%s". Skipping.', qref) | |
248 | - nerr += 1 | |
249 | - continue | |
250 | - | |
251 | - # some defaults | |
252 | - if question['type'] in ('information', 'success', 'warning', | |
253 | - 'alert'): | |
254 | - question['points'] = qlist.get('points', 0.0) | |
255 | - else: | |
256 | - question['points'] = qlist.get('points', 1.0) | |
257 | - question['number'] = qnum # counter for non informative panels | |
258 | - qnum += 1 | |
259 | - | |
260 | - questions.append(question) | |
241 | + # choose list of question variants | |
242 | + choose = qlist.get('choose', 1) | |
243 | + qrefs = random.sample(qlist['ref'], k=choose) | |
244 | + | |
245 | + for qref in qrefs: | |
246 | + # generate instance of question | |
247 | + try: | |
248 | + question = await self.question_factory[qref].gen_async() | |
249 | + except QuestionException: | |
250 | + logger.error('Can\'t generate question "%s". Skipping.', qref) | |
251 | + nerr += 1 | |
252 | + continue | |
253 | + | |
254 | + # some defaults | |
255 | + if question['type'] in ('information', 'success', 'warning', | |
256 | + 'alert'): | |
257 | + question['points'] = qlist.get('points', 0.0) | |
258 | + else: | |
259 | + question['points'] = qlist.get('points', 1.0) | |
260 | + question['number'] = qnum # counter for non informative panels | |
261 | + qnum += 1 | |
262 | + | |
263 | + questions.append(question) | |
261 | 264 | |
262 | 265 | # setup scale |
263 | 266 | total_points = sum(q['points'] for q in questions) | ... | ... |