From f28f6c96f5facc8981bc2101985c31f55d0c562d Mon Sep 17 00:00:00 2001 From: Philip J Freeman Date: Tue, 1 Aug 2017 06:44:54 -0700 Subject: [PATCH] fixes Python3.5 "yield in async function" errors --- secret_handshake/boxstream.py | 14 ++++++++------ secret_handshake/network.py | 12 +++++++++--- 2 files changed, 17 insertions(+), 9 deletions(-) diff --git a/secret_handshake/boxstream.py b/secret_handshake/boxstream.py index 9df3891..e10f976 100644 --- a/secret_handshake/boxstream.py +++ b/secret_handshake/boxstream.py @@ -58,12 +58,14 @@ async def read(self): self.nonce = inc_nonce(inc_nonce(self.nonce)) return body - async def __aiter__(self): - while True: - data = await self.read() - if data is None: - return - yield data + def __aiter__(self): + return self + + async def __anext__(self): + data = await self.read() + if data is None: + raise StopAsyncIteration + return data class BoxStream(object): diff --git a/secret_handshake/network.py b/secret_handshake/network.py index 92e5f82..1ebe08f 100644 --- a/secret_handshake/network.py +++ b/secret_handshake/network.py @@ -43,9 +43,15 @@ async def read(self): def disconnect(self): self.writer.close() - async def __aiter__(self): - async for msg in self.read_stream: - yield msg + def __aiter__(self): + return self + + async def __anext__(self): + msg = self.read_stream + if msg: + return msg + else: + raise StopAsyncIteration def on_connect(self, cb): self._on_connect = cb