]> git.ipfire.org Git - thirdparty/sqlalchemy/sqlalchemy.git/commitdiff
Add async_engine_from_config() 7302/head
authorNils Philippsen <nils@tiptoe.de>
Mon, 8 Nov 2021 22:45:26 +0000 (23:45 +0100)
committerNils Philippsen <nils@tiptoe.de>
Sat, 13 Nov 2021 03:02:18 +0000 (04:02 +0100)
This is largely lifted from engine_from_config().

Fixes: #7301
Signed-off-by: Nils Philippsen <nils@tiptoe.de>
lib/sqlalchemy/ext/asyncio/__init__.py
lib/sqlalchemy/ext/asyncio/engine.py
test/ext/asyncio/test_engine_py3k.py

index ac3b905c6159c2e5039f67daf3448b97442310ab..031039713758149f5d9bd11b76889dafd2fd4e75 100644 (file)
@@ -5,6 +5,7 @@
 # This module is part of SQLAlchemy and is released under
 # the MIT License: https://www.opensource.org/licenses/mit-license.php
 
+from .engine import async_engine_from_config
 from .engine import AsyncConnection
 from .engine import AsyncEngine
 from .engine import AsyncTransaction
index 221d82f088acae17e1a197ba499bb2a6d52c8278..e47045cba947e97178d01496aba174c6fcd79a75 100644 (file)
@@ -41,6 +41,29 @@ def create_async_engine(*arg, **kw):
     return AsyncEngine(sync_engine)
 
 
+def async_engine_from_config(configuration, prefix="sqlalchemy.", **kwargs):
+    """Create a new AsyncEngine instance using a configuration dictionary.
+
+    This works analogous to :func:`_sa.engine_from_config`, but the
+    configured dialect must be an asyncio-compatible dialect such as
+    :ref:`dialect-postgresql-asyncpg`. Arguments
+    passed to :func:`_asyncio.async_engine_from_config` are mostly
+    identical to :func:`_sa.engine_from_config`.
+
+    .. versionadded:: 1.4.28
+
+    """
+    options = {
+        key[len(prefix) :]: value
+        for key, value in configuration.items()
+        if key.startswith(prefix)
+    }
+    options["_coerce_config"] = True
+    options.update(kwargs)
+    url = options.pop("url")
+    return create_async_engine(url, **options)
+
+
 class AsyncConnectable:
     __slots__ = "_slots_dispatch", "__weakref__"
 
index 44cf9388ca08b0c0ba8b164405763d6c9924bc46..25fbb316829d16c893ba0d472ba3dfe662e50d21 100644 (file)
@@ -14,6 +14,7 @@ from sqlalchemy import Table
 from sqlalchemy import testing
 from sqlalchemy import text
 from sqlalchemy import union_all
+from sqlalchemy.ext.asyncio import async_engine_from_config
 from sqlalchemy.ext.asyncio import create_async_engine
 from sqlalchemy.ext.asyncio import engine as _async_engine
 from sqlalchemy.ext.asyncio import exc as asyncio_exc
@@ -590,6 +591,16 @@ class AsyncEngineTest(EngineFixture):
             server_side_cursors=True,
         )
 
+    def test_async_engine_from_config(self):
+        config = {
+            "sqlalchemy.url": str(testing.db.url),
+            "sqlalchemy.echo": "true",
+        }
+        engine = async_engine_from_config(config)
+        assert engine.url == testing.db.url
+        assert engine.echo is True
+        assert engine.dialect.is_async is True
+
 
 class AsyncEventTest(EngineFixture):
     """The engine events all run in their normal synchronous context.