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 | ... | ... |