diff --git a/BUGS.md b/BUGS.md index 020851d..2240609 100644 --- a/BUGS.md +++ b/BUGS.md @@ -1,28 +1,32 @@ - + # BUGS +!!! - 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. - se database for mal configurada, é criada uma base de dados vazia e rebenta na autenticacao. -- hash das passwords obtidas da concatenacao do numero de aluno com password (evita que passwords repetidas sejam detectadas). - mostrar erro quando nao consegue importar questions files -- numeros das perguntas não fazem sentido quando há caixas de informação (numerar informacao tb?) - 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. # TODO -- 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) -- testar envio de parametros para stdin para perguntas tipo generator +- Criar botão para o docente fazer enable/disable do aluno explicitamente (exames presenciais). +- testar envio de parametros para stdin para perguntas tipo generator. +- hash das passwords obtidas da concatenacao do numero de aluno com password (evita que passwords repetidas sejam detectadas). - permitir enviar varios testes, aluno escolhe qual o teste que quer fazer. - criar script json2md.py ou outra forma de gerar um teste ja realizado - Menu para professor com link para /results e /students - implementar singlepage/multipage. Fazer uma class para single page que trate de andar gerir o avanco e correcao das perguntas - permitir adicionar imagens nas perguntas - criar perguntas de outros tipos, e.g. associação, ordenação, varios textinput +- perguntas para professor corrigir mais tarde. +- testar com microsoft surface. # FIXED +- numeros das perguntas não fazem sentido quando há caixas de informação (numerar informacao tb?) +- 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) - information points é definido onde? test.y ou questions.py? - textarea monospace - disable tab behavior in textarea. diff --git a/questions.py b/questions.py index b93f963..8a1ad92 100644 --- a/questions.py +++ b/questions.py @@ -95,7 +95,12 @@ def create_question(q): questiontype = Question # create question instance and return - return questiontype(q) + try: + qinstance = questiontype(q) + except: + print(' * Error creating question "{0}" from file "{1}".'.format(q['ref'], q['filename'])) + + return qinstance # --------------------------------------------------------------------------- diff --git a/serve.py b/serve.py index 87cc091..c6c9dc4 100755 --- a/serve.py +++ b/serve.py @@ -23,7 +23,8 @@ class Root(object): self.database = database.Database(testconf['database']) self.auth = AuthController(database=testconf['database']) self.templates = TemplateLookup(directories=['templates'], input_encoding='utf-8') - self.loggedin = set() # students currently logged in + self.tags = {'online': set(), 'finished': set()} + # self.loggedin = set() # students currently logged in # --- DEFAULT ------------------------------------------------------------ # any path, e.g. /xpto/aargh is redirected to the test @@ -37,7 +38,7 @@ class Root(object): @require() def logout(self): uid = cherrypy.session.get('userid') - self.loggedin.discard(uid) + self.tags['online'].discard(uid) cherrypy.lib.sessions.expire() # session coockie expires client side cherrypy.session['userid'] = cherrypy.request.login = None cherrypy.log.error('Student {0} logged out.'.format(uid), 'APPLICATION') @@ -58,7 +59,7 @@ class Root(object): students = self.database.get_students() template = self.templates.get_template('students.html') - return template.render(students=students, loggedin=self.loggedin) + return template.render(students=students, tags=self.tags) # --- RESULTS ------------------------------------------------------------ @cherrypy.expose @@ -82,7 +83,7 @@ class Root(object): cherrypy.session['test'] = t = test.Test(self.testconf) t['number'] = uid t['name'] = name - self.loggedin.add(uid) # track logged in students + self.tags['online'].add(uid) # track logged in students # Generate question template = self.templates.get_template('test.html') @@ -126,7 +127,8 @@ class Root(object): else: # ---- Expire session ---- - self.loggedin.discard(t['number']) + self.tags['online'].discard(t['number']) + self.tags['finished'].add(t['number']) cherrypy.lib.sessions.expire() # session coockie expires client side cherrypy.session['userid'] = cherrypy.request.login = None cherrypy.log.error('Student %s terminated with grade = %.2f points.' % diff --git a/templates/students.html b/templates/students.html index 7da034b..e782fdc 100644 --- a/templates/students.html +++ b/templates/students.html @@ -33,12 +33,13 @@
Tags | Número | Nome | Password | @@ -46,27 +47,31 @@
---|---|---|---|
${r[0]} | -${r[1]} | -- + | +