diff options
| -rw-r--r-- | lib/sqlalchemy/exc.py | 2 | ||||
| -rw-r--r-- | lib/sqlalchemy/ext/asyncio/engine.py | 5 | ||||
| -rw-r--r-- | test/ext/asyncio/test_engine_py3k.py | 12 |
3 files changed, 17 insertions, 2 deletions
diff --git a/lib/sqlalchemy/exc.py b/lib/sqlalchemy/exc.py index 289b8dfab..a0a86826d 100644 --- a/lib/sqlalchemy/exc.py +++ b/lib/sqlalchemy/exc.py @@ -287,7 +287,7 @@ class NoReferenceError(InvalidRequestError): class AwaitRequired(InvalidRequestError): """Error raised by the async greenlet spawn if no async operation - was awaited when it required one + was awaited when it required one. """ diff --git a/lib/sqlalchemy/ext/asyncio/engine.py b/lib/sqlalchemy/ext/asyncio/engine.py index aa7e60dfb..db95ab371 100644 --- a/lib/sqlalchemy/ext/asyncio/engine.py +++ b/lib/sqlalchemy/ext/asyncio/engine.py @@ -527,6 +527,11 @@ class AsyncEngine(ProxyComparable, AsyncConnectable): await self.conn.close() def __init__(self, sync_engine: Engine): + if not sync_engine.dialect.is_async: + raise exc.InvalidRequestError( + "The asyncio extension requires an async driver to be used. " + f"The loaded {sync_engine.dialect.driver!r} is not async." + ) self.sync_engine = self._proxied = sync_engine def begin(self): diff --git a/test/ext/asyncio/test_engine_py3k.py b/test/ext/asyncio/test_engine_py3k.py index 72d866882..512f0447f 100644 --- a/test/ext/asyncio/test_engine_py3k.py +++ b/test/ext/asyncio/test_engine_py3k.py @@ -1,6 +1,7 @@ import asyncio from sqlalchemy import Column +from sqlalchemy import create_engine from sqlalchemy import delete from sqlalchemy import event from sqlalchemy import exc @@ -662,9 +663,18 @@ class AsyncResultTest(EngineFixture): class TextSyncDBAPI(fixtures.TestBase): + def test_sync_dbapi_raises(self): + with expect_raises_message( + exc.InvalidRequestError, + "The asyncio extension requires an async driver to be used.", + ): + create_async_engine("sqlite:///:memory:") + @testing.fixture def async_engine(self): - return create_async_engine("sqlite:///:memory:") + engine = create_engine("sqlite:///:memory:", future=True) + engine.dialect.is_async = True + return _async_engine.AsyncEngine(engine) @async_test @combinations( |
