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 | 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
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"> | ... | ... |