https://github.com/python/cpython/commit/50b52cba2d13a1854bc835412ac3f3c0ad42b5ba
commit: 50b52cba2d13a1854bc835412ac3f3c0ad42b5ba
branch: main
author: sobolevn <[email protected]>
committer: sobolevn <[email protected]>
date: 2025-05-07T22:11:04+03:00
summary:
gh-133403: Type `Tools/build/update_file.py` and check it with `mypy` (#133404)
files:
M Tools/build/mypy.ini
M Tools/build/update_file.py
diff --git a/Tools/build/mypy.ini b/Tools/build/mypy.ini
index 06224163884a98..db546c6fb3481c 100644
--- a/Tools/build/mypy.ini
+++ b/Tools/build/mypy.ini
@@ -1,7 +1,9 @@
[mypy]
files =
Tools/build/compute-changes.py,
- Tools/build/generate_sbom.py
+ Tools/build/generate_sbom.py,
+ Tools/build/update_file.py
+
pretty = True
# Make sure Python can still be built
@@ -10,6 +12,8 @@ python_version = 3.10
# ...And be strict:
strict = True
+strict_bytes = True
+local_partial_types = True
extra_checks = True
enable_error_code =
ignore-without-code,redundant-expr,truthy-bool,possibly-undefined
warn_unreachable = True
diff --git a/Tools/build/update_file.py b/Tools/build/update_file.py
index b4182c1d0cb638..b4a5fb6e778ae8 100644
--- a/Tools/build/update_file.py
+++ b/Tools/build/update_file.py
@@ -6,14 +6,27 @@
actually change the in-tree generated code.
"""
+from __future__ import annotations
+
import contextlib
import os
import os.path
import sys
+TYPE_CHECKING = False
+if TYPE_CHECKING:
+ import typing
+ from collections.abc import Iterator
+ from io import TextIOWrapper
+
+ _Outcome: typing.TypeAlias = typing.Literal['created', 'updated', 'same']
+
@contextlib.contextmanager
-def updating_file_with_tmpfile(filename, tmpfile=None):
+def updating_file_with_tmpfile(
+ filename: str,
+ tmpfile: str | None = None,
+) -> Iterator[tuple[TextIOWrapper, TextIOWrapper]]:
"""A context manager for updating a file via a temp file.
The context manager provides two open files: the source file open
@@ -46,13 +59,18 @@ def updating_file_with_tmpfile(filename, tmpfile=None):
update_file_with_tmpfile(filename, tmpfile)
-def update_file_with_tmpfile(filename, tmpfile, *, create=False):
+def update_file_with_tmpfile(
+ filename: str,
+ tmpfile: str,
+ *,
+ create: bool = False,
+) -> _Outcome:
try:
targetfile = open(filename, 'rb')
except FileNotFoundError:
if not create:
raise # re-raise
- outcome = 'created'
+ outcome: _Outcome = 'created'
os.replace(tmpfile, filename)
else:
with targetfile:
_______________________________________________
Python-checkins mailing list -- [email protected]
To unsubscribe send an email to [email protected]
https://mail.python.org/mailman3/lists/python-checkins.python.org/
Member address: [email protected]