diff options
| author | mike bayer <mike_mp@zzzcomputing.com> | 2022-01-14 22:54:54 +0000 |
|---|---|---|
| committer | Gerrit Code Review <gerrit@ci3.zzzcomputing.com> | 2022-01-14 22:54:54 +0000 |
| commit | f67f93db3cc5bb1980f0836f4ecbb6aada8b4618 (patch) | |
| tree | b4520aa8fb0cc41894b9a1c30ec4a0ada8f0c955 /lib/sqlalchemy/engine | |
| parent | 07cd49daaadd0a0568444eaeccaa79f79cd15ffc (diff) | |
| parent | 4999784664b9e73204474dd3dd91ee60fd174e3e (diff) | |
| download | sqlalchemy-f67f93db3cc5bb1980f0836f4ecbb6aada8b4618.tar.gz | |
Merge "Initial ORM typing layout" into main
Diffstat (limited to 'lib/sqlalchemy/engine')
| -rw-r--r-- | lib/sqlalchemy/engine/result.py | 9 | ||||
| -rw-r--r-- | lib/sqlalchemy/engine/row.py | 14 | ||||
| -rw-r--r-- | lib/sqlalchemy/engine/url.py | 48 |
3 files changed, 29 insertions, 42 deletions
diff --git a/lib/sqlalchemy/engine/result.py b/lib/sqlalchemy/engine/result.py index 15c9b1d95..3f916fea0 100644 --- a/lib/sqlalchemy/engine/result.py +++ b/lib/sqlalchemy/engine/result.py @@ -6,7 +6,6 @@ # the MIT License: https://www.opensource.org/licenses/mit-license.php """Define generic result set constructs.""" - import collections.abc as collections_abc import functools import itertools @@ -19,11 +18,13 @@ from .. import util from ..sql.base import _generative from ..sql.base import HasMemoized from ..sql.base import InPlaceGenerative +from ..util._has_cy import HAS_CYEXTENSION -try: - from sqlalchemy.cyextension.resultproxy import tuplegetter -except ImportError: + +if typing.TYPE_CHECKING or not HAS_CYEXTENSION: from ._py_row import tuplegetter +else: + from sqlalchemy.cyextension.resultproxy import tuplegetter class ResultMetaData: diff --git a/lib/sqlalchemy/engine/row.py b/lib/sqlalchemy/engine/row.py index 39c69c2ff..16215ccc4 100644 --- a/lib/sqlalchemy/engine/row.py +++ b/lib/sqlalchemy/engine/row.py @@ -7,21 +7,21 @@ """Define row constructs including :class:`.Row`.""" - import collections.abc as collections_abc import operator +import typing from ..sql import util as sql_util +from ..util._has_cy import HAS_CYEXTENSION - -try: - from sqlalchemy.cyextension.resultproxy import BaseRow - from sqlalchemy.cyextension.resultproxy import KEY_INTEGER_ONLY - from sqlalchemy.cyextension.resultproxy import KEY_OBJECTS_ONLY -except ImportError: +if typing.TYPE_CHECKING or not HAS_CYEXTENSION: from ._py_row import BaseRow from ._py_row import KEY_INTEGER_ONLY from ._py_row import KEY_OBJECTS_ONLY +else: + from sqlalchemy.cyextension.resultproxy import BaseRow + from sqlalchemy.cyextension.resultproxy import KEY_INTEGER_ONLY + from sqlalchemy.cyextension.resultproxy import KEY_OBJECTS_ONLY class Row(BaseRow, collections_abc.Sequence): diff --git a/lib/sqlalchemy/engine/url.py b/lib/sqlalchemy/engine/url.py index 9157ff008..ec5ab2bec 100644 --- a/lib/sqlalchemy/engine/url.py +++ b/lib/sqlalchemy/engine/url.py @@ -16,6 +16,11 @@ be used directly and is also accepted directly by ``create_engine()``. import collections.abc as collections_abc import re +from typing import Dict +from typing import NamedTuple +from typing import Optional +from typing import Tuple +from typing import Union from urllib.parse import parse_qsl from urllib.parse import quote_plus from urllib.parse import unquote @@ -27,20 +32,7 @@ from ..dialects import plugins from ..dialects import registry -class URL( - util.namedtuple( - "URL", - [ - "drivername", - "username", - "password", - "host", - "port", - "database", - "query", - ], - ) -): +class URL(NamedTuple): """ Represent the components of a URL used to connect to a database. @@ -86,17 +78,13 @@ class URL( """ - def __new__(self, *arg, **kw): - if kw.pop("_new_ok", False): - return super(URL, self).__new__(self, *arg, **kw) - else: - util.warn_deprecated( - "Calling URL() directly is deprecated and will be disabled " - "in a future release. The public constructor for URL is " - "now the URL.create() method.", - "1.4", - ) - return URL.create(*arg, **kw) + drivername: str + username: Optional[str] + password: Optional[str] + host: Optional[str] + port: Optional[int] + database: Optional[str] + query: Dict[str, Union[str, Tuple[str]]] @classmethod def create( @@ -153,7 +141,6 @@ class URL( cls._assert_port(port), cls._assert_none_str(database, "database"), cls._str_dict(query), - _new_ok=True, ) @classmethod @@ -264,10 +251,10 @@ class URL( if query is not None: kw["query"] = query - return self._replace(**kw) + return self._assert_replace(**kw) - def _replace(self, **kw): - """Override ``namedtuple._replace()`` to provide argument checking.""" + def _assert_replace(self, **kw): + """argument checks before calling _replace()""" if "drivername" in kw: self._assert_str(kw["drivername"], "drivername") @@ -279,7 +266,7 @@ class URL( if "query" in kw: kw["query"] = self._str_dict(kw["query"]) - return super(URL, self)._replace(**kw) + return self._replace(**kw) def update_query_string(self, query_string, append=False): """Return a new :class:`_engine.URL` object with the :attr:`_engine.URL.query` @@ -467,7 +454,6 @@ class URL( for key in set(self.query).difference(names) } ), - _new_ok=True, ) @util.memoized_property |
