Commit 008f89672e0e3850a825f65eb583bff208f94420

Authored by Miguel Barão
1 parent a08905e3
Exists in master and in 1 other branch dev

- check all questions before aborting.

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`![alt text](image.jpg)`.
390 403 - Imagens centradas e com título: `![alt text](image.jpg "Título da imagem")`. 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  
... ...