def remove_path_on_error(path): """Protect code that wants to operate on PATH atomically. Any exception will cause PATH to be removed. :param path: File to work with """ try: yield except Exception: with excutils.save_and_reraise_exception(): delete_if_exists(path)
def __call__(self): """Return a co-routine which runs the task group.""" runners = [TaskRunner(t) for t in self._tasks] try: for r in runners: r.start() while runners: yield runners = list(itertools.dropwhile(lambda r: r.step(), runners)) except: with excutils.save_and_reraise_exception(): for r in runners: r.cancel()
def __call__(self): """Return a co-routine which runs the task group.""" try: while any(self._runners.itervalues()): for k, r in self._ready(): r.start() yield for k, r in self._running(): if r.step(): del self._graph[k] except: with excutils.save_and_reraise_exception(): for r in self._runners.itervalues(): r.cancel()