Guest User

Untitled

a guest
May 25th, 2018
91
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.06 KB | None | 0 0
  1. class CircDep(Exception):
  2. """CircDep is raised when dependency resolver encounters circular dependency.
  3. The only useful member 'path' gives full dependency circle."""
  4. path = []
  5. def __init__(self, a):
  6. self.path = a
  7.  
  8. def ResolveDeps(deps):
  9. """ Dependency resolver. The only argument points to a dictionary,
  10. keys of which point to nodes to be resolved and appropriate values point
  11. to lists of dependency nodes. """
  12. def resnode(node, resolved, path):
  13. """ Auxiliary function, that goes into tree of deps, finds its
  14. leaves or resolved subtrees and adds them to 'resolved'. """
  15. if node in path:
  16. raise CircDep(path + [node])
  17. if node not in deps:
  18. resolved.append(node)
  19. return None
  20. for item in deps[node]:
  21. if item in resolved: continue
  22. resnode(item, resolved, path + [node])
  23. resolved.append(node)
  24. return None
  25. res = []
  26. for node in deps.keys():
  27. if node not in res: resnode(node, res, [])
  28. return res
Add Comment
Please, Sign In to add comment