"""Utilities for interacting with aiohttp.""" from typing import Self from aiohttp import StreamReader class ChunkAsyncStreamIterator: """Async iterator for chunked streams. Based on aiohttp.streams.ChunkTupleAsyncStreamIterator, but yields bytes instead of tuple[bytes, bool]. Borrowed from home-assistant/core. """ __slots__ = ("_stream",) def __init__(self, stream: StreamReader) -> None: """Initialize.""" self._stream = stream def __aiter__(self) -> Self: """Iterate.""" return self async def __anext__(self) -> bytes: """Yield next chunk.""" rv = await self._stream.readchunk() if rv == (b"", False): raise StopAsyncIteration return rv[0]