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