Commit 203495c326bc78f06b6ebef06954799a2bd20ae8
1 parent
57a82bd1
Exists in
master
and in
1 other branch
- detect colisions in question refs
- report inexistent refs in test.yaml - added logs directory (empty) to repository
Showing
7 changed files
with
26 additions
and
16 deletions
Show diff stats
BUGS.md
@@ -5,16 +5,13 @@ | @@ -5,16 +5,13 @@ | ||
5 | !!! - questions type script, necessário dar um caminho exacto relativamete ao directorio do server em vez da pergunta. deveria ser possivel mover as perguntas de directorio sem rebentar os caminhos. | 5 | !!! - questions type script, necessário dar um caminho exacto relativamete ao directorio do server em vez da pergunta. deveria ser possivel mover as perguntas de directorio sem rebentar os caminhos. |
6 | 6 | ||
7 | - parece que é preciso criar à mão a pasta para as respostas (ans/...) depois apercebo-me que os caminhos no teste dizem respeito à directoria donde o teste é corrido... as respostas deveriam guardadas no directório dado. | 7 | - parece que é preciso criar à mão a pasta para as respostas (ans/...) depois apercebo-me que os caminhos no teste dizem respeito à directoria donde o teste é corrido... as respostas deveriam guardadas no directório dado. |
8 | -- colisoes nas referencias das perguntas. a referencia deveria influir o nome do ficheiro? acho que nao | ||
9 | - se database for mal configurada, é criada uma base de dados vazia e rebenta na autenticacao. | 8 | - se database for mal configurada, é criada uma base de dados vazia e rebenta na autenticacao. |
10 | - mostrar erro quando nao consegue importar questions files | 9 | - mostrar erro quando nao consegue importar questions files |
11 | - testar regex na definicao das perguntas. como se faz rawstring em yaml? singlequote? problemas de backslash??? sim... necessário fazer \\ em varios casos, mas não é claro! e.g. \n é convertido em espaço mas \w é convertido em \\ e w. | 10 | - testar regex na definicao das perguntas. como se faz rawstring em yaml? singlequote? problemas de backslash??? sim... necessário fazer \\ em varios casos, mas não é claro! e.g. \n é convertido em espaço mas \w é convertido em \\ e w. |
12 | - testar envio de parametros para stdin para perguntas tipo generator. | 11 | - testar envio de parametros para stdin para perguntas tipo generator. |
13 | -- usar pomba da ue moderna. | ||
14 | 12 | ||
15 | # TODO | 13 | # TODO |
16 | 14 | ||
17 | -- pacotes exactos usados para instalar. | ||
18 | - SQLAlchemy em vez da classe database. | 15 | - SQLAlchemy em vez da classe database. |
19 | - Criar botão para o docente fazer enable/disable do aluno explicitamente (exames presenciais). | 16 | - Criar botão para o docente fazer enable/disable do aluno explicitamente (exames presenciais). |
20 | - hash das passwords obtidas da concatenacao do numero de aluno com password (evita que passwords repetidas sejam detectadas). | 17 | - hash das passwords obtidas da concatenacao do numero de aluno com password (evita que passwords repetidas sejam detectadas). |
@@ -30,6 +27,9 @@ | @@ -30,6 +27,9 @@ | ||
30 | 27 | ||
31 | # FIXED | 28 | # FIXED |
32 | 29 | ||
30 | +- pacotes exactos usados para instalar. | ||
31 | +- detectar colisoes nas referencias das perguntas. | ||
32 | +- usar pomba da ue moderna. | ||
33 | - /results esta ordenado por numero e nao por data | 33 | - /results esta ordenado por numero e nao por data |
34 | - numeros das perguntas não fazem sentido quando há caixas de informação (numerar informacao tb?) | 34 | - numeros das perguntas não fazem sentido quando há caixas de informação (numerar informacao tb?) |
35 | - Quando apresenta o teste, preencher com os valores definidos em answer (permite que professor dê informação à partida, e no modo practice fiquem com o preenchido anteriormente) | 35 | - Quando apresenta o teste, preencher com os valores definidos em answer (permite que professor dê informação à partida, e no modo practice fiquem com o preenchido anteriormente) |
README.md
@@ -4,15 +4,15 @@ Online "perguntations". | @@ -4,15 +4,15 @@ Online "perguntations". | ||
4 | 4 | ||
5 | ### Requirements: | 5 | ### Requirements: |
6 | 6 | ||
7 | -- python3.4 | ||
8 | -- cherrypy | ||
9 | -- mako | ||
10 | -- yaml | 7 | +Installed using `pip3`: |
11 | 8 | ||
9 | +- CherryPy (3.7.0) | ||
10 | +- Mako (1.0.1) | ||
11 | +- Markdown (2.6.2) | ||
12 | +- PyYAML (3.11) | ||
12 | 13 | ||
13 | ### System setup: | 14 | ### System setup: |
14 | 15 | ||
15 | - | ||
16 | ``` | 16 | ``` |
17 | #!bash | 17 | #!bash |
18 | 18 | ||
@@ -23,13 +23,13 @@ mv students.db db | @@ -23,13 +23,13 @@ mv students.db db | ||
23 | 23 | ||
24 | # update test configuration | 24 | # update test configuration |
25 | vi demo/test.yaml # update students_db | 25 | vi demo/test.yaml # update students_db |
26 | -mkdir logs # logs are stored here | ||
27 | 26 | ||
28 | # run demo test | 27 | # run demo test |
29 | ./serve demo/test.yaml | 28 | ./serve demo/test.yaml |
30 | - | ||
31 | ``` | 29 | ``` |
32 | 30 | ||
31 | +(For the time being, also create `ans`, `questions`, `tests`, `scripts`, `sessions` in the same directory, until paths are fixed) | ||
32 | + | ||
33 | ### Contribute ### | 33 | ### Contribute ### |
34 | 34 | ||
35 | * Writing questions in yaml format | 35 | * Writing questions in yaml format |
demo/questions.yaml
@@ -34,7 +34,7 @@ | @@ -34,7 +34,7 @@ | ||
34 | hint: It's not red. | 34 | hint: It's not red. |
35 | # --------------------------------------------------------------------------- | 35 | # --------------------------------------------------------------------------- |
36 | - | 36 | - |
37 | - ref: question-v2 | 37 | + ref: question-v1 |
38 | type: text_regex | 38 | type: text_regex |
39 | text: What's my favorite basic color? | 39 | text: What's my favorite basic color? |
40 | correct: '[bB]lue' | 40 | correct: '[bB]lue' |
demo/test.yaml
@@ -4,12 +4,12 @@ title: Teste de Demonstração | @@ -4,12 +4,12 @@ title: Teste de Demonstração | ||
4 | 4 | ||
5 | # database contains students+passwords, final results of the tests, and questions done | 5 | # database contains students+passwords, final results of the tests, and questions done |
6 | # database: path/to/students.db | 6 | # database: path/to/students.db |
7 | -database: db/asc1-students.db | 7 | +database: db/students.db |
8 | 8 | ||
9 | # this will generate a file for each test done. The file is like a replacement | 9 | # this will generate a file for each test done. The file is like a replacement |
10 | # for a test done in paper. | 10 | # for a test done in paper. |
11 | save_answers: False | 11 | save_answers: False |
12 | -# answers_dir: path/to/directory | 12 | +answers_dir: ans/demo |
13 | 13 | ||
14 | show_points: True | 14 | show_points: True |
15 | show_hints: True | 15 | show_hints: True |
questions.py
@@ -15,8 +15,8 @@ import os | @@ -15,8 +15,8 @@ import os | ||
15 | # for q in pool.values(): | 15 | # for q in pool.values(): |
16 | # test.append(create_question(q)) | 16 | # test.append(create_question(q)) |
17 | # | 17 | # |
18 | -# test[0]['answer'] = 42 | ||
19 | -# grade = test[0].correct() | 18 | +# test[0]['answer'] = 42 # insert answer |
19 | +# grade = test[0].correct() # correct answer | ||
20 | 20 | ||
21 | 21 | ||
22 | # =========================================================================== | 22 | # =========================================================================== |
@@ -39,6 +39,9 @@ class QuestionsPool(dict): | @@ -39,6 +39,9 @@ class QuestionsPool(dict): | ||
39 | print(' * question with index {0} in file {1} is not a dict. Ignoring...'.format(i, filename)) | 39 | print(' * question with index {0} in file {1} is not a dict. Ignoring...'.format(i, filename)) |
40 | continue | 40 | continue |
41 | 41 | ||
42 | + if q['ref'] in self: | ||
43 | + print(' * question "{0}" in file "{1}" already exists in file "{2}". Ignoring...'.format(q['ref'], filename, self[q['ref']]['filename'])) | ||
44 | + | ||
42 | # filename and index (number in the file, 0 based) | 45 | # filename and index (number in the file, 0 based) |
43 | q['filename'] = filename | 46 | q['filename'] = filename |
44 | q['index'] = i | 47 | q['index'] = i |
test.py
@@ -75,7 +75,11 @@ def read_configuration(filename, debug=False, show_points=False, show_hints=Fals | @@ -75,7 +75,11 @@ def read_configuration(filename, debug=False, show_points=False, show_hints=Fals | ||
75 | # create list of alternatives, normalized | 75 | # create list of alternatives, normalized |
76 | l = [] | 76 | l = [] |
77 | for r in q['ref']: | 77 | for r in q['ref']: |
78 | - qq = pool[r] | 78 | + try: |
79 | + qq = pool[r] | ||
80 | + except KeyError: | ||
81 | + print(' * question "{0}" in test "{1}" not found in the pool. Ignoring...'.format(r, test['ref'])) | ||
82 | + continue | ||
79 | qq['points'] = p | 83 | qq['points'] = p |
80 | l.append(qq) | 84 | l.append(qq) |
81 | 85 |