Skip to content
This repository has been archived by the owner on Feb 21, 2023. It is now read-only.

Commit

Permalink
Merge pull request #347 from aio-libs/uvloop_fixes
Browse files Browse the repository at this point in the history
few fixes related to uvloop
  • Loading branch information
popravich authored Dec 5, 2017
2 parents 422605e + b612b86 commit 5f44b2a
Show file tree
Hide file tree
Showing 4 changed files with 15 additions and 13 deletions.
11 changes: 9 additions & 2 deletions aioredis/stream.py
Original file line number Diff line number Diff line change
Expand Up @@ -44,17 +44,23 @@ class StreamReader(asyncio.StreamReader):
get rid of one coroutine step. Data flows from the buffer
to the Redis parser directly.
"""
_parser = None

def set_parser(self, parser):
# XXX: we'll get AttributeError unless set_parser is called
self._parser = parser
if self._buffer:
self._parser.feed(self._buffer)
del self._buffer[:]

def feed_data(self, data):
assert not self._eof, 'feed_data after feed_eof'

if not data:
return

if self._parser is None:
# XXX: hopefully it's only a small error message
self._buffer.extend(data)
return
self._parser.feed(data)
self._wakeup_waiter()

Expand All @@ -67,6 +73,7 @@ async def readobj(self):
Return a parsed Redis object or an exception
when something wrong happened.
"""
assert self._parser is not None, "set_parser must be called"
while True:
obj = self._parser.gets()

Expand Down
6 changes: 0 additions & 6 deletions tests/conftest.py
Original file line number Diff line number Diff line change
Expand Up @@ -557,12 +557,6 @@ def pytest_runtest_setup(item):
item.fixturenames.append('loop')


def pytest_ignore_collect(path, config):
if 'py35' in str(path):
if sys.version_info < (3, 5, 0):
return True


def pytest_collection_modifyitems(session, config, items):
for item in items:
if 'redis_version' in item.keywords:
Expand Down
5 changes: 3 additions & 2 deletions tests/connection_test.py
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@
RedisError,
ReplyError,
Channel,
MaxClientsError
MaxClientsError,
)


Expand Down Expand Up @@ -113,7 +113,8 @@ async def test_connect_maxclients(create_connection, loop, start_server):
server.tcp_address, loop=loop)
await conn.execute(b'CONFIG', b'SET', 'maxclients', 1)

with pytest.raises((MaxClientsError, ConnectionError)):
errors = (MaxClientsError, ConnectionClosedError, ConnectionError)
with pytest.raises(errors):
conn2 = await create_connection(
server.tcp_address, loop=loop)
await conn2.execute('ping')
Expand Down
6 changes: 3 additions & 3 deletions tests/pool_test.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@
PoolClosedError,
ConnectionClosedError,
ConnectionsPool,
MaxClientsError
MaxClientsError,
)


Expand Down Expand Up @@ -459,15 +459,15 @@ async def test_pool_close__used(create_pool, server, loop):

@pytest.mark.run_loop
@pytest.redis_version(2, 8, 0, reason="maxclients config setting")
@pytest.mark.xfail(reason="Redis returns 'Err max clients reached'")
async def test_pool_check_closed_when_exception(
create_pool, create_redis, start_server, loop):
server = start_server('server-small')
redis = await create_redis(server.tcp_address, loop=loop)
await redis.config_set('maxclients', 2)

errors = (MaxClientsError, ConnectionClosedError, ConnectionError)
with pytest.logs('aioredis', 'DEBUG') as cm:
with pytest.raises((MaxClientsError, ConnectionError)):
with pytest.raises(errors):
await create_pool(address=tuple(server.tcp_address),
minsize=3, loop=loop)

Expand Down

0 comments on commit 5f44b2a

Please sign in to comment.