diff options
author | Chris Schlaeger <chris@linux.com> | 2014-08-12 21:56:44 +0200 |
---|---|---|
committer | Chris Schlaeger <chris@linux.com> | 2014-08-12 21:56:44 +0200 |
commit | ea346a785dc1b3f7c156f6fc33da634e1f1a627b (patch) | |
tree | af67530553d20b6e82ad60fd79593e9c4abf5565 /misc/openlayers/tools/toposort.py | |
parent | 59741cd535c47f25971bf8c32b25da25ceadc6d5 (diff) | |
download | postrunner-fb1989bda5d3e0a5472ba7644d57cae197733a8f.zip |
Adding jquery, flot and openlayers to be included with the GEM.v0.0.4
Diffstat (limited to 'misc/openlayers/tools/toposort.py')
-rw-r--r-- | misc/openlayers/tools/toposort.py | 35 |
1 files changed, 35 insertions, 0 deletions
diff --git a/misc/openlayers/tools/toposort.py b/misc/openlayers/tools/toposort.py new file mode 100644 index 0000000..ba586ef --- /dev/null +++ b/misc/openlayers/tools/toposort.py @@ -0,0 +1,35 @@ +""" +toposort.py +Sorts dictionary keys based on lists of dependencies. +""" + +class MissingDependency(Exception): + """Exception raised when a listed dependency is not in the dictionary.""" + +class Sorter(object): + def __init__(self, dependencies): + self.dependencies = dependencies + self.visited = set() + self.sorted = () + + def sort(self): + for key in self.dependencies: + self._visit(key) + return self.sorted + + def _visit(self, key): + if key not in self.visited: + self.visited.add(key) + if not self.dependencies.has_key(key): + raise MissingDependency(key) + for depends in self.dependencies[key]: + self._visit(depends) + self.sorted += (key,) + +def toposort(dependencies): + """Returns a tuple of the dependencies dictionary keys sorted by entries + in the dependency lists. Given circular dependencies, sort will impose + an order. Raises MissingDependency if a key is not found. + """ + s = Sorter(dependencies) + return s.sort() |