コード例 #1
0
ファイル: latent.py プロジェクト: vicosx12/buildbot
class LatentController(object):
    """
    A controller for ``ControllableLatentWorker``.

    https://glyph.twistedmatrix.com/2015/05/separate-your-fakes-and-your-inspectors.html
    """
    def __init__(self, name, **kwargs):
        self.worker = ControllableLatentWorker(name, self, **kwargs)
        self.started = False
        self.stopped = False

    def start_instance(self, result):
        assert self.started
        self.started = False
        d, self._start_deferred = self._start_deferred, None
        d.callback(result)

    def stop_instance(self, result):
        assert self.stopped
        self.stoped = False
        d, self._stop_deferred = self._stop_deferred, None
        d.callback(result)

    def connect_worker(self, workdir):
        if RemoteWorker is None:
            raise SkipTest("buildbot-worker package is not installed")
        self.remote_worker = RemoteWorker(self.worker.name, workdir.path,
                                          False)
        self.remote_worker.setServiceParent(self.worker)

    def disconnect_worker(self, workdir):
        return self.remote_worker.disownServiceParent()
コード例 #2
0
ファイル: latent.py プロジェクト: Apogeya/buildbot
class LatentController(object):
    """
    A controller for ``ControllableLatentWorker``.

    https://glyph.twistedmatrix.com/2015/05/separate-your-fakes-and-your-inspectors.html
    """

    def __init__(self, name, **kwargs):
        self.worker = ControllableLatentWorker(name, self, **kwargs)
        self.started = False
        self.stopped = False

    def start_instance(self, result):
        assert self.started
        self.started = False
        d, self._start_deferred = self._start_deferred, None
        d.callback(result)

    def stop_instance(self, result):
        assert self.stopped
        self.stoped = False
        d, self._stop_deferred = self._stop_deferred, None
        d.callback(result)

    def connect_worker(self, workdir):
        if RemoteWorker is None:
            raise SkipTest("buildbot-worker package is not installed")
        self.remote_worker = RemoteWorker(self.worker.name, workdir.path, False)
        self.remote_worker.setServiceParent(self.worker)

    def disconnect_worker(self, workdir):
        return self.remote_worker.disownServiceParent()
コード例 #3
0
 def connect_worker(self, case):
     if RemoteWorker is None:
         raise SkipTest("buildbot-worker package is not installed")
     workdir = FilePath(case.mktemp())
     workdir.createDirectory()
     self.remote_worker = RemoteWorker(self.worker.name, workdir.path, False)
     self.remote_worker.setServiceParent(self.worker)
コード例 #4
0
 def connect_worker(self, case):
     if RemoteWorker is None:
         raise SkipTest("buildbot-worker package is not installed")
     workdir = FilePath(case.mktemp())
     workdir.createDirectory()
     self.remote_worker = RemoteWorker(self.worker.name, workdir.path, False)
     self.remote_worker.setServiceParent(self.worker)
コード例 #5
0
class LatentController(object):

    """
    A controller for ``ControllableLatentWorker``.

    https://glyph.twistedmatrix.com/2015/05/separate-your-fakes-and-your-inspectors.html
    """

    def __init__(self, name, **kwargs):
        self.worker = ControllableLatentWorker(name, self, **kwargs)
        self.starting = False
        self.stopping = False
        self.auto_stop_flag = False

    def start_instance(self, result):
        assert self.starting
        self.starting = False
        d, self._start_deferred = self._start_deferred, None
        d.callback(result)

    def auto_stop(self, result):
        self.auto_stop_flag = result
        if self.auto_stop_flag and self.stopping:
            self.stop_instance(True)

    def stop_instance(self, result):
        assert self.stopping
        self.stopping = False
        d, self._stop_deferred = self._stop_deferred, None
        d.callback(result)

    def connect_worker(self, case):
        if RemoteWorker is None:
            raise SkipTest("buildbot-worker package is not installed")
        workdir = FilePath(case.mktemp())
        workdir.createDirectory()
        self.remote_worker = RemoteWorker(self.worker.name, workdir.path, False)
        self.remote_worker.setServiceParent(self.worker)

    def disconnect_worker(self, workdir):
        self.worker.conn, conn = None, self.worker.conn
        # LocalWorker does actually disconnect, so we must force disconnection via detached
        conn.notifyDisconnected()
        return self.remote_worker.disownServiceParent()

    def patchBot(self, case, remoteMethod, patch):
        case.patch(BotBase, remoteMethod, patch)
