Commit 008f89672e0e3850a825f65eb583bff208f94420
1 parent
a08905e3
Exists in
master
and in
1 other branch
- check all questions before aborting.
Showing
3 changed files
with
28 additions
and
10 deletions
Show diff stats
BUGS.md
1 | 1 | |
2 | 2 | # BUGS |
3 | 3 | |
4 | -- abortar depois de testar todas as perguntas, caso haja algum erro. | |
5 | -- choose: n em perguntas checkbox | |
6 | 4 | - se aluno tem teste activo e é allowed uma segunda vez, deve manter o mesmo teste. adicionar opcao para eliminar um teste em curso. |
7 | 5 | - melhorar o botao de autorizar (desliga-se), usar antes um botao? |
8 | 6 | e.g. retornar None quando nao ha alteracoes relativamente à última vez. |
... | ... | @@ -11,7 +9,6 @@ ou usar push (websockets?) |
11 | 9 | - pymips: nao pode executar syscalls do spim. |
12 | 10 | - perguntas checkbox [right,wrong] com pelo menos uma opção correcta. |
13 | 11 | - questions.py textarea has a abspath which does not make sense! why is it there? not working for perguntations, but seems to work for aprendizations |
14 | -- initdb está a inicializar com passwords iguais aos numeros. deveria ser vazio para alunos definirem. | |
15 | 12 | - servir imagens das perguntas não funciona. Necessario passar a ref da pergunta no link para poder ajustar o path no FileHandler. Tem o problema do teste em JSON não conter a imagem. |
16 | 13 | - o eventloop está a bloquear. correção do teste é blocking. usar threadpoolexecutor? |
17 | 14 | - submissao faz um post ajax. |
... | ... | @@ -22,9 +19,7 @@ ou usar push (websockets?) |
22 | 19 | |
23 | 20 | - gerar teste qd o prof autoriza. |
24 | 21 | - enviar resposta de cada pergunta individualmente. |
25 | - | |
26 | 22 | - experimentar gerador de svg que inclua no markdown da pergunta e ver se funciona. |
27 | -- imagens jpg/png nas perguntas. | |
28 | 23 | - suportar cotacao to teste diferente de 20 (e.g. para juntar perguntas em papel). opcao "points: 18" que normaliza total para 18 em vez de 20. |
29 | 24 | - quando ha varias perguntas para escolher, escolher sucessivamente em vez de aleatoriamente. |
30 | 25 | - como refrescar a tabela de admin sem fazer reload da pagina? |
... | ... | @@ -33,7 +28,7 @@ ou usar push (websockets?) |
33 | 28 | - test: Cada pergunta respondida é logo submetida. |
34 | 29 | - test: calculadora javascript. |
35 | 30 | - admin: histograma das notas. |
36 | -- admin: gerar os testes no momento em que são autorizados, e não no login. | |
31 | +- admin: gerar os testes no momento em que são autorizados, e não no login. <- se prof autoriza aluno que já esta a realizar teste pode fazer reset e destruir teste??? | |
37 | 32 | - admin: mostrar as horas a que o teste terminou para os testes terminados. |
38 | 33 | - admin: histograma das notas. |
39 | 34 | - admin: mostrar teste gerado para aluno (tipo review). |
... | ... | @@ -51,7 +46,6 @@ ou usar push (websockets?) |
51 | 46 | usar isto para gerar svg que passa a fazer parte do texto da pergunta (markdown suporta tags svg?) |
52 | 47 | fazer funçao tex() que recebe formula e converte para svg. exemplo: |
53 | 48 | fr'''A formula é {tex("\sqrt{x]}")}''' |
54 | - | |
55 | 49 | - Gerar pdf's com todos os testes no final (pdfkit). |
56 | 50 | - manter registo dos unfocus durante o teste e de qual a pergunta visivel nesse momento |
57 | 51 | - permitir varios testes, aluno escolhe qual o teste que quer fazer. |
... | ... | @@ -68,6 +62,9 @@ ou usar push (websockets?) |
68 | 62 | |
69 | 63 | # FIXED |
70 | 64 | |
65 | +- abortar depois de testar todas as perguntas, caso haja algum erro. | |
66 | +- imagens jpg/png nas perguntas. | |
67 | +- initdb está a inicializar com passwords iguais aos numeros. deveria ser vazio para alunos definirem. | |
71 | 68 | - upgrade popper e fazer link. |
72 | 69 | - mover scripts js para head, com defer. ver todos os templates. |
73 | 70 | - update fontawesome to 5. | ... | ... |
demo/questions/questions-tutorial.yaml
... | ... | @@ -59,6 +59,7 @@ |
59 | 59 | O mesmo teste pode ser realizado várias vezes em vários turnos, não é necessário alterar nada. |
60 | 60 | |
61 | 61 | |
62 | +# ---------------------------------------------------------------------------- | |
62 | 63 | - type: information |
63 | 64 | ref: tut-questions |
64 | 65 | title: Especificação das perguntas |
... | ... | @@ -138,6 +139,8 @@ |
138 | 139 | correct: [1, 1, 0, 0, 0] |
139 | 140 | choose: 3 |
140 | 141 | shuffle: True |
142 | + | |
143 | + | |
141 | 144 | # ---------------------------------------------------------------------------- |
142 | 145 | - type: checkbox |
143 | 146 | ref: tut-checkbox |
... | ... | @@ -185,7 +188,10 @@ |
185 | 188 | - Opção 2 (não) |
186 | 189 | - Opção 3 (sim) |
187 | 190 | correct: [1, -1, -1, 1] |
191 | + choose: 3 | |
188 | 192 | shuffle: True |
193 | + | |
194 | + | |
189 | 195 | # ---------------------------------------------------------------------------- |
190 | 196 | - type: text |
191 | 197 | ref: tut-text |
... | ... | @@ -204,6 +210,8 @@ |
204 | 210 | |
205 | 211 | Neste exemplo a resposta correcta é `azul`, `Azul` ou `AZUL`. |
206 | 212 | correct: ['azul', 'Azul', 'AZUL'] |
213 | + | |
214 | + | |
207 | 215 | # --------------------------------------------------------------------------- |
208 | 216 | - type: text-regex |
209 | 217 | ref: tut-text-regex |
... | ... | @@ -222,6 +230,8 @@ |
222 | 230 | |
223 | 231 | Neste exemplo a expressão regular é `(VERDE|[Vv]erde)`. |
224 | 232 | correct: !regex '(VERDE|[Vv]erde)' |
233 | + | |
234 | + | |
225 | 235 | # --------------------------------------------------------------------------- |
226 | 236 | - type: numeric-interval |
227 | 237 | ref: tut-numeric-interval |
... | ... | @@ -241,6 +251,8 @@ |
241 | 251 | |
242 | 252 | Neste exemplo o intervalo de respostas correctas é [3.14, 3.15]. |
243 | 253 | correct: [3.14, 3.15] |
254 | + | |
255 | + | |
244 | 256 | # --------------------------------------------------------------------------- |
245 | 257 | - type: textarea |
246 | 258 | ref: tut-textarea |
... | ... | @@ -278,6 +290,7 @@ |
278 | 290 | lines: 3 |
279 | 291 | timeout: 5 |
280 | 292 | |
293 | + | |
281 | 294 | # --------------------------------------------------------------------------- |
282 | 295 | - type: information |
283 | 296 | ref: tut-information |
... | ... | @@ -307,7 +320,6 @@ |
307 | 320 | $$ |
308 | 321 | |
309 | 322 | |
310 | - | |
311 | 323 | # --------------------------------------------------------------------------- |
312 | 324 | - type: success |
313 | 325 | ref: tut-success |
... | ... | @@ -375,6 +387,7 @@ |
375 | 387 | |
376 | 388 | A linha de separação entre o cabeçalho e o corpo da tabela indica o alinhamento da coluna com os sinais de dois-pontos. |
377 | 389 | |
390 | + | |
378 | 391 | # ---------------------------------------------------------------------------- |
379 | 392 | - type: alert |
380 | 393 | ref: tut-alert |
... | ... | @@ -389,4 +402,5 @@ |
389 | 402 | - Imagens inline: não têm título definido e podem ser incluídas no meio de uma linha de texto usando``. |
390 | 403 | - Imagens centradas e com título: ``. O título aprece por baixo da imagem. O título pode ser uma string vazia. |
391 | 404 | |
405 | + | |
392 | 406 | # ---------------------------------------------------------------------------- | ... | ... |
test.py
... | ... | @@ -42,14 +42,21 @@ class TestFactory(dict): |
42 | 42 | self.question_factory.load_files(files=self['files'], questions_dir=self['questions_dir']) |
43 | 43 | |
44 | 44 | # check if all questions exist ('ref' keys are correct?) |
45 | + errors_found = False | |
45 | 46 | for q in self['questions']: |
46 | 47 | for r in q['ref']: |
47 | 48 | logger.info(f'Checking question "{r}".') |
48 | 49 | try: |
49 | 50 | self.question_factory.generate(r) |
50 | - except questions.QuestionFactoryException: | |
51 | + # except questions.QuestionFactoryException: | |
52 | + # logger.critical(f'Can\'t generate question "{r}".') | |
53 | + except: | |
51 | 54 | logger.critical(f'Can\'t generate question "{r}".') |
52 | - raise TestFactoryException() | |
55 | + errors_found = True | |
56 | + | |
57 | + if errors_found: | |
58 | + logger.critical('Errors found while generating questions.') | |
59 | + raise TestFactoryException() | |
53 | 60 | |
54 | 61 | logger.info(f'Test factory ready for "{self["ref"]}".') |
55 | 62 | ... | ... |