Commit 0e95aad2c4dd6637d4955f76b4bdbecf25864236
1 parent
b1febcff
Exists in
master
and in
1 other branch
- /students shows active/inactive/finished in separate panels
Showing
3 changed files
with
109 additions
and
37 deletions
Show diff stats
database.py
| ... | ... | @@ -29,6 +29,21 @@ class Database(object): |
| 29 | 29 | ORDER BY grade DESC, finish_time DESC;''' |
| 30 | 30 | return c.execute(cmd, [test_id]).fetchall() |
| 31 | 31 | |
| 32 | + # return list of students and their results for a given test | |
| 33 | + def test_grades2(self, test_id): | |
| 34 | + with sqlite3.connect(self.db) as c: | |
| 35 | + # with all tests done by each student: | |
| 36 | + # cmd = 'SELECT student_id,name,grade FROM students INNER JOIN tests ON students.number=tests.student_id WHERE test_id==? ORDER BY grade DESC;' | |
| 37 | + | |
| 38 | + # only the best result for each student | |
| 39 | + cmd = ''' | |
| 40 | + SELECT student_id, name, grade, start_time, finish_time | |
| 41 | + FROM students INNER JOIN tests | |
| 42 | + ON students.number=tests.student_id | |
| 43 | + WHERE test_id==? | |
| 44 | + ORDER BY finish_time ASC;''' | |
| 45 | + return c.execute(cmd, [test_id]).fetchall() | |
| 46 | + | |
| 32 | 47 | # get list of students in the database |
| 33 | 48 | def get_students(self): |
| 34 | 49 | with sqlite3.connect(self.db) as c: | ... | ... |
serve.py
| ... | ... | @@ -17,7 +17,6 @@ except ImportError: |
| 17 | 17 | |
| 18 | 18 | try: |
| 19 | 19 | from mako.lookup import TemplateLookup |
| 20 | - import djks | |
| 21 | 20 | except ImportError: |
| 22 | 21 | print('The package "mako" is missing. See README.md for instructions.') |
| 23 | 22 | sys.exit(1) |
| ... | ... | @@ -78,9 +77,11 @@ class Root(object): |
| 78 | 77 | for num in reset_pw: |
| 79 | 78 | cherrypy.log.error('Password updated for student %s.' % str(num), 'APPLICATION') |
| 80 | 79 | |
| 80 | + grades = self.database.test_grades2(self.testconf['ref']) | |
| 81 | 81 | students = self.database.get_students() |
| 82 | + | |
| 82 | 83 | template = self.templates.get_template('/students.html') |
| 83 | - return template.render(students=students, tags=self.tags) | |
| 84 | + return template.render(students=students, tags=self.tags, grades=grades) | |
| 84 | 85 | |
| 85 | 86 | # --- RESULTS ------------------------------------------------------------ |
| 86 | 87 | @cherrypy.expose | ... | ... |
templates/students.html
| ... | ... | @@ -33,46 +33,102 @@ |
| 33 | 33 | <div class="container"> |
| 34 | 34 | <div class="panel panel-default drop-shadow"> |
| 35 | 35 | <div class="panel-heading"> |
| 36 | - <span class="badge">${len(tags['online'])} online</span> <span class="badge">${len(tags['finished'])} finished</span> | |
| 36 | + ${len(tags['finished'])} Terminado(s)</span> | |
| 37 | 37 | </div> |
| 38 | - <!-- <div class="panel-body"> --> | |
| 39 | - <table class="table"> | |
| 40 | - <thead> | |
| 41 | - <tr> | |
| 42 | - <th>Tags</th> | |
| 43 | - <th>Número</th> | |
| 44 | - <th>Nome</th> | |
| 45 | - <th>Password</th> | |
| 46 | - </tr> | |
| 47 | - </thead> | |
| 48 | - <tbody> | |
| 49 | - % for r in students: | |
| 38 | + <div class="panel-body"> | |
| 39 | + <table class="table"> | |
| 40 | + <thead> | |
| 50 | 41 | <tr> |
| 51 | - <td> | |
| 52 | - % if r[0] in tags['online']: | |
| 53 | - <span class="label label-primary">online</span> | |
| 54 | - % endif | |
| 42 | + <th>Número</th> | |
| 43 | + <th>Nome</th> | |
| 44 | + <th>Login</th> | |
| 45 | + <th>Logout</th> | |
| 46 | + <th>Nota</th> | |
| 47 | + </tr> | |
| 48 | + </thead> | |
| 49 | + <tbody> | |
| 50 | + % for r in grades: | |
| 51 | + <tr> | |
| 55 | 52 | % if r[0] in tags['finished']: |
| 56 | - <span class="label label-success">finished</span> | |
| 53 | + <td>${r[0]}</td> <!-- numero --> | |
| 54 | + <td>${r[1]}</td> <!-- nome --> | |
| 55 | + <td>${r[3][:19]}</td> | |
| 56 | + <td>${r[4][:19]}</td> | |
| 57 | + <td>${r[2]}</td> | |
| 58 | + | |
| 57 | 59 | % endif |
| 58 | - </td> | |
| 59 | - <td>${r[0]}</td> <!-- numero --> | |
| 60 | - <td>${r[1]}</td> <!-- nome --> | |
| 61 | - <td class="col-sm-3"> | |
| 62 | - <form action="/students/" method="post" id="${r[0]}"> | |
| 63 | - <div class="input-group"> | |
| 64 | - <input type="password" class="form-control" placeholder="${r[2][:8]}" name="${r[0]}"> | |
| 65 | - <span class="input-group-btn"> | |
| 66 | - <button form="${r[0]}" type="submit" value="submit" class="btn btn-danger">reset</button> | |
| 67 | - </span> | |
| 68 | - </div><!-- /input-group --> | |
| 69 | - </form> | |
| 70 | - </td> <!-- password --> | |
| 60 | + </tr> | |
| 61 | + % endfor | |
| 62 | + </tbody> | |
| 63 | + </table> | |
| 64 | + </div> | |
| 65 | + </div> | |
| 66 | + | |
| 67 | + <div class="panel panel-success drop-shadow"> | |
| 68 | + <div class="panel-heading"> | |
| 69 | + ${len(tags['online'])} Activo(s)</span> | |
| 70 | + </div> | |
| 71 | + <div class="panel-body"> | |
| 72 | + <table class="table"> | |
| 73 | + <thead> | |
| 74 | + <tr> | |
| 75 | + <th>Número</th> | |
| 76 | + <th>Nome</th> | |
| 77 | +<!-- <th>Login</th> --> | |
| 71 | 78 | </tr> |
| 72 | - % endfor | |
| 73 | - </tbody> | |
| 74 | - </table> | |
| 75 | - </div> <!-- panel --> | |
| 79 | + </thead> | |
| 80 | + <tbody> | |
| 81 | + % for r in students: | |
| 82 | + <tr> | |
| 83 | + % if r[0] in tags['online']: | |
| 84 | + <td>${r[0]}</td> <!-- numero --> | |
| 85 | + <td>${r[1]}</td> <!-- nome --> | |
| 86 | + % endif | |
| 87 | + </tr> | |
| 88 | + % endfor | |
| 89 | + </tbody> | |
| 90 | + </table> | |
| 91 | + </div> | |
| 92 | + </div> | |
| 93 | + | |
| 94 | + | |
| 95 | + <div class="panel panel-danger drop-shadow"> | |
| 96 | + <div class="panel-heading"> | |
| 97 | + ${len(students)-len(tags['online'])} Inactivo(s)</span> | |
| 98 | + </div> | |
| 99 | + <div class="panel-body"> | |
| 100 | + | |
| 101 | + <table class="table"> | |
| 102 | + <thead> | |
| 103 | + <tr> | |
| 104 | + <th>Número</th> | |
| 105 | + <th>Nome</th> | |
| 106 | + <th>Password</th> | |
| 107 | + </tr> | |
| 108 | + </thead> | |
| 109 | + <tbody> | |
| 110 | + % for r in students: | |
| 111 | + <tr> | |
| 112 | + % if r[0] not in tags['online']: | |
| 113 | + <td>${r[0]}</td> <!-- numero --> | |
| 114 | + <td>${r[1]}</td> <!-- nome --> | |
| 115 | + <td class="col-sm-3"> | |
| 116 | + <form action="/students/" method="post" id="${r[0]}"> | |
| 117 | + <div class="input-group"> | |
| 118 | + <input type="password" class="form-control" placeholder="${r[2][:8]}" name="${r[0]}"> | |
| 119 | + <span class="input-group-btn"> | |
| 120 | + <button form="${r[0]}" type="submit" value="submit" class="btn btn-danger">reset</button> | |
| 121 | + </span> | |
| 122 | + </div><!-- /input-group --> | |
| 123 | + </form> | |
| 124 | + </td> <!-- password --> | |
| 125 | + % endif | |
| 126 | + </tr> | |
| 127 | + % endfor | |
| 128 | + </tbody> | |
| 129 | + </table> | |
| 130 | + </div> | |
| 131 | + </div> | |
| 76 | 132 | </div> <!-- container --> |
| 77 | 133 | </body> |
| 78 | 134 | </html> | ... | ... |