Commit bbdca9b8ded8a684c6cca7056233e512478ea90a

Authored by Miguel Barão
1 parent ed4d8414
Exists in master and in 1 other branch dev

- fixed error when topic/wrong_name was given in the addressbar

Showing 3 changed files with 35 additions and 23 deletions   Show diff stats
BUGS.md
1 1  
2 2 BUGS:
3 3  
4   -- barra de progresso nao está visível.
  4 +- templates not working: quesntion-information, question-warning (remove all informative panels??)
  5 +- link directo para topico nao valida se topico esta unlocked.
5 6 - reportar comentarios após submeter.
6 7 - forçar reload das perguntas sem ter de deitar abaixo o servidor.
7 8 - topicos virtuais nao deveriam aparecer. na construção da árvore os sucessores seriam ligados directamente aos predecessores.
... ... @@ -33,6 +34,8 @@ TODO:
33 34  
34 35 FIXED:
35 36  
  37 +- enderecos errados dao internal error.
  38 +- barra de progresso nao está visível.
36 39 - tabs em textarea nao funcionam correctamente (insere 1 espaco em vez de 4)
37 40 - guardar state cada vez que topico termina
38 41 - textarea deve mostrar no html os valores iniciais de ans, se existirem
... ...
learnapp.py
... ... @@ -51,12 +51,12 @@ class LearnApp(object):
51 51 with self.db_session() as s:
52 52 student = s.query(Student).filter(Student.id == uid).one_or_none()
53 53 if student is None:
54   - logger.info(f'User "{uid}" does not exist.')
  54 + logger.info(f'User "{uid}" does not exist!')
55 55 return False # student does not exist
56 56  
57 57 hashedtry = bcrypt.hashpw(try_pw.encode('utf-8'), student.password)
58 58 if hashedtry != student.password:
59   - logger.info(f'User "{uid}" wrong password.')
  59 + logger.info(f'User "{uid}" wrong password!')
60 60 return False # wrong password
61 61  
62 62 # success
... ... @@ -146,8 +146,13 @@ class LearnApp(object):
146 146 # Start new topic
147 147 # ------------------------------------------------------------------------
148 148 def start_topic(self, uid, topic):
149   - self.online[uid]['state'].init_topic(topic)
150   - logger.info(f'User "{uid}" started "{topic}"')
  149 + try:
  150 + self.online[uid]['state'].init_topic(topic)
  151 + except KeyError as e:
  152 + logger.warning(f'User "{uid}" trying to start nonexistent "{topic}"')
  153 + raise e
  154 + else:
  155 + logger.info(f'User "{uid}" started "{topic}"')
151 156  
152 157 # ------------------------------------------------------------------------
153 158 # Fill db table 'Topic' with topics from the graph if not already there.
... ... @@ -158,7 +163,7 @@ class LearnApp(object):
158 163 missing_topics = [Topic(id=n) for n in nn if n not in tt]
159 164 if missing_topics:
160 165 s.add_all(missing_topics)
161   - logger.info(f'Added {len(missing_topics)} new topics to the database.')
  166 + logger.info(f'Added {len(missing_topics)} new topics to the database')
162 167  
163 168 # ------------------------------------------------------------------------
164 169 # setup and check database
... ... @@ -173,12 +178,12 @@ class LearnApp(object):
173 178 m = s.query(Topic).count()
174 179 q = s.query(Answer).count()
175 180 except Exception as e:
176   - logger.critical(f'Database "{db}" not usable.')
  181 + logger.critical(f'Database "{db}" not usable!')
177 182 sys.exit(1)
178 183 else:
179   - logger.info(f'{n:6} students.')
180   - logger.info(f'{m:6} topics.')
181   - logger.info(f'{q:6} answers.')
  184 + logger.info(f'{n:6} students')
  185 + logger.info(f'{m:6} topics')
  186 + logger.info(f'{q:6} answers')
182 187  
183 188 # ------------------------------------------------------------------------
184 189 # helper to manage db sessions using the `with` statement, for example
... ...
serve.py
... ... @@ -30,8 +30,8 @@ class WebApplication(tornado.web.Application):
30 30 (r'/change_password', ChangePasswordHandler),
31 31 (r'/question', QuestionHandler), # each question
32 32 (r'/topic/(.+)', TopicHandler), # page for doing a topic
33   - (r'/', RootHandler), # show list of topics
34   - # (r'/file/(.+)', FileHandler), # FIXME
  33 + # (r'/file/(.+)', FileHandler), # FIXME
  34 + (r'/.*', RootHandler), # show list of topics
35 35 ]
36 36 settings = {
37 37 'template_path': path.join(path.dirname(__file__), 'templates'),
... ... @@ -121,19 +121,23 @@ class RootHandler(BaseHandler):
121 121 )
122 122  
123 123 # ----------------------------------------------------------------------------
124   -# Start a given topic: /topic
  124 +# Start a given topic: /topic/...
125 125 # ----------------------------------------------------------------------------
126 126 class TopicHandler(BaseHandler):
127 127 @tornado.web.authenticated
128 128 def get(self, topic):
129 129 uid = self.current_user
130 130  
131   - self.learn.start_topic(uid, topic)
132   -
133   - self.render('topic.html',
134   - uid=uid,
135   - name=self.learn.get_student_name(uid),
136   - )
  131 + try:
  132 + self.learn.start_topic(uid, topic)
  133 + except KeyError:
  134 + self.redirect('/')
  135 + # raise tornado.web.HTTPError(404)
  136 + else:
  137 + self.render('topic.html',
  138 + uid=uid,
  139 + name=self.learn.get_student_name(uid),
  140 + )
137 141  
138 142  
139 143 # ----------------------------------------------------------------------------
... ... @@ -163,9 +167,9 @@ class QuestionHandler(BaseHandler):
163 167 'numeric-interval': 'question-text.html',
164 168 'textarea': 'question-textarea.html',
165 169 # -- information panels --
166   - 'information': 'question-information.html',
167   - 'info': 'question-information.html',
168   - 'success': 'question-success.html',
  170 + 'information': 'question-information.html',
  171 + 'info': 'question-information.html',
  172 + 'success': 'question-success.html',
169 173 # 'warning': '', FIXME
170 174 # 'warn': '', FIXME
171 175 # 'alert': '', FIXME
... ... @@ -276,7 +280,7 @@ def main():
276 280 learnapp = LearnApp(arg.conffile[0])
277 281  
278 282 # --- create web application
279   - logging.info('Starting Web App (tornado).')
  283 + logging.info('Starting Web App (tornado)')
280 284 try:
281 285 webapp = WebApplication(learnapp, debug=arg.debug)
282 286 except Exception as e:
... ...