Commit 92211444cd4eb3f4ac9fa4d943f5b802430684fe
1 parent
913dbfb2
Exists in
master
and in
1 other branch
minor updates
updates js libs versions adds new bug reports in BUGS.md
Showing
7 changed files
with
41 additions
and
36 deletions
Show diff stats
BUGS.md
1 | 1 | ||
2 | # BUGS | 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 | - impedir os eventos copy/paste. alunos usam isso para trazer codigo ja feito nos computadores. Obrigar a fazer reset? fazer um copy automaticamente? | 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 | - a revisao do teste não mostra as imagens. | 11 | - a revisao do teste não mostra as imagens. |
6 | - melhorar o botao de autorizar (desliga-se), usar antes um botao? | 12 | - melhorar o botao de autorizar (desliga-se), usar antes um botao? |
demo/questions/questions-tutorial.yaml
@@ -280,7 +280,7 @@ | @@ -280,7 +280,7 @@ | ||
280 | ``` | 280 | ``` |
281 | 281 | ||
282 | Neste exemplo a expressão regular é `(VERDE|[Vv]erde)`. | 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,19 +3,19 @@ | ||
3 | "lockfileVersion": 1, | 3 | "lockfileVersion": 1, |
4 | "dependencies": { | 4 | "dependencies": { |
5 | "@fortawesome/fontawesome-free": { | 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 | "bootstrap": { | 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 | "codemirror": { | 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 | "datatables": { | 20 | "datatables": { |
21 | "version": "1.10.18", | 21 | "version": "1.10.18", |
@@ -36,9 +36,9 @@ | @@ -36,9 +36,9 @@ | ||
36 | "integrity": "sha512-OzsJNitEHAJB3y4IIlPCAvS0yoXwYjlo2Y4kmm9KQzyIBZt2d8yKRalby3uTRNN4fZQiGL2iMXjpdP1u2Rq2DQ==" | 36 | "integrity": "sha512-OzsJNitEHAJB3y4IIlPCAvS0yoXwYjlo2Y4kmm9KQzyIBZt2d8yKRalby3uTRNN4fZQiGL2iMXjpdP1u2Rq2DQ==" |
37 | }, | 37 | }, |
38 | "popper.js": { | 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,12 +2,12 @@ | ||
2 | "description": "Javascript libraries required to run the server", | 2 | "description": "Javascript libraries required to run the server", |
3 | "email": "mjsb@uevora.pt", | 3 | "email": "mjsb@uevora.pt", |
4 | "dependencies": { | 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 | "datatables": "^1.10.18", | 8 | "datatables": "^1.10.18", |
9 | "jquery": "^3.3.1", | 9 | "jquery": "^3.3.1", |
10 | "mathjax": "^2.7.5", | 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,8 +54,8 @@ class App(object): | ||
54 | yield session | 54 | yield session |
55 | session.commit() | 55 | session.commit() |
56 | except Exception: | 56 | except Exception: |
57 | - session.rollback() | ||
58 | logger.error('DB rollback!!!') | 57 | logger.error('DB rollback!!!') |
58 | + session.rollback() | ||
59 | finally: | 59 | finally: |
60 | session.close() | 60 | session.close() |
61 | 61 | ||
@@ -262,7 +262,11 @@ class App(object): | @@ -262,7 +262,11 @@ class App(object): | ||
262 | 'start_time': self.online.get(uid, {}).get('test', {}) | 262 | 'start_time': self.online.get(uid, {}).get('test', {}) |
263 | .get('start_time', ''), | 263 | .get('start_time', ''), |
264 | 'password_defined': pw != '', | 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 | # 'focus': self.online.get(uid, {}).get('student', {}).get('focus', True), # FIXME | 270 | # 'focus': self.online.get(uid, {}).get('student', {}).get('focus', True), # FIXME |
267 | } for uid, name, pw in self.get_all_students()] | 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,8 +85,6 @@ class BaseHandler(tornado.web.RequestHandler): | ||
85 | # /login | 85 | # /login |
86 | # ---------------------------------------------------------------------------- | 86 | # ---------------------------------------------------------------------------- |
87 | class LoginHandler(BaseHandler): | 87 | class LoginHandler(BaseHandler): |
88 | - SUPPORTED_METHODS = ['GET', 'POST'] | ||
89 | - | ||
90 | def get(self): | 88 | def get(self): |
91 | self.render('login.html', error='') | 89 | self.render('login.html', error='') |
92 | 90 | ||
@@ -132,8 +130,6 @@ class RootHandler(BaseHandler): | @@ -132,8 +130,6 @@ class RootHandler(BaseHandler): | ||
132 | # Serves files from the /public subdir of the topics. | 130 | # Serves files from the /public subdir of the topics. |
133 | # ---------------------------------------------------------------------------- | 131 | # ---------------------------------------------------------------------------- |
134 | class FileHandler(BaseHandler): | 132 | class FileHandler(BaseHandler): |
135 | - SUPPORTED_METHODS = ['GET'] | ||
136 | - | ||
137 | @tornado.web.authenticated | 133 | @tornado.web.authenticated |
138 | async def get(self): | 134 | async def get(self): |
139 | uid = self.current_user | 135 | uid = self.current_user |
@@ -175,8 +171,6 @@ class FileHandler(BaseHandler): | @@ -175,8 +171,6 @@ class FileHandler(BaseHandler): | ||
175 | # Test shown to students | 171 | # Test shown to students |
176 | # ------------------------------------------------------------------------- | 172 | # ------------------------------------------------------------------------- |
177 | class TestHandler(BaseHandler): | 173 | class TestHandler(BaseHandler): |
178 | - SUPPORTED_METHODS = ['GET', 'POST'] | ||
179 | - | ||
180 | _templates = { | 174 | _templates = { |
181 | 'radio': 'question-radio.html', | 175 | 'radio': 'question-radio.html', |
182 | 'checkbox': 'question-checkbox.html', | 176 | 'checkbox': 'question-checkbox.html', |
@@ -229,7 +223,9 @@ class TestHandler(BaseHandler): | @@ -229,7 +223,9 @@ class TestHandler(BaseHandler): | ||
229 | 223 | ||
230 | self.testapp.logout(uid) | 224 | self.testapp.logout(uid) |
231 | self.clear_cookie('user') | 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,7 +378,7 @@ def get_logger_config(debug=False): | ||
382 | 'version': 1, | 378 | 'version': 1, |
383 | 'formatters': { | 379 | 'formatters': { |
384 | 'standard': { | 380 | 'standard': { |
385 | - 'format': '%(asctime)s %(name)-22s %(levelname)-8s %(message)s', | 381 | + 'format': '%(asctime)s %(levelname)-8s %(message)s', |
386 | 'datefmt': '%H:%M', | 382 | 'datefmt': '%H:%M', |
387 | }, | 383 | }, |
388 | }, | 384 | }, |
@@ -419,8 +415,7 @@ def main(): | @@ -419,8 +415,7 @@ def main(): | ||
419 | args = parse_cmdline_arguments() | 415 | args = parse_cmdline_arguments() |
420 | 416 | ||
421 | # --- Setup logging | 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 | logging.info('====================== Start Logging ======================') | 419 | logging.info('====================== Start Logging ======================') |
425 | 420 | ||
426 | # --- start application | 421 | # --- start application |
@@ -430,7 +425,7 @@ def main(): | @@ -430,7 +425,7 @@ def main(): | ||
430 | 'allow_all': args.allow_all, | 425 | 'allow_all': args.allow_all, |
431 | 'show_ref': args.show_ref, | 426 | 'show_ref': args.show_ref, |
432 | 'review': args.review, | 427 | 'review': args.review, |
433 | - } | 428 | + } |
434 | 429 | ||
435 | try: | 430 | try: |
436 | testapp = App(config) | 431 | testapp = App(config) |
perguntations/templates/login.html
@@ -20,22 +20,22 @@ | @@ -20,22 +20,22 @@ | ||
20 | <!-- =================================================================== --> | 20 | <!-- =================================================================== --> |
21 | <body> | 21 | <body> |
22 | <div class="container-fluid"> | 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 | <div class="card-body"> | 24 | <div class="card-body"> |
25 | <div class="row"> | 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 | </div> | 29 | </div> |
30 | 30 | ||
31 | - <div class="col-sm-8"> | 31 | + <div class="col-sm-3"> |
32 | <h4>Identificação:</h4> | 32 | <h4>Identificação:</h4> |
33 | 33 | ||
34 | <form method="post" action="/login" class="form-signin"> | 34 | <form method="post" action="/login" class="form-signin"> |
35 | {% module xsrf_form_html() %} | 35 | {% module xsrf_form_html() %} |
36 | <div class="form-group"> | 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 | <p> {{ error }} </p> | 39 | <p> {{ error }} </p> |
40 | </div> | 40 | </div> |
41 | <button class="btn btn-primary" type="submit"> | 41 | <button class="btn btn-primary" type="submit"> |