예제 #1
0
def _handle_func_status(status, msg=None):
    if status == native_bt.__BT_FUNC_STATUS_OK:
        # no error
        return

    if status == native_bt.__BT_FUNC_STATUS_ERROR:
        assert msg is not None
        raise bt2._Error(msg)
    elif status == native_bt.__BT_FUNC_STATUS_MEMORY_ERROR:
        assert msg is not None
        raise bt2._MemoryError(msg)
    elif status == native_bt.__BT_FUNC_STATUS_END:
        if msg is None:
            raise bt2.Stop
        else:
            raise bt2.Stop(msg)
    elif status == native_bt.__BT_FUNC_STATUS_AGAIN:
        if msg is None:
            raise bt2.TryAgain
        else:
            raise bt2.TryAgain(msg)
    elif status == native_bt.__BT_FUNC_STATUS_OVERFLOW_ERROR:
        if msg is None:
            raise bt2._OverflowError
        else:
            raise bt2._OverflowError(msg)
    elif status == native_bt.__BT_FUNC_STATUS_UNKNOWN_OBJECT:
        if msg is None:
            raise bt2.UnknownObject
        else:
            raise bt2.UnknownObject(msg)
    else:
        assert False
    def __next__(self):
        if self.case == "STOP":
            raise bt2.Stop()
        if self.case == "INTERRUPTED":
            os.kill(os.getpid(), signal.SIGINT)

            # Wait until the graph is in the interrupted state.
            timeout_s = 10
            for _ in range(timeout_s * 10):
                if self._is_interrupted:
                    raise bt2.TryAgain()

                time.sleep(0.1)

            raise Exception('{} was not interrupted after {} seconds'.format(
                self.__class__.__name__, timeout_s))

        elif self.case == "ERROR":
            raise TypeError("Raising type error")
        else:
            raise ValueError("Invalid parameter")