| 84 | |
| 85 | |
| 86 | class AwaitableOrContextManagerWrapper(Generic[SupportsAsyncCloseType]): |
| 87 | __slots__ = ("aw", "entered") |
| 88 | |
| 89 | def __init__(self, aw: Awaitable[SupportsAsyncCloseType]) -> None: |
| 90 | self.aw = aw |
| 91 | |
| 92 | def __await__(self) -> Generator[Any, None, SupportsAsyncCloseType]: |
| 93 | return self.aw.__await__() |
| 94 | |
| 95 | async def __aenter__(self) -> SupportsAsyncCloseType: |
| 96 | self.entered = await self.aw |
| 97 | return self.entered |
| 98 | |
| 99 | async def __aexit__(self, *args: Any) -> None | bool: |
| 100 | await self.entered.close() |
| 101 | return None |
| 102 | |
| 103 | |
| 104 | @asynccontextmanager |