コード例 #6
0
ファイル: worker.py プロジェクト: buildbot/buildbot
class WorkerController(SeverWorkerConnectionMixin):

    """
    A controller for a ``Worker``.

    https://glyph.twistedmatrix.com/2015/05/separate-your-fakes-and-your-inspectors.html
    """

    def __init__(self, case, name, build_wait_timeout=600,
                 worker_class=None, **kwargs):
        if worker_class is None:
            worker_class = Worker

        self.case = case
        self.build_wait_timeout = build_wait_timeout
        self.worker = worker_class(name, self, **kwargs)
        self.remote_worker = None

    def connect_worker(self):
        if self.remote_worker is not None:
            return
        if RemoteWorker is None:
            raise SkipTest("buildbot-worker package is not installed")
        workdir = FilePath(self.case.mktemp())
        workdir.createDirectory()
        self.remote_worker = RemoteWorker(self.worker.name, workdir.path, False)
        self.remote_worker.setServiceParent(self.worker)

    def disconnect_worker(self):
        super().disconnect_worker()
        if self.remote_worker is None:
            return
        self.worker.conn, conn = None, self.worker.conn
        # LocalWorker does actually disconnect, so we must force disconnection
        # via detached
        conn.notifyDisconnected()
        ret = self.remote_worker.disownServiceParent()
        self.remote_worker = None
        return ret
コード例 #7
0
ファイル: latent.py プロジェクト: buildbot/buildbot
class LatentController(SeverWorkerConnectionMixin):

    """
    A controller for ``ControllableLatentWorker``.

    https://glyph.twistedmatrix.com/2015/05/separate-your-fakes-and-your-inspectors.html

    Note that by default workers will connect automatically if True is passed
    to start_instance().

    Also by default workers will disconnect automatically just as
    stop_instance() is executed.
    """

    def __init__(self, case, name, kind=None, build_wait_timeout=600, **kwargs):
        self.case = case
        self.build_wait_timeout = build_wait_timeout
        self.worker = ControllableLatentWorker(name, self, **kwargs)
        self.remote_worker = None

        self.state = States.STOPPED
        self.auto_stop_flag = False
        self.auto_start_flag = False
        self.auto_connect_worker = True
        self.auto_disconnect_worker = True

        self.kind = kind
        self._started_kind = None
        self._started_kind_deferred = None

    @property
    def starting(self):
        return self.state == States.STARTING

    @property
    def started(self):
        return self.state == States.STARTED

    @property
    def stopping(self):
        return self.state == States.STOPPING

    @property
    def stopped(self):
        return self.state == States.STOPPED

    def auto_start(self, result):
        self.auto_start_flag = result
        if self.auto_start_flag and self.state == States.STARTING:
            self.start_instance(True)

    def start_instance(self, result):
        self.do_start_instance(result)
        d, self._start_deferred = self._start_deferred, None
        d.callback(result)

    def do_start_instance(self, result):
        assert self.state == States.STARTING
        self.state = States.STARTED
        if self.auto_connect_worker and result is True:
            self.connect_worker()

    @defer.inlineCallbacks
    def auto_stop(self, result):
        self.auto_stop_flag = result
        if self.auto_stop_flag and self.state == States.STOPPING:
            yield self.stop_instance(True)

    @defer.inlineCallbacks
    def stop_instance(self, result):
        yield self.do_stop_instance()
        d, self._stop_deferred = self._stop_deferred, None
        d.callback(result)

    @defer.inlineCallbacks
    def do_stop_instance(self):
        assert self.state == States.STOPPING
        self.state = States.STOPPED
        self._started_kind = None
        if self.auto_disconnect_worker:
            yield self.disconnect_worker()

    def connect_worker(self):
        if self.remote_worker is not None:
            return
        if RemoteWorker is None:
            raise SkipTest("buildbot-worker package is not installed")
        workdir = FilePath(self.case.mktemp())
        workdir.createDirectory()
        self.remote_worker = RemoteWorker(self.worker.name, workdir.path, False)
        self.remote_worker.setServiceParent(self.worker)

    def disconnect_worker(self):
        super().disconnect_worker()
        if self.remote_worker is None:
            return
        self.worker.conn, conn = None, self.worker.conn
        self.remote_worker, worker = None, self.remote_worker

        # LocalWorker does actually disconnect, so we must force disconnection
        # via detached. Note that the worker may have already detached
        if conn is not None:
            conn.loseConnection()
        return worker.disownServiceParent()

    def setup_kind(self, build):
        if build:
            self._started_kind_deferred = build.render(self.kind)
        else:
            self._started_kind_deferred = self.kind

    @defer.inlineCallbacks
    def get_started_kind(self):
        if self._started_kind_deferred:
            self._started_kind = yield self._started_kind_deferred
            self._started_kind_deferred = None
        return self._started_kind

    def patchBot(self, case, remoteMethod, patch):
        case.patch(BotBase, remoteMethod, patch)
