From d03663ec55d9d14694a0f6e540dec0a77a91de66 Mon Sep 17 00:00:00 2001 From: davebshow <davebshow@gmail.com> Date: Tue, 5 Jul 2016 19:57:13 -0400 Subject: [PATCH] return goblin responses 1 by 1 --- goblin/query.py | 30 ++++++++++++++++-------------- tests/test_engine.py | 4 ++-- 2 files changed, 18 insertions(+), 16 deletions(-) diff --git a/goblin/query.py b/goblin/query.py index 1b0fdc1..03c4537 100644 --- a/goblin/query.py +++ b/goblin/query.py @@ -1,4 +1,5 @@ """Query API and helpers""" +import collections import logging from goblin import mapper @@ -17,25 +18,26 @@ class AsyncQueryResponseIter: def __init__(self, async_iter, query): self._async_iter = async_iter self._query = query + self._queue = collections.deque() async def __aiter__(self): return self async def __anext__(self): - msg = await self._async_iter.fetch_data() - if msg: - results = msg.data - processed_results = [] - for result in results: - current = self._query.session.current.get(result['id'], None) - if not current: - current = self._query._element_class() - element = self._query._mapper(result, current, - current.__mapping__) - processed_results.append(element) - return processed_results - else: - raise StopAsyncIteration + if not self._queue: + msg = await self._async_iter.fetch_data() + if msg: + results = msg.data + for result in results: + current = self._query.session.current.get(result['id'], None) + if not current: + current = self._query._element_class() + element = self._query._mapper(result, current, + current.__mapping__) + self._queue.append(element) + else: + raise StopAsyncIteration + return self._queue.popleft() class Query: diff --git a/tests/test_engine.py b/tests/test_engine.py index 42f4090..597d49b 100644 --- a/tests/test_engine.py +++ b/tests/test_engine.py @@ -139,8 +139,8 @@ class TestEngine(unittest.TestCase): results = [] stream = await session.query(TestVertex).all() async for msg in stream: - results += msg - print(len(results)) + results.append(msg) + print(len(results)) self.assertEqual(len(session.current), 2) for result in results: self.assertIsInstance(result, Vertex) -- GitLab