From cae33a79017d955c7a35bf1810c18e13fd00b4f3 Mon Sep 17 00:00:00 2001 From: Fantix King Date: Mon, 31 Aug 2020 03:41:00 -0400 Subject: [PATCH] Fix AsyncEngine connect() bug when pool is exhausted ### Description Decorating the referenced `await_fallback` with `staticmethod` would stop `AsyncAdaptedQueue.await_` from being treated as a bound method. ### Checklist This pull request is: - [x] A short code fix Fixes #5546 **Have a nice day!** Closes: #5547 Pull-request: https://github.com/sqlalchemy/sqlalchemy/pull/5547 Pull-request-sha: 6f18ee290e7d9fe24ce2a4a4ed8069b46082ca18 Change-Id: Ie335ee650f1dee0d1fce59e448217a48307b3435 --- lib/sqlalchemy/util/queue.py | 2 +- test/ext/asyncio/test_engine_py3k.py | 12 ++++++++++++ 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/lib/sqlalchemy/util/queue.py b/lib/sqlalchemy/util/queue.py index 5f71c7bd6f..58a88e4ede 100644 --- a/lib/sqlalchemy/util/queue.py +++ b/lib/sqlalchemy/util/queue.py @@ -202,7 +202,7 @@ class Queue: class AsyncAdaptedQueue: - await_ = await_fallback + await_ = staticmethod(await_fallback) def __init__(self, maxsize=0, use_lifo=False): if use_lifo: diff --git a/test/ext/asyncio/test_engine_py3k.py b/test/ext/asyncio/test_engine_py3k.py index ec513cb649..705df465b4 100644 --- a/test/ext/asyncio/test_engine_py3k.py +++ b/test/ext/asyncio/test_engine_py3k.py @@ -1,3 +1,5 @@ +import asyncio + from sqlalchemy import Column from sqlalchemy import delete from sqlalchemy import exc @@ -135,6 +137,16 @@ class AsyncEngineTest(EngineFixture): trans.rollback(), ) + @async_test + async def test_pool_exhausted(self, async_engine): + engine = create_async_engine( + testing.db.url, pool_size=1, max_overflow=0, pool_timeout=0.1, + ) + async with engine.connect(): + await assert_raises_message_async( + asyncio.TimeoutError, "", engine.connect(), + ) + class AsyncResultTest(EngineFixture): @testing.combinations( -- 2.47.3