From 67c1c018f571fbbcf070c4e0637f36d9533c86d7 Mon Sep 17 00:00:00 2001 From: Mike Bayer Date: Sat, 14 Jan 2023 22:24:36 -0500 Subject: apply pep-612 to hybrid_method; accept SQLCoreOperations Fixes to the annotations within the ``sqlalchemy.ext.hybrid`` extension for more effective typing of user-defined methods. The typing now uses :pep:`612` features, now supported by recent versions of Mypy, to maintain argument signatures for :class:`.hybrid_method`. Return values for hybrid methods are accepted as SQL expressions in contexts such as :meth:`_sql.Select.where` while still supporting SQL methods. Fixes: #9096 Change-Id: Id4e3a38ec50e415220dfc5f022281b11bb262469 --- lib/sqlalchemy/sql/_typing.py | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) (limited to 'lib/sqlalchemy/sql') diff --git a/lib/sqlalchemy/sql/_typing.py b/lib/sqlalchemy/sql/_typing.py index a120629ca..da3a9ad4e 100644 --- a/lib/sqlalchemy/sql/_typing.py +++ b/lib/sqlalchemy/sql/_typing.py @@ -44,6 +44,7 @@ if TYPE_CHECKING: from .elements import ColumnElement from .elements import KeyedColumnElement from .elements import quoted_name + from .elements import SQLCoreOperations from .elements import TextClause from .lambdas import LambdaElement from .roles import ColumnsClauseRole @@ -128,6 +129,7 @@ _TextCoercedExpressionArgument = Union[ _ColumnsClauseArgument = Union[ roles.TypedColumnsClauseRole[_T], roles.ColumnsClauseRole, + "SQLCoreOperations[_T]", Literal["*", 1], Type[_T], Inspectable[_HasClauseElement], @@ -144,7 +146,10 @@ sets; select(...), insert().returning(...), etc. """ _TypedColumnClauseArgument = Union[ - roles.TypedColumnsClauseRole[_T], roles.ExpressionElementRole[_T], Type[_T] + roles.TypedColumnsClauseRole[_T], + "SQLCoreOperations[_T]", + roles.ExpressionElementRole[_T], + Type[_T], ] _TP = TypeVar("_TP", bound=Tuple[Any, ...]) @@ -164,6 +169,7 @@ _T9 = TypeVar("_T9", bound=Any) _ColumnExpressionArgument = Union[ "ColumnElement[_T]", _HasClauseElement, + "SQLCoreOperations[_T]", roles.ExpressionElementRole[_T], Callable[[], "ColumnElement[_T]"], "LambdaElement", -- cgit v1.2.1