def test_batch_complete_succeeded(): batch = Batch([Job.from_dict(SUCCEEDED_JOB), Job.from_dict(SUCCEEDED_JOB)]) assert batch.complete() assert batch.succeeded() batch += Job.from_dict(FAILED_JOB) assert batch.complete() assert not batch.succeeded() running = Job.from_dict(FAILED_JOB) running.status_code = 'RUNNING' batch += running assert not batch.complete() assert not batch.succeeded()
def _watch_batch(self, batch: Batch, timeout: int = 10800, interval: Union[int, float] = 60) -> Batch: tqdm = get_tqdm_progress_bar() iterations_until_timeout = math.ceil(timeout / interval) bar_format = '{l_bar}{bar}| {n_fmt}/{total_fmt} [{postfix[0]}]' with tqdm(total=len(batch), bar_format=bar_format, postfix=[f'timeout in {timeout} s']) as progress_bar: for ii in range(iterations_until_timeout): batch = self.refresh(batch) counts = batch._count_statuses() complete = counts['SUCCEEDED'] + counts['FAILED'] progress_bar.postfix = [ f'timeout in {timeout - ii * interval}s' ] # to control n/total manually; update is n += value progress_bar.n = complete progress_bar.update(0) if batch.complete(): return batch time.sleep(interval) raise HyP3Error(f'Timeout occurred while waiting for {batch}')