From: Yurii Karabas <1998uriyyo@gmail.com> Date: Sat, 28 Jan 2023 14:27:35 +0000 (-0500) Subject: Set correct type annotations for ColumnElement.cast X-Git-Tag: rel_2_0_1~21^2 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=9c4267f2442145378922498ca735d96c8f4bca42;p=thirdparty%2Fsqlalchemy%2Fsqlalchemy.git Set correct type annotations for ColumnElement.cast Fixes: #9156 ### Description ### Checklist This pull request is: - [ ] A documentation / typographical error fix - Good to go, no issue or tests are needed - [x] A short code fix - please include the issue number, and create an issue if none exists, which must include a complete example of the issue. one line code fixes without an issue and demonstration will not be accepted. - Please include: `Fixes: #` in the commit message - please include tests. one line code fixes without tests will not be accepted. - [ ] A new feature implementation - please include the issue number, and create an issue if none exists, which must include a complete example of how the feature would look. - Please include: `Fixes: #` in the commit message - please include tests. **Have a nice day!** Closes: #9157 Pull-request: https://github.com/sqlalchemy/sqlalchemy/pull/9157 Pull-request-sha: 321dac184ee0d317296a689d7c8e47bf1464bcce Change-Id: I99fe759a21de910f34bae3bb919e82cd08969e81 --- diff --git a/doc/build/changelog/unreleased_20/9156.rst b/doc/build/changelog/unreleased_20/9156.rst new file mode 100644 index 0000000000..9fbeb44eb5 --- /dev/null +++ b/doc/build/changelog/unreleased_20/9156.rst @@ -0,0 +1,7 @@ +.. change:: + :tags: bug, typing + :tickets: 9156 + + The :meth:`_expression.ColumnElement.cast` is typed to accept + both ``Type[TypeEngine[T]]`` and ``TypeEngine[T]`` rather only + ``TypeEngine[T]``. \ No newline at end of file diff --git a/lib/sqlalchemy/sql/elements.py b/lib/sqlalchemy/sql/elements.py index 71d8cb2d32..c3f7b884ce 100644 --- a/lib/sqlalchemy/sql/elements.py +++ b/lib/sqlalchemy/sql/elements.py @@ -1641,7 +1641,7 @@ class ColumnElement( co._is_clone_of = selectable._is_clone_of.columns.get(key) return key, co - def cast(self, type_: TypeEngine[_T]) -> Cast[_T]: + def cast(self, type_: _TypeEngineArgument[_T]) -> Cast[_T]: """Produce a type cast, i.e. ``CAST( AS )``. This is a shortcut to the :func:`_expression.cast` function. diff --git a/test/ext/mypy/plugin_files/issue_9156.py b/test/ext/mypy/plugin_files/issue_9156.py new file mode 100644 index 0000000000..46e5e95703 --- /dev/null +++ b/test/ext/mypy/plugin_files/issue_9156.py @@ -0,0 +1,11 @@ +from typing import Any, Type + +from sqlalchemy.sql.elements import ColumnElement +from sqlalchemy.sql.type_api import TypeEngine + +col: ColumnElement[Any] +type_: Type[TypeEngine[Any]] +obj: TypeEngine[Any] + +col.cast(type_) +col.cast(obj)