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)
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)