Commit e02d725b49e852f3aa8a5a944a1b726b651ca665
1 parent
861d9ae5
Exists in
master
and in
1 other branch
Check if dependencies exist as nodes.
Showing
1 changed file
with
15 additions
and
4 deletions
Show diff stats
aprendizations/learnapp.py
@@ -40,6 +40,11 @@ async def bcrypt_hash_gen(new_pw): | @@ -40,6 +40,11 @@ async def bcrypt_hash_gen(new_pw): | ||
40 | 40 | ||
41 | 41 | ||
42 | # ============================================================================ | 42 | # ============================================================================ |
43 | +class LearnException(Exception): | ||
44 | + pass | ||
45 | + | ||
46 | + | ||
47 | +# ============================================================================ | ||
43 | # LearnApp - application logic | 48 | # LearnApp - application logic |
44 | # ============================================================================ | 49 | # ============================================================================ |
45 | class LearnApp(object): | 50 | class LearnApp(object): |
@@ -256,8 +261,8 @@ class LearnApp(object): | @@ -256,8 +261,8 @@ class LearnApp(object): | ||
256 | # | 261 | # |
257 | # Edges are obtained from the deps defined in the YAML file for each topic. | 262 | # Edges are obtained from the deps defined in the YAML file for each topic. |
258 | # ------------------------------------------------------------------------ | 263 | # ------------------------------------------------------------------------ |
259 | - def populate_graph(self, conffile): | ||
260 | - logger.info(f'Populating graph from: {conffile}') | 264 | + def populate_graph(self, conffile: str): |
265 | + logger.info(f'Populating graph from: {conffile}...') | ||
261 | config = load_yaml(conffile) # course configuration | 266 | config = load_yaml(conffile) # course configuration |
262 | 267 | ||
263 | # default attributes that apply to the topics | 268 | # default attributes that apply to the topics |
@@ -275,7 +280,13 @@ class LearnApp(object): | @@ -275,7 +280,13 @@ class LearnApp(object): | ||
275 | 280 | ||
276 | g.add_nodes_from(topics.keys()) | 281 | g.add_nodes_from(topics.keys()) |
277 | for tref, attr in topics.items(): | 282 | for tref, attr in topics.items(): |
278 | - g.add_edges_from((d, tref) for d in attr.get('deps', [])) | 283 | + for d in attr.get('deps', []): |
284 | + if d not in g.nodes(): | ||
285 | + logger.error(f'Topic "{tref}" depends on "{d}" but the ' | ||
286 | + f'latter does not exist') | ||
287 | + raise LearnException() | ||
288 | + else: | ||
289 | + g.add_edge(d, tref) | ||
279 | 290 | ||
280 | t = g.node[tref] # get current topic node | 291 | t = g.node[tref] # get current topic node |
281 | t['type'] = attr.get('type', 'topic') | 292 | t['type'] = attr.get('type', 'topic') |
@@ -302,7 +313,7 @@ class LearnApp(object): | @@ -302,7 +313,7 @@ class LearnApp(object): | ||
302 | # Buils dictionary of question factories | 313 | # Buils dictionary of question factories |
303 | # ------------------------------------------------------------------------ | 314 | # ------------------------------------------------------------------------ |
304 | def make_factory(self): | 315 | def make_factory(self): |
305 | - logger.info('Building questions factory') | 316 | + logger.info('Building questions factory...') |
306 | factory = {} # {'qref': QFactory()} | 317 | factory = {} # {'qref': QFactory()} |
307 | g = self.deps | 318 | g = self.deps |
308 | for tref in g.nodes(): | 319 | for tref in g.nodes(): |