blob: 581f5ea662c1984ad15781a75fc73b36b75d4c4c [file] [log] [blame]
# Copyright 2018 Gentoo Foundation
# Distributed under the terms of the GNU General Public License v2
import os
import signal
from _emerge.AsynchronousTask import AsynchronousTask
class AsyncTaskFuture(AsynchronousTask):
"""
Wraps a Future in an AsynchronousTask, which is useful for
scheduling with TaskScheduler.
"""
__slots__ = ('future',)
def _start(self):
self.future.add_done_callback(self._done_callback)
def _cancel(self):
if not self.future.done():
self.future.cancel()
def _done_callback(self, future):
if future.cancelled():
self.cancelled = True
self.returncode = -signal.SIGINT
elif future.exception() is None:
self.returncode = os.EX_OK
else:
self.returncode = 1
self._async_wait()