]> 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 01:57:32 +0000 (21:57 -0400)
note for the 2.0 backport I also updated tox.ini to use mypy 1.17
for the "mypy" suite, 2.1 had this but 2.0 was pinned so some old
mypy version.

Change-Id: I25708115b44bf46d22a2a81fe010db875a8bcb22
(cherry picked from commit b319787b413794ad8c6d70135a286e664be292f8)

12 files changed:
lib/sqlalchemy/orm/decl_base.py
lib/sqlalchemy/sql/schema.py
lib/sqlalchemy/sql/util.py
lib/sqlalchemy/util/_py_collections.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 d0a78764cc80c16951507ddbe60f2346515045da..77b03a0385256aed0b5f695fbd17601b2c486105 100644 (file)
@@ -1224,9 +1224,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 and k != "dataclass_callable"
index db0678a7378f456aadd1499b2100f03d7c27dac6..efa614295f2d4c8aa7feba8ebd36e28008878371 100644 (file)
@@ -5619,7 +5619,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 9fc4e65d9b48cf641172ae5426870e7f9de70118..81f8ab9fe0e5e65270600db5209c8c37ae55c46a 100644 (file)
@@ -1171,7 +1171,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 f6aefcf67c395e9eb4a0cf86407efaaafc31255e..971245b9f83668e3772452fe4c77c792ed3fe7bd 100644 (file)
@@ -104,7 +104,7 @@ class immutabledict(ImmutableDictBase[_KT, _VT]):
 
         new = ImmutableDictBase.__new__(self.__class__)
         dict.__init__(new, self)
-        dict.update(new, __d)  # type: ignore
+        dict.update(new, __d)
         return new
 
     def _union_w_kw(
@@ -117,8 +117,8 @@ class immutabledict(ImmutableDictBase[_KT, _VT]):
         new = ImmutableDictBase.__new__(self.__class__)
         dict.__init__(new, self)
         if __d:
-            dict.update(new, __d)  # type: ignore
-        dict.update(new, kw)  # type: ignore
+            dict.update(new, __d)
+        dict.update(new, kw)
         return new
 
     def merge_with(
@@ -130,7 +130,7 @@ class immutabledict(ImmutableDictBase[_KT, _VT]):
                 if new is None:
                     new = ImmutableDictBase.__new__(self.__class__)
                     dict.__init__(new, self)
-                dict.update(new, d)  # type: ignore
+                dict.update(new, d)
         if new is None:
             return self
 
index eedcc3094749358f6c38ac69c4363e9b23cb59c2..8216a69bb56b028438ad40c429c2d1a07248f2a3 100644 (file)
@@ -33,11 +33,11 @@ def result_one(
 ) -> None:
     # EXPECTED_TYPE: Row[Tuple[int, str]]
     reveal_type(res.one())
-    # EXPECTED_TYPE: Union[Row[Tuple[int, str]], None]
+    # EXPECTED_TYPE: Row[Tuple[int, str]] | None
     reveal_type(res.one_or_none())
-    # EXPECTED_TYPE: Union[Row[Tuple[int, str]], None]
+    # EXPECTED_TYPE: Row[Tuple[int, str]] | None
     reveal_type(res.fetchone())
-    # EXPECTED_TYPE: Union[Row[Tuple[int, str]], None]
+    # EXPECTED_TYPE: Row[Tuple[int, str]] | None
     reveal_type(res.first())
     # EXPECTED_TYPE: Sequence[Row[Tuple[int, str]]]
     reveal_type(res.all())
@@ -69,7 +69,7 @@ def result_one(
 
     # EXPECTED_TYPE: Any
     reveal_type(res.scalar_one())
-    # EXPECTED_TYPE: Union[Any, None]
+    # EXPECTED_TYPE: Any | None
     reveal_type(res.scalar_one_or_none())
     # EXPECTED_TYPE: Any
     reveal_type(res.scalar())
@@ -87,7 +87,7 @@ def result_one(
 
     # EXPECTED_TYPE: float
     reveal_type(r_single.scalar_one())
-    # EXPECTED_TYPE: Union[float, None]
+    # EXPECTED_TYPE: float | None
     reveal_type(r_single.scalar_one_or_none())
-    # EXPECTED_TYPE: Union[float, None]
+    # EXPECTED_TYPE: float | None
     reveal_type(r_single.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 9ed591815af823c989ceb326697b42c00e0a4dbe..6e2fe89a3020a3d89fbd9793cddef998ba0edf76 100644 (file)
@@ -231,7 +231,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()
@@ -241,7 +241,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()
@@ -260,7 +260,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()
@@ -270,7 +270,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()
@@ -414,14 +414,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)
 
 
@@ -474,7 +474,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)
 
 
@@ -528,7 +528,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)
 
 
@@ -581,7 +581,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 a83d52770a47743ded078d388df24df05acfdf86..17887a381f313f51f4f7acedf0ce384765119158 100644 (file)
--- a/tox.ini
+++ b/tox.ini
@@ -199,7 +199,7 @@ commands=
 deps=
      greenlet >= 1
      importlib_metadata; python_version < '3.8'
-     mypy >= 1.16.0
+     mypy >= 1.17.0
      types-greenlet
 commands =
     mypy  {env:MYPY_COLOR} ./lib/sqlalchemy
@@ -214,9 +214,9 @@ extras =
 deps=
      pytest>=7.0.0rc1,<8.4
      pytest-xdist
-     greenlet >= 1
+     types-greenlet
      importlib_metadata; python_version < '3.8'
-     mypy >= 1.2.0,<1.11.0
+     mypy >= 1.17.0
      patch==1.*
 extras=
      {[greenletextras]extras}