diff --git a/aiogremlin/__init__.py b/aiogremlin/__init__.py index 123064e230d20d2bac48a14b064cac0ef6d0c1cc..890bba0dccd26af8920cddebb27459209884b0a2 100644 --- a/aiogremlin/__init__.py +++ b/aiogremlin/__init__.py @@ -3,4 +3,4 @@ from .connection import (WebsocketPool, AiohttpFactory, BaseFactory, BaseConnection) from .client import GremlinClient, create_client from .exceptions import RequestError, GremlinServerError, SocketClientError -__version__ = "0.0.3" +__version__ = "0.0.3dev" diff --git a/aiogremlin/client.py b/aiogremlin/client.py index fa5f03b072e7b524ca6fe2d13fce161dbd1f9530..1ff129a0d0b120cdf63085f599dda7dedd46f4eb 100644 --- a/aiogremlin/client.py +++ b/aiogremlin/client.py @@ -155,18 +155,20 @@ class GremlinResponseStream: @asyncio.coroutine def _read(self): + # This will find the eof set at 200 response + if self._queue.at_eof(): + self._conn.feed_pool() + return message = asyncio.async(self._queue.read(), loop=self._loop) done, pending = yield from asyncio.wait( [message, asyncio.async(self._conn._receive(), loop=self._loop)], loop=self._loop, return_when=asyncio.FIRST_COMPLETED) if message in done: + # Temporary try: return message.result() - except aiohttp.streams.EofStream: + except aiohttp.EofStream: self._conn.feed_pool() - except Exception: - self._conn.feed_pool() - raise else: message.cancel() diff --git a/aiogremlin/connection.py b/aiogremlin/connection.py index aa62588a06dcea98dd84db9d8ad763aaef67ebd1..7652d14ac72248d7044ba8c55181931afc2362a9 100644 --- a/aiogremlin/connection.py +++ b/aiogremlin/connection.py @@ -230,9 +230,17 @@ class AiohttpConnection(BaseConnection): yield from self.release() raise if message.tp == aiohttp.MsgType.binary: - self.parser.feed_data(message.data.decode()) + try: + self.parser.feed_data(message.data.decode()) + except Exception: + self.release() + raise elif message.tp == aiohttp.MsgType.text: - self.parser.feed_data(message.data.strip()) + try: + self.parser.feed_data(message.data.strip()) + except Exception: + self.release() + raise else: try: if message.tp == aiohttp.MsgType.close: diff --git a/aiogremlin/protocol.py b/aiogremlin/protocol.py index 621a37f0b5d6968a2704efb40c9fa8bd198df9e7..6f40cba272eeb1b13103571167f66c4e1852a4e3 100644 --- a/aiogremlin/protocol.py +++ b/aiogremlin/protocol.py @@ -23,15 +23,13 @@ def gremlin_response_parser(out, buf): if message.status_code == 200: out.feed_data(message) elif message.status_code == 299: + out.feed_data(message) out.feed_eof() else: - try: - if message.status_code < 500: - raise RequestError(message.status_code, message.message) - else: - raise GremlinServerError(message.status_code, message.message) - finally: - yield from connection.release() + if message.status_code < 500: + raise RequestError(message.status_code, message.message) + else: + raise GremlinServerError(message.status_code, message.message) class GremlinWriter: diff --git a/profile.py b/profiler.py similarity index 100% rename from profile.py rename to profiler.py