Commit a4925cb4b9abc2d48d48ed17c45495b6ab83e6a2
1 parent
e1ad9bc6
Exists in
master
and in
1 other branch
- database configurable in the config.yaml file
- replaced some initial critical exceptions by sys.exit(1)
Showing
2 changed files
with
15 additions
and
12 deletions
Show diff stats
BUGS.md
| 1 | 1 | BUGS: |
| 2 | 2 | |
| 3 | +- session management. close after some inactive time. | |
| 3 | 4 | - guardar state cada vez que topico termina |
| 4 | 5 | - mostrar quantas perguntas faltam |
| 5 | 6 | - logs mostram que está a gerar cada pergunta 2 vezes...?? |
| 6 | -- mostra tópicos do lado esquerdo, indicando quais estão feitos e quantas perguntas contêm. | |
| 7 | -- se students.db não existe, rebenta. | |
| 8 | -- database hardcoded in LearnApp. | |
| 9 | 7 | - implementar xsrf. Ver [http://www.tornadoweb.org/en/stable/guide/security.html#cross-site-request-forgery-protection]() |
| 10 | 8 | |
| 11 | 9 | TODO: |
| ... | ... | @@ -16,6 +14,9 @@ TODO: |
| 16 | 14 | |
| 17 | 15 | SOLVED: |
| 18 | 16 | |
| 17 | +- mostra tópicos do lado esquerdo, indicando quais estão feitos | |
| 18 | +- database hardcoded in LearnApp. | |
| 19 | +- se students.db não existe, rebenta. | |
| 19 | 20 | - não entra à primeira |
| 20 | 21 | - configuração e linha de comando. |
| 21 | 22 | - o browser é redireccionado para /question em vez de fazer um post?? quando se pressiona enter numa caixa text edit. | ... | ... |
app.py
| ... | ... | @@ -2,7 +2,7 @@ |
| 2 | 2 | # python standard library |
| 3 | 3 | from contextlib import contextmanager # `with` statement in db sessions |
| 4 | 4 | import logging |
| 5 | -from os import path | |
| 5 | +from os import path, sys | |
| 6 | 6 | |
| 7 | 7 | # user installed libraries |
| 8 | 8 | try: |
| ... | ... | @@ -32,12 +32,12 @@ class LearnApp(object): |
| 32 | 32 | # online students |
| 33 | 33 | self.online = {} |
| 34 | 34 | |
| 35 | - # connect to database and check registered students | |
| 36 | - self.db_setup('students.db') # FIXME | |
| 37 | - | |
| 38 | 35 | # build dependency graph |
| 39 | 36 | self.build_dependency_graph(conffile) # FIXME |
| 40 | 37 | |
| 38 | + # connect to database and check registered students | |
| 39 | + self.db_setup(self.depgraph.graph['database']) # FIXME | |
| 40 | + | |
| 41 | 41 | # add topics from depgraph to the database |
| 42 | 42 | self.db_add_topics() |
| 43 | 43 | |
| ... | ... | @@ -155,7 +155,7 @@ class LearnApp(object): |
| 155 | 155 | # Receives a set of topics (strings like "math/algebra"), |
| 156 | 156 | # and recursively adds dependencies to the dependency graph |
| 157 | 157 | def build_dependency_graph(self, config_file): |
| 158 | - logger.debug(f'build_dependency_graph("{config_file}")') | |
| 158 | + logger.debug(f'LearnApp.build_dependency_graph("{config_file}")') | |
| 159 | 159 | |
| 160 | 160 | # Load configuration file |
| 161 | 161 | try: |
| ... | ... | @@ -164,11 +164,12 @@ class LearnApp(object): |
| 164 | 164 | config = yaml.load(f) |
| 165 | 165 | except FileNotFoundError as e: |
| 166 | 166 | logger.error(f'File not found: "{config_file}"') |
| 167 | - raise e | |
| 167 | + sys.exit(1) | |
| 168 | 168 | |
| 169 | 169 | prefix = config['path'] # FIXME default if does not exist? |
| 170 | 170 | title = config.get('title', '') |
| 171 | - g = nx.DiGraph(path=prefix, title=title) | |
| 171 | + database = config.get('database', 'students.db') | |
| 172 | + g = nx.DiGraph(path=prefix, title=title, database=database) | |
| 172 | 173 | |
| 173 | 174 | # Build dependency graph |
| 174 | 175 | deps = config.get('dependencies', {}) |
| ... | ... | @@ -202,14 +203,15 @@ class LearnApp(object): |
| 202 | 203 | # ------------------------------------------------------------------------ |
| 203 | 204 | # setup and check database |
| 204 | 205 | def db_setup(self, db): |
| 206 | + logger.debug(f'LearnApp.db_setup("{db}")') | |
| 205 | 207 | engine = create_engine(f'sqlite:///{db}', echo=False) |
| 206 | 208 | self.Session = sessionmaker(bind=engine) |
| 207 | 209 | try: |
| 208 | 210 | with self.db_session() as s: |
| 209 | 211 | n = s.query(Student).count() |
| 210 | 212 | except Exception as e: |
| 211 | - logger.critical('Database not usable.') | |
| 212 | - raise e | |
| 213 | + logger.critical(f'Database "{db}" not usable.') | |
| 214 | + sys.exit(1) | |
| 213 | 215 | else: |
| 214 | 216 | logger.info(f'Database has {n} students registered.') |
| 215 | 217 | ... | ... |