Commit b5a62c5c96f95b78c3c4350943c477e4070818c3
1 parent
7838cd47
Exists in
master
and in
1 other branch
- fixed code to run with networkx 2.0
Showing
3 changed files
with
9 additions
and
9 deletions
Show diff stats
BUGS.md
| @@ -24,6 +24,7 @@ TODO: | @@ -24,6 +24,7 @@ TODO: | ||
| 24 | 24 | ||
| 25 | FIXED: | 25 | FIXED: |
| 26 | 26 | ||
| 27 | +- ver documentacao de migracao para networkx 2.0 https://networkx.github.io/documentation/stable/release/migration_guide_from_1.x_to_2.0.html | ||
| 27 | - script para adicionar users/reset passwords. | 28 | - script para adicionar users/reset passwords. |
| 28 | - os topicos locked devem estar inactivos no sidebar. | 29 | - os topicos locked devem estar inactivos no sidebar. |
| 29 | - enter faz GET /question, que responde com json no ecran. (solution: disabled enter) | 30 | - enter faz GET /question, que responde com json no ecran. (solution: disabled enter) |
app.py
| @@ -39,7 +39,6 @@ class LearnApp(object): | @@ -39,7 +39,6 @@ class LearnApp(object): | ||
| 39 | 39 | ||
| 40 | self.depgraph = build_dependency_graph(conffile) | 40 | self.depgraph = build_dependency_graph(conffile) |
| 41 | 41 | ||
| 42 | - | ||
| 43 | # connect to database and check registered students | 42 | # connect to database and check registered students |
| 44 | self.db_setup(self.depgraph.graph['database']) | 43 | self.db_setup(self.depgraph.graph['database']) |
| 45 | 44 | ||
| @@ -153,7 +152,7 @@ class LearnApp(object): | @@ -153,7 +152,7 @@ class LearnApp(object): | ||
| 153 | def db_add_topics(self): | 152 | def db_add_topics(self): |
| 154 | with self.db_session() as s: | 153 | with self.db_session() as s: |
| 155 | tt = [t[0] for t in s.query(Topic.id)] # db list of topics | 154 | tt = [t[0] for t in s.query(Topic.id)] # db list of topics |
| 156 | - nn = self.depgraph.nodes_iter() # topics in the graph | 155 | + nn = self.depgraph.nodes() # topics in the graph |
| 157 | s.add_all([Topic(id=n) for n in nn if n not in tt]) | 156 | s.add_all([Topic(id=n) for n in nn if n not in tt]) |
| 158 | 157 | ||
| 159 | # ------------------------------------------------------------------------ | 158 | # ------------------------------------------------------------------------ |
| @@ -276,7 +275,7 @@ def build_dependency_graph(config_file): | @@ -276,7 +275,7 @@ def build_dependency_graph(config_file): | ||
| 276 | 275 | ||
| 277 | # iterate over topics and create question factories | 276 | # iterate over topics and create question factories |
| 278 | logger.info('Loading:') | 277 | logger.info('Loading:') |
| 279 | - for tref in g.nodes_iter(): | 278 | + for tref in g.nodes(): |
| 280 | tnode = g.node[tref] # current node (topic) | 279 | tnode = g.node[tref] # current node (topic) |
| 281 | fullpath = path.expanduser(path.join(prefix, tref)) | 280 | fullpath = path.expanduser(path.join(prefix, tref)) |
| 282 | filename = path.join(fullpath, 'questions.yaml') | 281 | filename = path.join(fullpath, 'questions.yaml') |
knowledge.py
| @@ -33,8 +33,8 @@ class Knowledge(object): | @@ -33,8 +33,8 @@ class Knowledge(object): | ||
| 33 | 33 | ||
| 34 | self.state = state # {'topic_id': {'level':0.5, 'date': datetime}, ...} | 34 | self.state = state # {'topic_id': {'level':0.5, 'date': datetime}, ...} |
| 35 | 35 | ||
| 36 | - # compute recommended sequence of topics ['a', 'b',...] | ||
| 37 | - self.topic_sequence = nx.topological_sort(self.depgraph) | 36 | + # compute recommended sequence of topics ['a', 'b', ...] |
| 37 | + self.topic_sequence = list(nx.topological_sort(self.depgraph)) | ||
| 38 | 38 | ||
| 39 | # select a topic to do and initialize questions | 39 | # select a topic to do and initialize questions |
| 40 | self.start_topic() | 40 | self.start_topic() |
| @@ -44,15 +44,15 @@ class Knowledge(object): | @@ -44,15 +44,15 @@ class Knowledge(object): | ||
| 44 | # If all levels > 0.8, will stay in the last one forever... | 44 | # If all levels > 0.8, will stay in the last one forever... |
| 45 | # ------------------------------------------------------------------------ | 45 | # ------------------------------------------------------------------------ |
| 46 | def start_topic(self, topic=''): | 46 | def start_topic(self, topic=''): |
| 47 | - # unlock topics that have satisfied dependencies | ||
| 48 | - unlock_topics = [] | 47 | + # unlock topics whose dependencies are done |
| 48 | + unlocked_topics = [] | ||
| 49 | for t in self.topic_sequence: | 49 | for t in self.topic_sequence: |
| 50 | if t not in self.state: # is locked | 50 | if t not in self.state: # is locked |
| 51 | deps = self.depgraph.predecessors(t) | 51 | deps = self.depgraph.predecessors(t) |
| 52 | if all(d in self.state and self.state[d]['level'] > 0.01 for d in deps): # dependencies done | 52 | if all(d in self.state and self.state[d]['level'] > 0.01 for d in deps): # dependencies done |
| 53 | - unlock_topics.append(t) | 53 | + unlocked_topics.append(t) |
| 54 | 54 | ||
| 55 | - for t in unlock_topics: | 55 | + for t in unlocked_topics: |
| 56 | self.state[t] = {'level': 0.0, 'date': datetime.now()} | 56 | self.state[t] = {'level': 0.0, 'date': datetime.now()} |
| 57 | logger.info(f'User "{self.student}" unlocked "{t}"') | 57 | logger.info(f'User "{self.student}" unlocked "{t}"') |
| 58 | 58 |