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 | 40 | |
| 41 | 41 | |
| 42 | 42 | # ============================================================================ |
| 43 | +class LearnException(Exception): | |
| 44 | + pass | |
| 45 | + | |
| 46 | + | |
| 47 | +# ============================================================================ | |
| 43 | 48 | # LearnApp - application logic |
| 44 | 49 | # ============================================================================ |
| 45 | 50 | class LearnApp(object): |
| ... | ... | @@ -256,8 +261,8 @@ class LearnApp(object): |
| 256 | 261 | # |
| 257 | 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 | 266 | config = load_yaml(conffile) # course configuration |
| 262 | 267 | |
| 263 | 268 | # default attributes that apply to the topics |
| ... | ... | @@ -275,7 +280,13 @@ class LearnApp(object): |
| 275 | 280 | |
| 276 | 281 | g.add_nodes_from(topics.keys()) |
| 277 | 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 | 291 | t = g.node[tref] # get current topic node |
| 281 | 292 | t['type'] = attr.get('type', 'topic') |
| ... | ... | @@ -302,7 +313,7 @@ class LearnApp(object): |
| 302 | 313 | # Buils dictionary of question factories |
| 303 | 314 | # ------------------------------------------------------------------------ |
| 304 | 315 | def make_factory(self): |
| 305 | - logger.info('Building questions factory') | |
| 316 | + logger.info('Building questions factory...') | |
| 306 | 317 | factory = {} # {'qref': QFactory()} |
| 307 | 318 | g = self.deps |
| 308 | 319 | for tref in g.nodes(): | ... | ... |