Commit e6915ba05f9c4729557ff39bb12f8c476312ccc8
1 parent
51627bcc
Exists in
master
and in
1 other branch
- code cleanup.
- fixed info questions to continue with a single button click.
Showing
3 changed files
with
36 additions
and
26 deletions
Show diff stats
BUGS.md
1 | 1 | |
2 | 2 | # BUGS |
3 | 3 | |
4 | -- falha no file handler de vez em quando, nao sei porquê... | |
4 | +- falha intermitent no file handler quando o browser envia 2 GET requests ao mesmo tempo (porquê?) | |
5 | 5 | - nos topicos learn.yaml, qd falha acrescenta no fim. nao faz sentido. |
6 | 6 | - ocorreu uma vez o sqlalchemy dar mesg erro a indicar que as threads sao diferents quando se faz o get da primeira pergunta do topico. Muitas vezes nao mostar erro, mas a pagina da erro ou fica em branco... |
7 | 7 | ... | ... |
serve.py
... | ... | @@ -16,6 +16,7 @@ import functools |
16 | 16 | import tornado.ioloop |
17 | 17 | import tornado.web |
18 | 18 | import tornado.httpserver |
19 | +from tornado.escape import to_unicode | |
19 | 20 | |
20 | 21 | # this project |
21 | 22 | from learnapp import LearnApp |
... | ... | @@ -122,9 +123,9 @@ class ChangePasswordHandler(BaseHandler): |
122 | 123 | |
123 | 124 | changed_ok = await self.learn.change_password(uid, pw) |
124 | 125 | if changed_ok: |
125 | - notification = tornado.escape.to_unicode(self.render_string('notification.html', type='success', msg='A password foi alterada!')) | |
126 | + notification = to_unicode(self.render_string('notification.html', type='success', msg='A password foi alterada!')) | |
126 | 127 | else: |
127 | - notification = tornado.escape.to_unicode(self.render_string('notification.html', type='danger', msg='A password não foi alterada!')) | |
128 | + notification = to_unicode(self.render_string('notification.html', type='danger', msg='A password não foi alterada!')) | |
128 | 129 | self.write({'msg': notification}) |
129 | 130 | |
130 | 131 | |
... | ... | @@ -141,7 +142,6 @@ class RootHandler(BaseHandler): |
141 | 142 | name=self.learn.get_student_name(uid), |
142 | 143 | state=self.learn.get_student_state(uid), |
143 | 144 | title=self.learn.get_title(), |
144 | - # get_topic_type=self.learn.get_topic_type, # function | |
145 | 145 | ) |
146 | 146 | |
147 | 147 | |
... | ... | @@ -172,12 +172,13 @@ class TopicHandler(BaseHandler): |
172 | 172 | # ---------------------------------------------------------------------------- |
173 | 173 | |
174 | 174 | # FIXME error in many situations... images are not shown... |
175 | - | |
175 | +# seems to happen when the browser sends two GET requests at the same time | |
176 | 176 | class FileHandler(BaseHandler): |
177 | 177 | SUPPORTED_METHODS = ['GET'] |
178 | 178 | |
179 | 179 | @tornado.web.authenticated |
180 | - async def get(self, filename): | |
180 | + # async | |
181 | + def get(self, filename): | |
181 | 182 | uid = self.current_user |
182 | 183 | public_dir = self.learn.get_current_public_dir(uid) |
183 | 184 | filepath = path.expanduser(path.join(public_dir, filename)) |
... | ... | @@ -191,12 +192,13 @@ class FileHandler(BaseHandler): |
191 | 192 | else: |
192 | 193 | content_type = mimetypes.guess_type(filename) |
193 | 194 | self.set_header("Content-Type", content_type[0]) |
194 | - | |
195 | 195 | # divide the file into chunks and write one chunk at a time, so |
196 | 196 | # that the write does not block the ioloop for very long. |
197 | 197 | with f: |
198 | - self.write(f.read()) | |
199 | - await self.flush() | |
198 | + data = f.read() | |
199 | + self.write(data) | |
200 | + # await self.flush() | |
201 | + self.flush() | |
200 | 202 | |
201 | 203 | |
202 | 204 | # ---------------------------------------------------------------------------- |
... | ... | @@ -226,24 +228,24 @@ class QuestionHandler(BaseHandler): |
226 | 228 | q = self.learn.get_current_question(user) |
227 | 229 | |
228 | 230 | if q is not None: |
229 | - question_html = self.render_string(self.templates[q['type']], | |
230 | - question=q, md=md_to_html) | |
231 | + question_html = to_unicode(self.render_string(self.templates[q['type']], | |
232 | + question=q, md=md_to_html)) | |
231 | 233 | response = { |
232 | 234 | 'method': 'new_question', |
233 | 235 | 'params': { |
234 | 236 | 'type': q['type'], |
235 | - 'question': tornado.escape.to_unicode(question_html), | |
237 | + 'question': question_html, | |
236 | 238 | 'progress': self.learn.get_student_progress(user), |
237 | 239 | 'tries': q['tries'], |
238 | - }, | |
240 | + } | |
239 | 241 | } |
240 | 242 | |
241 | 243 | else: |
242 | - finished_topic_html = self.render_string('finished_topic.html') | |
244 | + finished_topic_html = to_unicode(self.render_string('finished_topic.html')) | |
243 | 245 | response = { |
244 | 246 | 'method': 'finished_topic', |
245 | 247 | 'params': { |
246 | - 'question': tornado.escape.to_unicode(finished_topic_html) | |
248 | + 'question': finished_topic_html | |
247 | 249 | } |
248 | 250 | } |
249 | 251 | |
... | ... | @@ -275,8 +277,9 @@ class QuestionHandler(BaseHandler): |
275 | 277 | comments=q['comments'], md=md_to_html) |
276 | 278 | |
277 | 279 | response['params'] = { |
280 | + 'type': q['type'], | |
278 | 281 | 'progress': self.learn.get_student_progress(user), |
279 | - 'comments': tornado.escape.to_unicode(comments_html), | |
282 | + 'comments': to_unicode(comments_html), | |
280 | 283 | 'tries': q['tries'], |
281 | 284 | } |
282 | 285 | |
... | ... | @@ -285,21 +288,23 @@ class QuestionHandler(BaseHandler): |
285 | 288 | comments=q['comments'], md=md_to_html) |
286 | 289 | |
287 | 290 | response['params'] = { |
291 | + 'type': q['type'], | |
288 | 292 | 'progress': self.learn.get_student_progress(user), |
289 | - 'comments': tornado.escape.to_unicode(comments_html), # FIXME | |
293 | + 'comments': to_unicode(comments_html), | |
290 | 294 | 'tries': q['tries'], |
291 | 295 | } |
292 | 296 | |
293 | 297 | elif action == 'wrong': # no more tries |
294 | - comments_html = self.render_string('comments.html', | |
295 | - comments=q['comments'], md=md_to_html) | |
296 | - solution_html = self.render_string('solution.html', | |
297 | - solution=q['solution'], md=md_to_html) | |
298 | + comments_html = to_unicode(self.render_string('comments.html', | |
299 | + comments=q['comments'], md=md_to_html)) | |
300 | + solution_html = to_unicode(self.render_string('solution.html', | |
301 | + solution=q['solution'], md=md_to_html)) | |
298 | 302 | |
299 | 303 | response['params'] = { |
304 | + 'type': q['type'], | |
300 | 305 | 'progress': self.learn.get_student_progress(user), |
301 | - 'comments': tornado.escape.to_unicode(comments_html), | |
302 | - 'solution': tornado.escape.to_unicode(solution_html), | |
306 | + 'comments': comments_html, | |
307 | + 'solution': solution_html, | |
303 | 308 | 'tries': q['tries'], |
304 | 309 | } |
305 | 310 | ... | ... |
static/js/topic.js
... | ... | @@ -26,7 +26,6 @@ function updateQuestion(response) { |
26 | 26 | |
27 | 27 | switch (method) { |
28 | 28 | case "new_question": |
29 | - console.log(params["type"]); | |
30 | 29 | new_question(params["type"], params["question"], params["tries"], params["progress"]); |
31 | 30 | break; |
32 | 31 | case "finished_topic": |
... | ... | @@ -52,8 +51,8 @@ function new_question(type, question, tries, progress) { |
52 | 51 | } |
53 | 52 | $("#submit").off(); |
54 | 53 | $("#submit").click(postAnswer); |
55 | - | |
56 | 54 | $("#tries").html(tries); |
55 | + | |
57 | 56 | $('#topic_progress').css('width', (100*progress)+'%').attr('aria-valuenow', 100*progress); |
58 | 57 | MathJax.Hub.Queue(["Typeset",MathJax.Hub,"question_div"]); |
59 | 58 | |
... | ... | @@ -90,11 +89,17 @@ function getFeedback(response) { |
90 | 89 | var method = response["method"]; |
91 | 90 | var params = response["params"]; |
92 | 91 | |
92 | + if (params['type'] == "info") { | |
93 | + getQuestion(); | |
94 | + return; | |
95 | + } | |
96 | + | |
93 | 97 | switch (method) { |
94 | 98 | case "right": |
95 | 99 | $('#comments').html(params['comments']); |
96 | 100 | MathJax.Hub.Queue(["Typeset", MathJax.Hub, "#comments"]); |
97 | 101 | $("#submit").html("Continuar"); |
102 | + // $("#submit").toggleClass("btn-info btn-primary"); | |
98 | 103 | $("#submit").off(); |
99 | 104 | $("#submit").click(getQuestion); |
100 | 105 | break; |
... | ... | @@ -123,7 +128,7 @@ function getFeedback(response) { |
123 | 128 | } |
124 | 129 | } |
125 | 130 | |
126 | - | |
131 | +// =========================================================================== | |
127 | 132 | $(document).ready(function() { |
128 | 133 | getQuestion(); |
129 | 134 | $("#submit").click(postAnswer); | ... | ... |