Commit 623ce1101b09268cee36d39375307b22798192a8
1 parent
23013d8c
Exists in
master
and in
1 other branch
- added a 'train_mode'. The submission will correct and show the test with the results obtained.
Showing
4 changed files
with
41 additions
and
17 deletions
Show diff stats
BUGS.md
... | ... | @@ -8,6 +8,7 @@ |
8 | 8 | |
9 | 9 | # TODO |
10 | 10 | |
11 | +- implementar train_mode:False em que a submissão do teste só faz a correcção e mantem-se na mesma página para o aluno corrigir as respostas. | |
11 | 12 | - alterar o script json2md.py em conformidade |
12 | 13 | - Menu para professor com link para /results e /students |
13 | 14 | - implementar singlepage/multipage. Fazer uma class para single page que trate de andar gerir o avanco e correcao das perguntas | ... | ... |
serve.py
... | ... | @@ -102,21 +102,26 @@ class Root(object): |
102 | 102 | # store results in the database |
103 | 103 | t.update_answers(ans) |
104 | 104 | t.correct() |
105 | - if t['save_answers']: | |
106 | - t.save_json(self.testconf['answers_dir']) | |
107 | - self.database.save_test(t) | |
108 | - | |
109 | - # ---- Expire session ---- | |
110 | - self.loggedin.discard(t['number']) | |
111 | - cherrypy.lib.sessions.expire() # session coockie expires client side | |
112 | - cherrypy.session['userid'] = cherrypy.request.login = None | |
113 | - cherrypy.log.error('Student %s terminated with grade = %.2f points.' % | |
114 | - (t['number'], t['grade']), 'APPLICATION') | |
115 | - | |
116 | - # ---- Show result to student ---- | |
117 | - grades = self.database.student_grades(t['number']) | |
118 | - template = self.templates.get_template('grade.html') | |
119 | - return template.render(t=t, allgrades=grades) | |
105 | + | |
106 | + if t['train_mode']: | |
107 | + raise cherrypy.HTTPRedirect('/test') | |
108 | + | |
109 | + else: | |
110 | + if t['save_answers']: | |
111 | + t.save_json(self.testconf['answers_dir']) | |
112 | + self.database.save_test(t) | |
113 | + | |
114 | + # ---- Expire session ---- | |
115 | + self.loggedin.discard(t['number']) | |
116 | + cherrypy.lib.sessions.expire() # session coockie expires client side | |
117 | + cherrypy.session['userid'] = cherrypy.request.login = None | |
118 | + cherrypy.log.error('Student %s terminated with grade = %.2f points.' % | |
119 | + (t['number'], t['grade']), 'APPLICATION') | |
120 | + | |
121 | + # ---- Show result to student ---- | |
122 | + grades = self.database.student_grades(t['number']) | |
123 | + template = self.templates.get_template('grade.html') | |
124 | + return template.render(t=t, allgrades=grades) | |
120 | 125 | |
121 | 126 | # ============================================================================ |
122 | 127 | def parse_arguments(): | ... | ... |
templates/test.html
... | ... | @@ -189,10 +189,28 @@ |
189 | 189 | % endif # modal |
190 | 190 | % endif # show_hints |
191 | 191 | |
192 | + % if t['train_mode'] and 'grade' in q: | |
193 | + % if q['grade'] > 0.9: | |
194 | + <div class="alert alert-success" role="alert"> | |
195 | + <span class="glyphicon glyphicon-ok" aria-hidden="true"></span> | |
196 | + ${round(q['grade'] * q['points'] / total_points * 20.0, 1)} valores | |
197 | + </div> | |
198 | + % elif q['grade'] > 0.5: | |
199 | + <div class="alert alert-warning" role="alert"> | |
200 | + <span class="glyphicon glyphicon-exclamation-sign" aria-hidden="true"></span> | |
201 | + ${round(q['grade'] * q['points'] / total_points * 20.0, 1)} valores | |
202 | + </div> | |
203 | + % else: | |
204 | + <div class="alert alert-danger" role="alert"> | |
205 | + <span class="glyphicon glyphicon-remove" aria-hidden="true"></span> | |
206 | + ${round(q['grade'] * q['points'] / total_points * 20.0, 1)} valores | |
207 | + </div> | |
208 | + % endif | |
209 | + % endif | |
192 | 210 | |
193 | 211 | % if t['show_points']: |
194 | 212 | <p class="text-right"> |
195 | - <small>(${q['points'] / total_points * 20.0} pontos)</small> | |
213 | + <small>(${round(q['points'] / total_points * 20.0, 1)} pontos)</small> | |
196 | 214 | <p> |
197 | 215 | % endif |
198 | 216 | ... | ... |
test.py
... | ... | @@ -23,7 +23,7 @@ def read_configuration(filename): |
23 | 23 | test['title'] = str(test.get('title', '')) |
24 | 24 | test['show_hints'] = bool(test.get('show_hints', False)) |
25 | 25 | test['show_points'] = bool(test.get('show_points', False)) |
26 | - test['singlepage'] = bool(test.get('singlepage', True)) | |
26 | + test['train_mode'] = bool(test.get('train_mode', False)) | |
27 | 27 | test['save_answers'] = bool(test.get('save_answers', True)) |
28 | 28 | if test['save_answers']: |
29 | 29 | if 'answers_dir' not in test: | ... | ... |