diff options
| author | mike bayer <mike_mp@zzzcomputing.com> | 2023-04-13 21:05:19 +0000 |
|---|---|---|
| committer | Gerrit Code Review <gerrit@bbpush.zzzcomputing.com> | 2023-04-13 21:05:19 +0000 |
| commit | 4f104c9cb54e1429947d5bbf9375c86dcd07c0c9 (patch) | |
| tree | be73f959ef908e5374069893bb0e7d9d81517e6c /lib/sqlalchemy | |
| parent | b066c45dc491716a4e34bdeb9a9726bcbc136fb5 (diff) | |
| parent | 541ada1bad609b7f2052d0b02214387e242c6cc5 (diff) | |
| download | sqlalchemy-4f104c9cb54e1429947d5bbf9375c86dcd07c0c9.tar.gz | |
Merge "Add pool creation functions" into main
Diffstat (limited to 'lib/sqlalchemy')
| -rw-r--r-- | lib/sqlalchemy/__init__.py | 1 | ||||
| -rw-r--r-- | lib/sqlalchemy/engine/__init__.py | 1 | ||||
| -rw-r--r-- | lib/sqlalchemy/engine/create.py | 70 | ||||
| -rw-r--r-- | lib/sqlalchemy/ext/asyncio/__init__.py | 1 | ||||
| -rw-r--r-- | lib/sqlalchemy/ext/asyncio/engine.py | 17 |
5 files changed, 78 insertions, 12 deletions
diff --git a/lib/sqlalchemy/__init__.py b/lib/sqlalchemy/__init__.py index 935c160cf..86c5afd8f 100644 --- a/lib/sqlalchemy/__init__.py +++ b/lib/sqlalchemy/__init__.py @@ -18,6 +18,7 @@ from .engine import Compiled as Compiled from .engine import Connection as Connection from .engine import create_engine as create_engine from .engine import create_mock_engine as create_mock_engine +from .engine import create_pool_from_url as create_pool_from_url from .engine import CreateEnginePlugin as CreateEnginePlugin from .engine import CursorResult as CursorResult from .engine import Dialect as Dialect diff --git a/lib/sqlalchemy/engine/__init__.py b/lib/sqlalchemy/engine/__init__.py index 09ff9a787..843f97025 100644 --- a/lib/sqlalchemy/engine/__init__.py +++ b/lib/sqlalchemy/engine/__init__.py @@ -24,6 +24,7 @@ from .base import RootTransaction as RootTransaction from .base import Transaction as Transaction from .base import TwoPhaseTransaction as TwoPhaseTransaction from .create import create_engine as create_engine +from .create import create_pool_from_url as create_pool_from_url from .create import engine_from_config as engine_from_config from .cursor import CursorResult as CursorResult from .cursor import ResultProxy as ResultProxy diff --git a/lib/sqlalchemy/engine/create.py b/lib/sqlalchemy/engine/create.py index c491240ea..bddf51fb6 100644 --- a/lib/sqlalchemy/engine/create.py +++ b/lib/sqlalchemy/engine/create.py @@ -29,6 +29,7 @@ from .. import util from ..pool import _AdhocProxiedConnection from ..pool import ConnectionPoolEntry from ..sql import compiler +from ..util import immutabledict if typing.TYPE_CHECKING: from .base import Engine @@ -644,18 +645,8 @@ def create_engine(url: Union[str, _url.URL], **kwargs: Any) -> Engine: # consume pool arguments from kwargs, translating a few of # the arguments - translate = { - "logging_name": "pool_logging_name", - "echo": "echo_pool", - "timeout": "pool_timeout", - "recycle": "pool_recycle", - "events": "pool_events", - "reset_on_return": "pool_reset_on_return", - "pre_ping": "pool_pre_ping", - "use_lifo": "pool_use_lifo", - } for k in util.get_cls_kwargs(poolclass): - tk = translate.get(k, k) + tk = _pool_translate_kwargs.get(k, k) if tk in kwargs: pool_args[k] = pop_kwarg(tk) @@ -811,3 +802,60 @@ def engine_from_config( options.update(kwargs) url = options.pop("url") return create_engine(url, **options) + + +@overload +def create_pool_from_url( + url: Union[str, URL], + *, + poolclass: Optional[Type[Pool]] = ..., + logging_name: str = ..., + pre_ping: bool = ..., + size: int = ..., + recycle: int = ..., + reset_on_return: Optional[_ResetStyleArgType] = ..., + timeout: float = ..., + use_lifo: bool = ..., + **kwargs: Any, +) -> Pool: + ... + + +@overload +def create_pool_from_url(url: Union[str, URL], **kwargs: Any) -> Pool: + ... + + +def create_pool_from_url(url: Union[str, URL], **kwargs: Any) -> Pool: + """Create a pool instance from the given url. + + If ``poolclass`` is not provided the pool class used + is selected using the dialect specified in the URL. + + The arguments passed to :func:`_sa.create_pool_from_url` are + identical to the pool argument passed to the :func:`_sa.create_engine` + function. + + .. versionadded:: 2.0.10 + """ + + for key in _pool_translate_kwargs: + if key in kwargs: + kwargs[_pool_translate_kwargs[key]] = kwargs.pop(key) + + engine = create_engine(url, **kwargs, _initialize=False) + return engine.pool + + +_pool_translate_kwargs = immutabledict( + { + "logging_name": "pool_logging_name", + "echo": "echo_pool", + "timeout": "pool_timeout", + "recycle": "pool_recycle", + "events": "pool_events", # deprecated + "reset_on_return": "pool_reset_on_return", + "pre_ping": "pool_pre_ping", + "use_lifo": "pool_use_lifo", + } +) diff --git a/lib/sqlalchemy/ext/asyncio/__init__.py b/lib/sqlalchemy/ext/asyncio/__init__.py index 943734928..7195e1f07 100644 --- a/lib/sqlalchemy/ext/asyncio/__init__.py +++ b/lib/sqlalchemy/ext/asyncio/__init__.py @@ -10,6 +10,7 @@ from .engine import AsyncConnection as AsyncConnection from .engine import AsyncEngine as AsyncEngine from .engine import AsyncTransaction as AsyncTransaction from .engine import create_async_engine as create_async_engine +from .engine import create_async_pool_from_url as create_async_pool_from_url from .result import AsyncMappingResult as AsyncMappingResult from .result import AsyncResult as AsyncResult from .result import AsyncScalarResult as AsyncScalarResult diff --git a/lib/sqlalchemy/ext/asyncio/engine.py b/lib/sqlalchemy/ext/asyncio/engine.py index b72824e3b..240a5a005 100644 --- a/lib/sqlalchemy/ext/asyncio/engine.py +++ b/lib/sqlalchemy/ext/asyncio/engine.py @@ -35,6 +35,7 @@ from ... import inspection from ... import util from ...engine import Connection from ...engine import create_engine as _create_engine +from ...engine import create_pool_from_url as _create_pool_from_url from ...engine import Engine from ...engine.base import NestedTransaction from ...engine.base import Transaction @@ -80,7 +81,6 @@ def create_async_engine(url: Union[str, URL], **kw: Any) -> AsyncEngine: "use the connection.stream() method for an async " "streaming result set" ) - kw["future"] = True kw["_is_async"] = True sync_engine = _create_engine(url, **kw) return AsyncEngine(sync_engine) @@ -111,6 +111,21 @@ def async_engine_from_config( return create_async_engine(url, **options) +def create_async_pool_from_url(url: Union[str, URL], **kwargs: Any) -> Pool: + """Create a new async engine instance. + + Arguments passed to :func:`_asyncio.create_async_pool_from_url` are mostly + identical to those passed to the :func:`_sa.create_pool_from_url` function. + The specified dialect must be an asyncio-compatible dialect + such as :ref:`dialect-postgresql-asyncpg`. + + .. versionadded:: 2.0.10 + + """ + kwargs["_is_async"] = True + return _create_pool_from_url(url, **kwargs) + + class AsyncConnectable: __slots__ = "_slots_dispatch", "__weakref__" |
