def exit(self, result=None): self._cleanup() if not self._is_root: # If not a root section just return the result as-is return result # We are a root sections if IFiber.providedBy(result): # If the result is a fiber, we initialize and start it fiber = IFiber(result) self.descriptor.attach(fiber) return fiber.start() if isinstance(result, defer.Deferred): return result elif isinstance(result, failure.Failure): return defer.fail(result) else: return defer.succeed(result)