Commit 92d262e82ab0dfab2e70a60204b569f39c3c4be8
1 parent
353a8d29
Exists in
master
and in
1 other branch
- abort with error message if directory "logs" does not exist in the
current directory.
Showing
5 changed files
with
14 additions
and
12 deletions
Show diff stats
BUGS.md
1 | 1 | ||
2 | # BUGS | 2 | # BUGS |
3 | 3 | ||
4 | -- se directorio logs não existir no directorio actual (não perguntations) rebenta. | 4 | +- servidor nao esta a lidar com eventos scroll/resize. ignorar? |
5 | +- testar SSL | ||
5 | 6 | ||
6 | # TODO | 7 | # TODO |
7 | 8 | ||
8 | -- SSL | 9 | +- permitir varios testes, aluno escolhe qual o teste que quer fazer. |
9 | - usar thread.Lock para aceder a variaveis de estado? | 10 | - usar thread.Lock para aceder a variaveis de estado? |
10 | -- servidor nao esta a lidar com eventos scroll/resize | ||
11 | - se ocorrer um erro na correcçao avisar aluno para contactar o professor. | 11 | - se ocorrer um erro na correcçao avisar aluno para contactar o professor. |
12 | -- implementar practice mode. | ||
13 | -- usar http://wtfforms.com para radio e checkboxes | ||
14 | -- abrir o teste numa janela maximizada e que nao permite que o aluno a redimensione/mova. | 12 | +- implementar practice mode? |
13 | +- abrir o teste numa janela maximizada e que nao permite que o aluno a redimensione/mova? | ||
15 | - detectar scroll e enviar posição para servidor (analise de scroll para detectar copianço? ou simplesmente para analisar como os alunos percorrem o teste) | 14 | - detectar scroll e enviar posição para servidor (analise de scroll para detectar copianço? ou simplesmente para analisar como os alunos percorrem o teste) |
16 | - single page web no teste/correcçao. Página construída em javascript, obter perguntas com ajax (para practice?). | 15 | - single page web no teste/correcçao. Página construída em javascript, obter perguntas com ajax (para practice?). |
17 | - aviso na pagina principal para quem usa browser da treta | 16 | - aviso na pagina principal para quem usa browser da treta |
18 | -- permitir varios testes, aluno escolhe qual o teste que quer fazer. | ||
19 | - criar perguntas de outros tipos, e.g. associação, ordenação, varios textinput | 17 | - criar perguntas de outros tipos, e.g. associação, ordenação, varios textinput |
20 | - perguntas para professor corrigir mais tarde. | 18 | - perguntas para professor corrigir mais tarde. |
21 | - fazer uma calculadora javascript e por no menu. surge como modal | 19 | - fazer uma calculadora javascript e por no menu. surge como modal |
22 | - GeoIP? | 20 | - GeoIP? |
23 | -- alunos online têm acesso a /correct e servidor rebenta. (não é fácil impedir...) | ||
24 | - enviar logs para web? | 21 | - enviar logs para web? |
25 | 22 | ||
26 | # FIXED | 23 | # FIXED |
27 | 24 | ||
25 | +- se directorio "logs" não existir no directorio actual aborta com mensagem de erro. | ||
28 | - se um teste tiver a mesma pergunta repetida (ref igual), rebenta na correcçao. As respostas são agregadas numa lista para cada ref. Ex: {'ref1': 'resposta1', 'ref2': ['resposta2a', 'resposta2b']} | 26 | - se um teste tiver a mesma pergunta repetida (ref igual), rebenta na correcçao. As respostas são agregadas numa lista para cada ref. Ex: {'ref1': 'resposta1', 'ref2': ['resposta2a', 'resposta2b']} |
29 | - usar http://fontawesome.io/examples/ em vez dos do bootstrap3 | 27 | - usar http://fontawesome.io/examples/ em vez dos do bootstrap3 |
30 | - se pergunta tiver 'type:' errado, rebenta. | 28 | - se pergunta tiver 'type:' errado, rebenta. |
config/server.conf
serve.py
@@ -310,14 +310,19 @@ if __name__ == '__main__': | @@ -310,14 +310,19 @@ if __name__ == '__main__': | ||
310 | filename = path.abspath(path.expanduser(arg.testfile[0])) | 310 | filename = path.abspath(path.expanduser(arg.testfile[0])) |
311 | 311 | ||
312 | # --- Setup logging | 312 | # --- Setup logging |
313 | - logging.config.dictConfig(load_yaml(LOGGER_CONF)) | 313 | + try: |
314 | + logging.config.dictConfig(load_yaml(LOGGER_CONF)) | ||
315 | + except: | ||
316 | + print('An error ocurred while setting up the logging system.') | ||
317 | + print('Common causes:\n - inexistent directory "logs"?\n - write permission to "logs" directory?') | ||
318 | + sys.exit(1) | ||
314 | 319 | ||
315 | # --- start application | 320 | # --- start application |
316 | from app import App | 321 | from app import App |
317 | 322 | ||
318 | try: | 323 | try: |
319 | app = App(filename, vars(arg)) | 324 | app = App(filename, vars(arg)) |
320 | - except Exception as e: | 325 | + except: |
321 | logging.critical('Can\'t start application.') | 326 | logging.critical('Can\'t start application.') |
322 | sys.exit(1) | 327 | sys.exit(1) |
323 | 328 | ||
@@ -328,7 +333,6 @@ if __name__ == '__main__': | @@ -328,7 +333,6 @@ if __name__ == '__main__': | ||
328 | 333 | ||
329 | # --- site wide configuration (valid for all apps) | 334 | # --- site wide configuration (valid for all apps) |
330 | cherrypy.tools.secureheaders = cherrypy.Tool('before_finalize', secureheaders, priority=60) | 335 | cherrypy.tools.secureheaders = cherrypy.Tool('before_finalize', secureheaders, priority=60) |
331 | - | ||
332 | cherrypy.config.update(arg.conf) # configuration file in /config | 336 | cherrypy.config.update(arg.conf) # configuration file in /config |
333 | conf = { | 337 | conf = { |
334 | '/': { | 338 | '/': { |
static/bootstrap-3.3.7/.DS_Store
No preview for this file type
static/bootstrap-3.3.7/css/.DS_Store
No preview for this file type