def do_task(self, task): """Return the result of the task or raise a TaskFailed exception on failure.""" rtn = defer.Deferred() def _on_fail(): rtn.errback(self.TaskFailed("Task failed")) task.on_fail.append(_on_fail) task.on_complete.append(rtn.callback) taskset = Taskset([task]) taskset.handles = {} c = self._submit_task(task) taskset.connections = set([c]) def _do_cmd(*args): return self._command_handler(taskset, c, *args) with _ConnectionWrapper(c, _do_cmd): rtn = yield rtn defer.returnValue(rtn)