Commit 92d262e82ab0dfab2e70a60204b569f39c3c4be8

Authored by Miguel Barao
1 parent 353a8d29
Exists in master and in 1 other branch dev

- abort with error message if directory "logs" does not exist in the

current directory.
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
1 # -*- coding: utf-8 -*- 1 # -*- coding: utf-8 -*-
2 2
3 [global] 3 [global]
4 -; environment= 'production' 4 +environment= 'production'
5 5
6 ; number of threads running 6 ; number of threads running
7 server.thread_pool= 10 7 server.thread_pool= 10
@@ -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