]> git.ipfire.org Git - thirdparty/sqlalchemy/sqlalchemy.git/commitdiff
update for mypy 17
authorMike Bayer <mike_mp@zzzcomputing.com>
Mon, 14 Jul 2025 22:08:51 +0000 (18:08 -0400)
committerMike Bayer <mike_mp@zzzcomputing.com>
Tue, 15 Jul 2025 00:09:12 +0000 (20:09 -0400)
Change-Id: I25708115b44bf46d22a2a81fe010db875a8bcb22

12 files changed:
lib/sqlalchemy/orm/decl_base.py
lib/sqlalchemy/sql/schema.py
lib/sqlalchemy/sql/util.py
lib/sqlalchemy/util/_collections_cy.py
test/typing/plain_files/engine/engine_result.py
test/typing/plain_files/orm/dataclass_transforms_one.py
test/typing/plain_files/orm/relationship.py
test/typing/plain_files/sql/misc.py
test/typing/plain_files/sql/operators.py
test/typing/plain_files/sql/sql_operations.py
test/typing/plain_files/sql/typed_results.py
tox.ini

index ea01312d3c4c84bc88d751f2b25626ce7c46bb19..646df0540a07dc4c9f2b0598c0f1556a41d8262c 100644 (file)
@@ -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
index ddb6db62ef5d348d5fca0a1ba983907016082076..92ecadb7927ecab9cfed3774a267486e02045716 100644 (file)
@@ -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()
 
index 7dda0a12b9af231afd58c94921fd295b34e3a8d3..128fc6d345efeb687edfd79e6f6d4fb64beabed7 100644 (file)
@@ -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
index 77cea0bb3bf2a12e6bc0a9f6d715092b583a0da5..65c3b5a68474ee3103ca1e4e0ae6f9fa368f8a46 100644 (file)
@@ -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:
index 553a04309a2ef1484275d96e55d51e64fcf0b1e7..1c76cf68b44d1c4196b3871a6d26adda28b44e18 100644 (file)
@@ -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())
index b7b88590fdae3f9412b766259dfdfb6772589bd8..986483d8ef06ae743585d8154bd724d88afadc58 100644 (file)
@@ -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"
index a972e23b83e84994c049fe467b55fcd95ce58261..82e668ceebe6093e2cb213389e73a7a0fa754158 100644 (file)
@@ -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\*?\]
index d598af06ef0d67f392a0a114215b8bb0fa15cdd7..2a9e539dc38d7c4691218d5464e0242fc6c84a2b 100644 (file)
@@ -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)
index d52461d41f11e4a387e7419c9320a492b5ba310d..c09029fc14812d0fef692851b25c82180a32305f 100644 (file)
@@ -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())
index 56d0529da407babccf549ebf55df3fd6e8c38d81..f0025b2cb340bfe85e0f598c6ed32acfa3757fcf 100644 (file)
@@ -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.?\]
index c6c0816cb985601e7b85f6e747df4a9c12236e9a..a544aa434f470695bcd64f916cb3268cefe02bf8 100644 (file)
@@ -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 b199f5c94b5193b8500c7655342cfe8e9f52b1cb..e1ade2b566dce5a8b0d06b6319e065c5100a50ef 100644 (file)
--- 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}