summaryrefslogtreecommitdiff
path: root/lib/sqlalchemy/ext
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/ext
parent07cd49daaadd0a0568444eaeccaa79f79cd15ffc (diff)
parent4999784664b9e73204474dd3dd91ee60fd174e3e (diff)
downloadsqlalchemy-f67f93db3cc5bb1980f0836f4ecbb6aada8b4618.tar.gz
Merge "Initial ORM typing layout" into main
Diffstat (limited to 'lib/sqlalchemy/ext')
-rw-r--r--lib/sqlalchemy/ext/hybrid.py9
-rw-r--r--lib/sqlalchemy/ext/mypy/names.py2
-rw-r--r--lib/sqlalchemy/ext/mypy/plugin.py4
3 files changed, 11 insertions, 4 deletions
diff --git a/lib/sqlalchemy/ext/hybrid.py b/lib/sqlalchemy/ext/hybrid.py
index 52817e838..c7d9d4f88 100644
--- a/lib/sqlalchemy/ext/hybrid.py
+++ b/lib/sqlalchemy/ext/hybrid.py
@@ -802,10 +802,15 @@ advanced and/or patient developers, there's probably a whole lot of amazing
things it can be used for.
""" # noqa
+from typing import Any
+from typing import TypeVar
+
from .. import util
from ..orm import attributes
from ..orm import interfaces
+_T = TypeVar("_T", bound=Any)
+
HYBRID_METHOD = util.symbol("HYBRID_METHOD")
"""Symbol indicating an :class:`InspectionAttr` that's
of type :class:`.hybrid_method`.
@@ -1147,7 +1152,7 @@ class hybrid_property(interfaces.InspectionAttrInfo):
return expr_comparator
-class Comparator(interfaces.PropComparator):
+class Comparator(interfaces.PropComparator[_T]):
"""A helper class that allows easy construction of custom
:class:`~.orm.interfaces.PropComparator`
classes for usage with hybrids."""
@@ -1168,7 +1173,7 @@ class Comparator(interfaces.PropComparator):
return self
-class ExprComparator(Comparator):
+class ExprComparator(Comparator[_T]):
def __init__(self, cls, expression, hybrid):
self.cls = cls
self.expression = expression
diff --git a/lib/sqlalchemy/ext/mypy/names.py b/lib/sqlalchemy/ext/mypy/names.py
index 8ec15a6d4..b6f911979 100644
--- a/lib/sqlalchemy/ext/mypy/names.py
+++ b/lib/sqlalchemy/ext/mypy/names.py
@@ -104,7 +104,7 @@ _lookup: Dict[str, Tuple[int, Set[str]]] = {
},
),
"TypeEngine": (TYPEENGINE, {"sqlalchemy.sql.type_api.TypeEngine"}),
- "Mapped": (MAPPED, {"sqlalchemy.orm.attributes.Mapped"}),
+ "Mapped": (MAPPED, {NAMED_TYPE_SQLA_MAPPED}),
"declarative_base": (
DECLARATIVE_BASE,
{
diff --git a/lib/sqlalchemy/ext/mypy/plugin.py b/lib/sqlalchemy/ext/mypy/plugin.py
index 8687012a1..0a21feb51 100644
--- a/lib/sqlalchemy/ext/mypy/plugin.py
+++ b/lib/sqlalchemy/ext/mypy/plugin.py
@@ -112,6 +112,8 @@ class SQLAlchemyPlugin(Plugin):
self, file: MypyFile
) -> List[Tuple[int, str, int]]:
return [
+ #
+ (10, "sqlalchemy.orm", -1),
(10, "sqlalchemy.orm.attributes", -1),
(10, "sqlalchemy.orm.decl_api", -1),
]
@@ -270,7 +272,7 @@ def _add_globals(ctx: Union[ClassDefContext, DynamicClassDefContext]) -> None:
"""
- util.add_global(ctx, "sqlalchemy.orm.attributes", "Mapped", "__sa_Mapped")
+ util.add_global(ctx, "sqlalchemy.orm", "Mapped", "__sa_Mapped")
def _set_declarative_metaclass(