From b319787b413794ad8c6d70135a286e664be292f8 Mon Sep 17 00:00:00 2001 From: Mike Bayer Date: Mon, 14 Jul 2025 18:08:51 -0400 Subject: [PATCH] update for mypy 17 Change-Id: I25708115b44bf46d22a2a81fe010db875a8bcb22 --- lib/sqlalchemy/orm/decl_base.py | 4 ++-- lib/sqlalchemy/sql/schema.py | 2 +- lib/sqlalchemy/sql/util.py | 2 +- lib/sqlalchemy/util/_collections_cy.py | 2 +- .../typing/plain_files/engine/engine_result.py | 10 +++++----- .../orm/dataclass_transforms_one.py | 2 +- test/typing/plain_files/orm/relationship.py | 4 ++-- test/typing/plain_files/sql/misc.py | 6 +++--- test/typing/plain_files/sql/operators.py | 2 +- test/typing/plain_files/sql/sql_operations.py | 2 +- test/typing/plain_files/sql/typed_results.py | 18 +++++++++--------- tox.ini | 4 ++-- 12 files changed, 29 insertions(+), 29 deletions(-) diff --git a/lib/sqlalchemy/orm/decl_base.py b/lib/sqlalchemy/orm/decl_base.py index ea01312d3c..646df0540a 100644 --- a/lib/sqlalchemy/orm/decl_base.py +++ b/lib/sqlalchemy/orm/decl_base.py @@ -1204,9 +1204,9 @@ class _ClassScanMapperConfig(_MapperConfig): restored = None try: - dataclass_callable( + dataclass_callable( # type: ignore[call-overload] klass, - **{ + **{ # type: ignore[call-overload,unused-ignore] k: v for k, v in dataclass_setup_arguments.items() if v is not _NoArg.NO_ARG diff --git a/lib/sqlalchemy/sql/schema.py b/lib/sqlalchemy/sql/schema.py index ddb6db62ef..92ecadb792 100644 --- a/lib/sqlalchemy/sql/schema.py +++ b/lib/sqlalchemy/sql/schema.py @@ -5734,7 +5734,7 @@ class MetaData(HasSchemaAttr): def clear(self) -> None: """Clear all Table objects from this MetaData.""" - dict.clear(self.tables) # type: ignore + dict.clear(self.tables) self._schemas.clear() self._fk_memos.clear() diff --git a/lib/sqlalchemy/sql/util.py b/lib/sqlalchemy/sql/util.py index 7dda0a12b9..128fc6d345 100644 --- a/lib/sqlalchemy/sql/util.py +++ b/lib/sqlalchemy/sql/util.py @@ -1174,7 +1174,7 @@ class ClauseAdapter(visitors.ReplacingExternalTraversal): # we are an alias of a table and we are not derived from an # alias of a table (which nonetheless may be the same table # as ours) so, same thing - return col # type: ignore + return col else: # other cases where we are a selectable and the element # is another join or selectable that contains a table which our diff --git a/lib/sqlalchemy/util/_collections_cy.py b/lib/sqlalchemy/util/_collections_cy.py index 77cea0bb3b..65c3b5a684 100644 --- a/lib/sqlalchemy/util/_collections_cy.py +++ b/lib/sqlalchemy/util/_collections_cy.py @@ -139,7 +139,7 @@ class OrderedSet(Set[_T]): self._list.remove(element) def clear(self) -> None: - set.clear(self) # type: ignore[arg-type] + set.clear(self) self._list = [] def __getitem__(self, key: cython.Py_ssize_t) -> _T: diff --git a/test/typing/plain_files/engine/engine_result.py b/test/typing/plain_files/engine/engine_result.py index 553a04309a..1c76cf68b4 100644 --- a/test/typing/plain_files/engine/engine_result.py +++ b/test/typing/plain_files/engine/engine_result.py @@ -31,11 +31,11 @@ def row_one(row: Row[int, str, bool]) -> None: def result_one(res: Result[int, str]) -> None: # EXPECTED_ROW_TYPE: Row[int, str] reveal_type(res.one()) - # EXPECTED_ROW_TYPE: Optional[Row[int, str]] + # EXPECTED_ROW_TYPE: Row[int, str] | None reveal_type(res.one_or_none()) - # EXPECTED_ROW_TYPE: Optional[Row[int, str]] + # EXPECTED_ROW_TYPE: Row[int, str] | None reveal_type(res.fetchone()) - # EXPECTED_ROW_TYPE: Optional[Row[int, str]] + # EXPECTED_ROW_TYPE: Row[int, str] | None reveal_type(res.first()) # EXPECTED_ROW_TYPE: Sequence[Row[int, str]] reveal_type(res.all()) @@ -67,7 +67,7 @@ def result_one(res: Result[int, str]) -> None: # EXPECTED_TYPE: int reveal_type(res.scalar_one()) - # EXPECTED_TYPE: Union[int, None] + # EXPECTED_TYPE: int | None reveal_type(res.scalar_one_or_none()) - # EXPECTED_TYPE: Union[int, None] + # EXPECTED_TYPE: int | None reveal_type(res.scalar()) diff --git a/test/typing/plain_files/orm/dataclass_transforms_one.py b/test/typing/plain_files/orm/dataclass_transforms_one.py index b7b88590fd..986483d8ef 100644 --- a/test/typing/plain_files/orm/dataclass_transforms_one.py +++ b/test/typing/plain_files/orm/dataclass_transforms_one.py @@ -28,7 +28,7 @@ tis = TestInitialSupport(data="some data", y=5) # EXPECTED_TYPE: str reveal_type(tis.data) -# EXPECTED_RE_TYPE: .*Union\[builtins.int, None\] +# EXPECTED_RE_TYPE: .*builtins.int \| None reveal_type(tis.y) tis.data = "some other data" diff --git a/test/typing/plain_files/orm/relationship.py b/test/typing/plain_files/orm/relationship.py index a972e23b83..82e668ceeb 100644 --- a/test/typing/plain_files/orm/relationship.py +++ b/test/typing/plain_files/orm/relationship.py @@ -131,10 +131,10 @@ class Engineer(Employee): if typing.TYPE_CHECKING: - # EXPECTED_RE_TYPE: sqlalchemy.*.InstrumentedAttribute\[Union\[builtins.str, None\]\] + # EXPECTED_RE_TYPE: sqlalchemy.*.InstrumentedAttribute\[builtins.str \| None\] reveal_type(User.extra) - # EXPECTED_RE_TYPE: sqlalchemy.*.InstrumentedAttribute\[Union\[builtins.str, None\]\] + # EXPECTED_RE_TYPE: sqlalchemy.*.InstrumentedAttribute\[builtins.str \| None\] reveal_type(User.extra_name) # EXPECTED_RE_TYPE: sqlalchemy.*.InstrumentedAttribute\[builtins.str\*?\] diff --git a/test/typing/plain_files/sql/misc.py b/test/typing/plain_files/sql/misc.py index d598af06ef..2a9e539dc3 100644 --- a/test/typing/plain_files/sql/misc.py +++ b/test/typing/plain_files/sql/misc.py @@ -27,11 +27,11 @@ def test_col_get() -> None: col_alt = column("alt", Integer) tbl = table("mytable", col_id) - # EXPECTED_TYPE: Union[ColumnClause[Any], None] + # EXPECTED_TYPE: ColumnClause[Any] | None reveal_type(tbl.c.get("id")) - # EXPECTED_TYPE: Union[ColumnClause[Any], None] + # EXPECTED_TYPE: ColumnClause[Any] | None reveal_type(tbl.c.get("id", None)) - # EXPECTED_TYPE: Union[ColumnClause[Any], ColumnClause[int]] + # EXPECTED_TYPE: ColumnClause[Any] | ColumnClause[int] reveal_type(tbl.c.get("alt", col_alt)) col: ColumnElement[Any] = tbl.c.get("foo", literal("bar")) print(col) diff --git a/test/typing/plain_files/sql/operators.py b/test/typing/plain_files/sql/operators.py index d52461d41f..c09029fc14 100644 --- a/test/typing/plain_files/sql/operators.py +++ b/test/typing/plain_files/sql/operators.py @@ -157,5 +157,5 @@ select().where(t1) # EXPECTED_TYPE: BinaryExpression[Any] reveal_type(col.op("->>")("field")) -# EXPECTED_TYPE: Union[BinaryExpression[Any], Grouping[Any]] +# EXPECTED_TYPE: BinaryExpression[Any] | Grouping[Any] reveal_type(col.op("->>")("field").self_group()) diff --git a/test/typing/plain_files/sql/sql_operations.py b/test/typing/plain_files/sql/sql_operations.py index 56d0529da4..f0025b2cb3 100644 --- a/test/typing/plain_files/sql/sql_operations.py +++ b/test/typing/plain_files/sql/sql_operations.py @@ -133,7 +133,7 @@ if typing.TYPE_CHECKING: # EXPECTED_RE_TYPE: sqlalchemy..*BinaryExpression\[builtins.bool\] reveal_type(expr2) - # EXPECTED_RE_TYPE: sqlalchemy..*ColumnElement\[Union\[builtins.float, .*\.Decimal\]\] + # EXPECTED_RE_TYPE: sqlalchemy..*ColumnElement\[builtins.float | .*\.Decimal\] reveal_type(expr3) # EXPECTED_RE_TYPE: sqlalchemy..*UnaryExpression\[builtins.int.?\] diff --git a/test/typing/plain_files/sql/typed_results.py b/test/typing/plain_files/sql/typed_results.py index c6c0816cb9..a544aa434f 100644 --- a/test/typing/plain_files/sql/typed_results.py +++ b/test/typing/plain_files/sql/typed_results.py @@ -230,7 +230,7 @@ def t_result_scalar_accessors() -> None: r1 = result.scalar() - # EXPECTED_RE_TYPE: Union\[builtins.str\*?, None\] + # EXPECTED_RE_TYPE: builtins.str \| None reveal_type(r1) r2 = result.scalar_one() @@ -240,7 +240,7 @@ def t_result_scalar_accessors() -> None: r3 = result.scalar_one_or_none() - # EXPECTED_RE_TYPE: Union\[builtins.str\*?, None\] + # EXPECTED_RE_TYPE: builtins.str \| None reveal_type(r3) r4 = result.scalars() @@ -259,7 +259,7 @@ async def t_async_result_scalar_accessors() -> None: r1 = await result.scalar() - # EXPECTED_RE_TYPE: Union\[builtins.str\*?, None\] + # EXPECTED_RE_TYPE: builtins.str \| None reveal_type(r1) r2 = await result.scalar_one() @@ -269,7 +269,7 @@ async def t_async_result_scalar_accessors() -> None: r3 = await result.scalar_one_or_none() - # EXPECTED_RE_TYPE: Union\[builtins.str\*?, None\] + # EXPECTED_RE_TYPE: builtins.str \| None reveal_type(r3) r4 = result.scalars() @@ -413,14 +413,14 @@ def t_connection_execute_single_row_scalar() -> None: x = result.scalar() - # EXPECTED_RE_TYPE: Union\[builtins.str\*?, None\] + # EXPECTED_RE_TYPE: builtins.str \| None reveal_type(x) def t_connection_scalar() -> None: obj = connection.scalar(single_stmt) - # EXPECTED_RE_TYPE: Union\[builtins.str\*?, None\] + # EXPECTED_RE_TYPE: builtins.str \| None reveal_type(obj) @@ -473,7 +473,7 @@ def t_session_execute_single() -> None: def t_session_scalar() -> None: obj = session.scalar(single_stmt) - # EXPECTED_RE_TYPE: Union\[builtins.str\*?, None\] + # EXPECTED_RE_TYPE: builtins.str \| None reveal_type(obj) @@ -527,7 +527,7 @@ async def t_async_connection_execute_single() -> None: async def t_async_connection_scalar() -> None: obj = await async_connection.scalar(single_stmt) - # EXPECTED_RE_TYPE: Union\[builtins.str\*?, None\] + # EXPECTED_RE_TYPE: builtins.str \| None reveal_type(obj) @@ -580,7 +580,7 @@ async def t_async_session_execute_single() -> None: async def t_async_session_scalar() -> None: obj = await async_session.scalar(single_stmt) - # EXPECTED_RE_TYPE: Union\[builtins.str\*?, None\] + # EXPECTED_RE_TYPE: builtins.str \| None reveal_type(obj) diff --git a/tox.ini b/tox.ini index b199f5c94b..e1ade2b566 100644 --- a/tox.ini +++ b/tox.ini @@ -196,7 +196,7 @@ commands= [testenv:pep484] deps= greenlet >= 1 - mypy >= 1.16.0 + mypy >= 1.17.0 types-greenlet commands = mypy {env:MYPY_COLOR} ./lib/sqlalchemy @@ -212,7 +212,7 @@ deps= pytest>=7.0.0rc1,<8.4 pytest-xdist greenlet >= 1 - mypy >= 1.16 + mypy >= 1.17 types-greenlet extras= {[greenletextras]extras} -- 2.47.2