Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- class CircDep(Exception):
- """CircDep is raised when dependency resolver encounters circular dependency.
- The only useful member 'path' gives full dependency circle."""
- path = []
- def __init__(self, a):
- self.path = a
- def ResolveDeps(deps):
- """ Dependency resolver. The only argument points to a dictionary,
- keys of which point to nodes to be resolved and appropriate values point
- to lists of dependency nodes. """
- def resnode(node, resolved, path):
- """ Auxiliary function, that goes into tree of deps, finds its
- leaves or resolved subtrees and adds them to 'resolved'. """
- if node in path:
- raise CircDep(path + [node])
- if node not in deps:
- resolved.append(node)
- return None
- for item in deps[node]:
- if item in resolved: continue
- resnode(item, resolved, path + [node])
- resolved.append(node)
- return None
- res = []
- for node in deps.keys():
- if node not in res: resnode(node, res, [])
- return res
Add Comment
Please, Sign In to add comment