Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/usr/local/bin/python3
- from typing import List, Mapping
- class Node:
- name: str
- deps: List[str] = []
- def __init__(self, name: str, deps: List[str] = []):
- self.name = name
- self.deps = deps
- class Nodes:
- nodes: Mapping[str, Node] = []
- def __init__(self, nodes: List[str]):
- self.nodes = nodes
- data = Nodes(nodes={
- 'a': Node(name='a', deps=['b']),
- 'b': Node(name='b', deps=['a']),
- })
- def dep_resolve(name: str, resolved: List[str], unresolved: List[str) -> None:
- unresolved.append(name)
- node = data.nodes[name]
- for edge in node.deps:
- print(edge)
- if edge not in resolved:
- if edge in unresolved:
- raise Exception('Circular reference detected: %s -> %s' % (name, edge))
- dep_resolve(edge, resolved, unresolved)
- resolved.append(name)
- unresolved.remove(name)
- resolved = []
- dep_resolve('b', resolved, [])
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement