예제 #1
0
파일: utils.py 프로젝트: tkuennen/grr
def Poll(generator=None, condition=None, interval=None, timeout=None):
    """Periodically calls generator function until a condition is satisfied."""

    if not generator:
        raise ValueError("generator has to be a lambda")

    if not condition:
        raise ValueError("condition has to be a lambda")

    if interval is None:
        interval = DEFAULT_POLL_INTERVAL

    if timeout is None:
        timeout = DEFAULT_POLL_TIMEOUT

    started = time.time()
    while True:
        obj = generator()
        check_result = condition(obj)
        if check_result:
            return obj

        if timeout and (time.time() - started) > timeout:
            raise errors.PollTimeoutError(
                "Polling on %s timed out after %ds." % (obj, timeout))
        time.sleep(interval)
예제 #2
0
파일: utils.py 프로젝트: swipswaps/grr
def Poll(
    generator: Callable[[], _T],
    condition: Callable[[_T], bool],
    interval: int = DEFAULT_POLL_INTERVAL,
    timeout: int = DEFAULT_POLL_TIMEOUT,
) -> _T:
    """Periodically calls generator function until a condition is satisfied."""
    started = time.time()
    while True:
        obj = generator()
        check_result = condition(obj)
        if check_result:
            return obj

        if timeout and (time.time() - started) > timeout:
            raise errors.PollTimeoutError(
                "Polling on %s timed out after %ds." % (obj, timeout))
        time.sleep(interval)