summaryrefslogtreecommitdiff
path: root/lib/sqlalchemy/engine
diff options
context:
space:
mode:
authormike bayer <mike_mp@zzzcomputing.com>2022-01-14 22:54:54 +0000
committerGerrit Code Review <gerrit@ci3.zzzcomputing.com>2022-01-14 22:54:54 +0000
commitf67f93db3cc5bb1980f0836f4ecbb6aada8b4618 (patch)
treeb4520aa8fb0cc41894b9a1c30ec4a0ada8f0c955 /lib/sqlalchemy/engine
parent07cd49daaadd0a0568444eaeccaa79f79cd15ffc (diff)
parent4999784664b9e73204474dd3dd91ee60fd174e3e (diff)
downloadsqlalchemy-f67f93db3cc5bb1980f0836f4ecbb6aada8b4618.tar.gz
Merge "Initial ORM typing layout" into main
Diffstat (limited to 'lib/sqlalchemy/engine')
-rw-r--r--lib/sqlalchemy/engine/result.py9
-rw-r--r--lib/sqlalchemy/engine/row.py14
-rw-r--r--lib/sqlalchemy/engine/url.py48
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