| 62 | V = TypeVar('V') |
| 63 | |
| 64 | def run_generator(gen: Generator[T, V, U], |
| 65 | inputs: Optional[List[V]] = None, |
| 66 | p: bool = False) -> Tuple[Sequence[T], Union[U, str]]: |
| 67 | res: List[T] = [] |
| 68 | i = -1 |
| 69 | while True: |
| 70 | try: |
| 71 | if i >= 0 and inputs: |
| 72 | # ... fixtures don't have send |
| 73 | val = gen.send(inputs[i]) # type: ignore |
| 74 | elif not hasattr(gen, '__next__'): # type: ignore |
| 75 | val = gen.send(None) # type: ignore |
| 76 | else: |
| 77 | val = next(gen) |
| 78 | except StopIteration as e: |
| 79 | return (tuple(res), e.value) |
| 80 | except Exception as e: |
| 81 | return (tuple(res), str(e)) |
| 82 | if p: |
| 83 | print(val) |
| 84 | res.append(val) |
| 85 | i += 1 |
| 86 | |
| 87 | F = TypeVar('F', bound=Callable) |
| 88 | |