Commit 92211444cd4eb3f4ac9fa4d943f5b802430684fe

Authored by Miguel Barão
1 parent 913dbfb2
Exists in master and in 1 other branch dev

minor updates

updates js libs versions
adds new bug reports in BUGS.md
BUGS.md
1 1  
2 2 # BUGS
3 3  
  4 +- ensure pip nao funciona no ubuntu?...
  5 +- acrescentar logger.conf que sirva de base.
  6 +- exception sqlalchemy relacionada com threads.
  7 +- quando se clica no texto de uma opcao, salta para outro lado na pagina.
  8 +- ordenacao das notas em /admin nao é numerica, é ascii...
  9 +- mensagems de erro do assembler aparecem na mesma linha na correcao e nao fazerm rendering do `$t`, ver se servidor faz parse do markdown dessas mensagens.
4 10 - impedir os eventos copy/paste. alunos usam isso para trazer codigo ja feito nos computadores. Obrigar a fazer reset? fazer um copy automaticamente?
5 11 - a revisao do teste não mostra as imagens.
6 12 - melhorar o botao de autorizar (desliga-se), usar antes um botao?
... ...
demo/questions/questions-tutorial.yaml
... ... @@ -280,7 +280,7 @@
280 280 ```
281 281  
282 282 Neste exemplo a expressão regular é `(VERDE|[Vv]erde)`.
283   - correct: !regex '(VERDE|[Vv]erde)'
  283 + correct: '(VERDE|[Vv]erde)'
284 284  
285 285  
286 286 # ---------------------------------------------------------------------------
... ...
package-lock.json
... ... @@ -3,19 +3,19 @@
3 3 "lockfileVersion": 1,
4 4 "dependencies": {
5 5 "@fortawesome/fontawesome-free": {
6   - "version": "5.7.1",
7   - "resolved": "https://registry.npmjs.org/@fortawesome/fontawesome-free/-/fontawesome-free-5.7.1.tgz",
8   - "integrity": "sha512-gukWJ7Mwf0WXQbkcwcm5zi8+H8aT5MMnphf5hpydOw898H1ibgm2cyejHgk6Km/FTvrPp5ppUHLrlFwt0QxsQw=="
  6 + "version": "5.8.1",
  7 + "resolved": "https://registry.npmjs.org/@fortawesome/fontawesome-free/-/fontawesome-free-5.8.1.tgz",
  8 + "integrity": "sha512-GJtx6e55qLEOy2gPOsok2lohjpdWNGrYGtQx0FFT/++K4SYx+Z8LlPHdQBaFzKEwH5IbBB4fNgb//uyZjgYXoA=="
9 9 },
10 10 "bootstrap": {
11   - "version": "4.3.0",
12   - "resolved": "https://registry.npmjs.org/bootstrap/-/bootstrap-4.3.0.tgz",
13   - "integrity": "sha512-M0vqY0Z6UDweV2nLFl5dXcb+GIo53EBCGMMVxCGH5vJxl/jsr+HkULBMd4kn9rdpdBZwd3BduCgMOYOwJybo4Q=="
  11 + "version": "4.3.1",
  12 + "resolved": "https://registry.npmjs.org/bootstrap/-/bootstrap-4.3.1.tgz",
  13 + "integrity": "sha512-rXqOmH1VilAt2DyPzluTi2blhk17bO7ef+zLLPlWvG494pDxcM234pJ8wTc/6R40UWizAIIMgxjvxZg5kmsbag=="
14 14 },
15 15 "codemirror": {
16   - "version": "5.43.0",
17   - "resolved": "https://registry.npmjs.org/codemirror/-/codemirror-5.43.0.tgz",
18   - "integrity": "sha512-mljwQWUaWIf85I7QwTBryF2ASaIvmYAL4s5UCanCJFfKeXOKhrqdHWdHiZWAMNT+hjLTCnVx2S/SYTORIgxsgA=="
  16 + "version": "5.45.0",
  17 + "resolved": "https://registry.npmjs.org/codemirror/-/codemirror-5.45.0.tgz",
  18 + "integrity": "sha512-c19j644usCE8gQaXa0jqn2B/HN9MnB2u6qPIrrhrMkB+QAP42y8G4QnTwuwbVSoUS1jEl7JU9HZMGhCDL0nsAw=="
19 19 },
20 20 "datatables": {
21 21 "version": "1.10.18",
... ... @@ -36,9 +36,9 @@
36 36 "integrity": "sha512-OzsJNitEHAJB3y4IIlPCAvS0yoXwYjlo2Y4kmm9KQzyIBZt2d8yKRalby3uTRNN4fZQiGL2iMXjpdP1u2Rq2DQ=="
37 37 },
38 38 "popper.js": {
39   - "version": "1.14.7",
40   - "resolved": "https://registry.npmjs.org/popper.js/-/popper.js-1.14.7.tgz",
41   - "integrity": "sha512-4q1hNvoUre/8srWsH7hnoSJ5xVmIL4qgz+s4qf2TnJIMyZFUFMGH+9vE7mXynAlHSZ/NdTmmow86muD0myUkVQ=="
  39 + "version": "1.15.0",
  40 + "resolved": "https://registry.npmjs.org/popper.js/-/popper.js-1.15.0.tgz",
  41 + "integrity": "sha512-w010cY1oCUmI+9KwwlWki+r5jxKfTFDVoadl7MSrIujHU5MJ5OR6HTDj6Xo8aoR/QsA56x8jKjA59qGH4ELtrA=="
42 42 }
43 43 }
44 44 }
... ...
package.json
... ... @@ -2,12 +2,12 @@
2 2 "description": "Javascript libraries required to run the server",
3 3 "email": "mjsb@uevora.pt",
4 4 "dependencies": {
5   - "@fortawesome/fontawesome-free": "^5.7.1",
6   - "bootstrap": "^4.3.0",
7   - "codemirror": "^5.43.0",
  5 + "@fortawesome/fontawesome-free": "^5.8.1",
  6 + "bootstrap": "^4.3.1",
  7 + "codemirror": "^5.45.0",
8 8 "datatables": "^1.10.18",
9 9 "jquery": "^3.3.1",
10 10 "mathjax": "^2.7.5",
11   - "popper.js": "^1.14.7"
  11 + "popper.js": "^1.15.0"
12 12 }
13 13 }
... ...
perguntations/app.py
... ... @@ -54,8 +54,8 @@ class App(object):
54 54 yield session
55 55 session.commit()
56 56 except Exception:
57   - session.rollback()
58 57 logger.error('DB rollback!!!')
  58 + session.rollback()
59 59 finally:
60 60 session.close()
61 61  
... ... @@ -262,7 +262,11 @@ class App(object):
262 262 'start_time': self.online.get(uid, {}).get('test', {})
263 263 .get('start_time', ''),
264 264 'password_defined': pw != '',
265   - 'grades': self.get_student_grades_from_test(uid, self.testfactory['ref']),
  265 + 'grades': self.get_student_grades_from_test(
  266 + uid,
  267 + self.testfactory['ref']
  268 + ),
  269 +
266 270 # 'focus': self.online.get(uid, {}).get('student', {}).get('focus', True), # FIXME
267 271 } for uid, name, pw in self.get_all_students()]
268 272  
... ...
perguntations/serve.py
... ... @@ -85,8 +85,6 @@ class BaseHandler(tornado.web.RequestHandler):
85 85 # /login
86 86 # ----------------------------------------------------------------------------
87 87 class LoginHandler(BaseHandler):
88   - SUPPORTED_METHODS = ['GET', 'POST']
89   -
90 88 def get(self):
91 89 self.render('login.html', error='')
92 90  
... ... @@ -132,8 +130,6 @@ class RootHandler(BaseHandler):
132 130 # Serves files from the /public subdir of the topics.
133 131 # ----------------------------------------------------------------------------
134 132 class FileHandler(BaseHandler):
135   - SUPPORTED_METHODS = ['GET']
136   -
137 133 @tornado.web.authenticated
138 134 async def get(self):
139 135 uid = self.current_user
... ... @@ -175,8 +171,6 @@ class FileHandler(BaseHandler):
175 171 # Test shown to students
176 172 # -------------------------------------------------------------------------
177 173 class TestHandler(BaseHandler):
178   - SUPPORTED_METHODS = ['GET', 'POST']
179   -
180 174 _templates = {
181 175 'radio': 'question-radio.html',
182 176 'checkbox': 'question-checkbox.html',
... ... @@ -229,7 +223,9 @@ class TestHandler(BaseHandler):
229 223  
230 224 self.testapp.logout(uid)
231 225 self.clear_cookie('user')
232   - self.render('grade.html', t=t, allgrades=self.testapp.get_student_grades_from_all_tests(uid))
  226 +
  227 + allgrades = self.testapp.get_student_grades_from_all_tests(uid)
  228 + self.render('grade.html', t=t, allgrades=allgrades)
233 229  
234 230  
235 231 # -------------------------------------------------------------------------
... ... @@ -382,7 +378,7 @@ def get_logger_config(debug=False):
382 378 'version': 1,
383 379 'formatters': {
384 380 'standard': {
385   - 'format': '%(asctime)s %(name)-22s %(levelname)-8s %(message)s',
  381 + 'format': '%(asctime)s %(levelname)-8s %(message)s',
386 382 'datefmt': '%H:%M',
387 383 },
388 384 },
... ... @@ -419,8 +415,7 @@ def main():
419 415 args = parse_cmdline_arguments()
420 416  
421 417 # --- Setup logging
422   - logger_config = get_logger_config(args.debug)
423   - logging.config.dictConfig(logger_config)
  418 + logging.config.dictConfig(get_logger_config(args.debug))
424 419 logging.info('====================== Start Logging ======================')
425 420  
426 421 # --- start application
... ... @@ -430,7 +425,7 @@ def main():
430 425 'allow_all': args.allow_all,
431 426 'show_ref': args.show_ref,
432 427 'review': args.review,
433   - }
  428 + }
434 429  
435 430 try:
436 431 testapp = App(config)
... ...
perguntations/templates/login.html
... ... @@ -20,22 +20,22 @@
20 20 <!-- =================================================================== -->
21 21 <body>
22 22 <div class="container-fluid">
23   - <div class="card bg-light border-secondary mb-3">
  23 + <div class="card bg-light border-secondary mt-3">
24 24 <div class="card-body">
25 25 <div class="row">
26 26  
27   - <div class="col-sm-4">
28   - <img src="/static/logo_horizontal_login.png" class="img-responsive" width="60%" alt="Universidade de Évora">
  27 + <div class="col-sm-9">
  28 + <img src="/static/logo_horizontal_login.png" class="img-responsive mb-3" width="50%" alt="Universidade de Évora">
29 29 </div>
30 30  
31   - <div class="col-sm-8">
  31 + <div class="col-sm-3">
32 32 <h4>Identificação:</h4>
33 33  
34 34 <form method="post" action="/login" class="form-signin">
35 35 {% module xsrf_form_html() %}
36 36 <div class="form-group">
37   - <input type="text" name="uid" class="form-control" placeholder="Número" required autofocus>
38   - <input type="password" name="pw" class="form-control" placeholder="Password" required>
  37 + <input type="text" name="uid" class="form-control mb-3" placeholder="Número" required autofocus>
  38 + <input type="password" name="pw" class="form-control mb-3" placeholder="Password" required>
39 39 <p> {{ error }} </p>
40 40 </div>
41 41 <button class="btn btn-primary" type="submit">
... ...