""" Scheduler for action to make """ from logging import exception class Scheduler: def __init__(self, actions: list): self.actions = actions self._tasks = [] self._done = [] @property def tasks(self): return self._tasks @property def done(self): return self._done def append(self, tasks): self._tasks += tasks def dispatch(self, task): """Do a task""" ans = self.actions[task.action](task.deps, task.args) return ans def __iter__(self): return self def __next__(self): return self.next() def next(self): undoable = [] try: task = self._tasks.pop(0) except IndexError: raise StopIteration while not all([d in self.done for d in task.deps]): undoable.append(task) try: task = self._tasks.pop(0) except IndexError: self.append(undoable) raise StopIteration self.append(undoable) ans = self.dispatch(task) self._done.append(ans) return ans def run(self): for i in self: pass