コード例 #8
0
ファイル: latent.py プロジェクト: vicosx12/buildbot
 def connect_worker(self, workdir):
     if RemoteWorker is None:
         raise SkipTest("buildbot-worker package is not installed")
     self.remote_worker = RemoteWorker(self.worker.name, workdir.path,
                                       False)
     self.remote_worker.setServiceParent(self.worker)
コード例 #9
0
ファイル: latent.py プロジェクト: Apogeya/buildbot
 def connect_worker(self, workdir):
     if RemoteWorker is None:
         raise SkipTest("buildbot-worker package is not installed")
     self.remote_worker = RemoteWorker(self.worker.name, workdir.path, False)
     self.remote_worker.setServiceParent(self.worker)
コード例 #10
0
ファイル: latent.py プロジェクト: stuarta/buildbot
class LatentController(object):

    """
    A controller for ``ControllableLatentWorker``.

    https://glyph.twistedmatrix.com/2015/05/separate-your-fakes-and-your-inspectors.html
    """

    def __init__(self, case, name, kind=None, build_wait_timeout=600, **kwargs):
        self.case = case
        self.build_wait_timeout = build_wait_timeout
        self.worker = ControllableLatentWorker(name, self, **kwargs)
        self.remote_worker = None

        self.starting = False
        self.started = False
        self.stopping = False
        self.auto_stop_flag = False
        self.auto_start_flag = False
        self.auto_connect_worker = False

        self.kind = kind
        self._started_kind = None
        self._started_kind_deferred = None

    def auto_start(self, result):
        self.auto_start_flag = result
        if self.auto_start_flag and self.starting:
            self.start_instance(True)

    def start_instance(self, result):
        self.do_start_instance()
        d, self._start_deferred = self._start_deferred, None
        d.callback(result)

    def do_start_instance(self):
        assert self.starting
        assert not self.started or not self.remote_worker
        self.starting = False
        self.started = True
        if self.auto_connect_worker:
            self.connect_worker()

    def auto_stop(self, result):
        self.auto_stop_flag = result
        if self.auto_stop_flag and self.stopping:
            self.stop_instance(True)

    def stop_instance(self, result):
        self.do_stop_instance()
        d, self._stop_deferred = self._stop_deferred, None
        d.callback(result)

    def do_stop_instance(self):
        assert self.stopping
        self.stopping = False
        self._started_kind = None
        self.disconnect_worker()

    def connect_worker(self):
        if self.remote_worker is not None:
            return
        if RemoteWorker is None:
            raise SkipTest("buildbot-worker package is not installed")
        workdir = FilePath(self.case.mktemp())
        workdir.createDirectory()
        self.remote_worker = RemoteWorker(self.worker.name, workdir.path, False)
        self.remote_worker.setServiceParent(self.worker)

    def disconnect_worker(self):
        if self.remote_worker is None:
            return
        self.worker.conn, conn = None, self.worker.conn
        # LocalWorker does actually disconnect, so we must force disconnection via detached
        conn.notifyDisconnected()
        ret = self.remote_worker.disownServiceParent()
        self.remote_worker = None
        return ret

    def setup_kind(self, build):
        self._started_kind_deferred = build.render(self.kind)

    @defer.inlineCallbacks
    def get_started_kind(self):
        if self._started_kind_deferred:
            self._started_kind = yield self._started_kind_deferred
            self._started_kind_deferred = None
        defer.returnValue(self._started_kind)

    def patchBot(self, case, remoteMethod, patch):
        case.patch(BotBase, remoteMethod, patch)
コード例 #11
0
 def connect_worker(self, workdir):
     LocalWorker(self.worker.name, workdir.path,
                 False).setServiceParent(self.worker)