Skip to content

Instantly share code, notes, and snippets.

@SimplyAhmazing
Last active August 29, 2015 14:10
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save SimplyAhmazing/3eb2089ff1c04e58e789 to your computer and use it in GitHub Desktop.
Save SimplyAhmazing/3eb2089ff1c04e58e789 to your computer and use it in GitHub Desktop.
Solution for Code Kata # 18
import collections
from pprint import pformat
{
'A': ['B', 'C'],
'B': ['C', 'E'],
}
class Dependencies(object):
tree = collections.defaultdict(set)
def add_direct(self, node, dependencies):
self.tree[node].update(dependencies)
def dependencies_for(self, node, found_deps=None, root_node=None):
# import pdb; pdb.set_trace()
if not found_deps:
root_node = node
found_deps = set()
for i in self.tree[node]:
if i == root_node:
raise Exception('Circular dependency')
else:
found_deps.update(i)
self.dependencies_for(i, found_deps, root_node)
return found_deps
def __repr__(self):
return pformat(self.tree)
def __str__(self):
return pformat(self.tree)
dep = Dependencies()
print('Tree after init', dep)
dep.add_direct('A', ['B', 'C'])
print('Tree after 1st insert:', dep)
dep.add_direct('B', ['C', 'E'])
print('Tree after 2nd insert:', dep)
print("A's dependencies: ", dep.dependencies_for('A'))
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment