def order(self): # Walk the objects to find the dependencies (by object ID) values = [n.value for n in self.unordered] dep_finder = DependencyFinder(values) util.walk(values, dep_finder) self.deps = self._ids_to_nodes(dep_finder.dependencies()) def has_deps(node): return self.deps[node] # Now sort baby; iterate through this list multiple times. self.ordered = [] while True: next_tranche, self.unordered = partition(has_deps, self.unordered) if not next_tranche: # Either done or recursive dependencies break self.ordered.extend(next_tranche) # Get rid of dependencies for key, list in self.deps.items(): list[:] = [i for i in list if i not in next_tranche]
def qualified_print(model, **kwargs): util.walk(model, QualifiedPrintWalker(**kwargs))
def pretty_print_model(model, **kwargs): table = util.ConsoleTable() util.walk(model, PrettyPrintWalker(table, **kwargs)) table.printOut(sys.stdout)
def find(self, root): util.walk(root, self)