https://github.com/python/cpython/commit/12ca7e622ff21ba3b7c90c62be6f6f82d543f25b
commit: 12ca7e622ff21ba3b7c90c62be6f6f82d543f25b
branch: main
author: sobolevn <[email protected]>
committer: sobolevn <[email protected]>
date: 2024-11-13T22:29:28+03:00
summary:
gh-109413: Enable `strict_optional` for `libregrtest/main.py` (#126394)
files:
M Lib/test/libregrtest/cmdline.py
M Lib/test/libregrtest/main.py
M Lib/test/libregrtest/mypy.ini
M Lib/test/libregrtest/run_workers.py
diff --git a/Lib/test/libregrtest/cmdline.py b/Lib/test/libregrtest/cmdline.py
index 8bef04cba81138..0c94fcc1907071 100644
--- a/Lib/test/libregrtest/cmdline.py
+++ b/Lib/test/libregrtest/cmdline.py
@@ -148,7 +148,7 @@ def __init__(self, **kwargs) -> None:
self.randomize = False
self.fromfile = None
self.fail_env_changed = False
- self.use_resources = None
+ self.use_resources: list[str] = []
self.trace = False
self.coverdir = 'coverage'
self.runleaks = False
@@ -403,8 +403,6 @@ def _parse_args(args, **kwargs):
raise TypeError('%r is an invalid keyword argument '
'for this function' % k)
setattr(ns, k, v)
- if ns.use_resources is None:
- ns.use_resources = []
parser = _create_parser()
# Issue #14191: argparse doesn't support "intermixed" positional and
diff --git a/Lib/test/libregrtest/main.py b/Lib/test/libregrtest/main.py
index 133eba8ffe8e69..49209b0cec756e 100644
--- a/Lib/test/libregrtest/main.py
+++ b/Lib/test/libregrtest/main.py
@@ -123,7 +123,7 @@ def __init__(self, ns: Namespace, _add_python_opts: bool =
False):
self.python_cmd = None
self.coverage: bool = ns.trace
self.coverage_dir: StrPath | None = ns.coverdir
- self.tmp_dir: StrPath | None = ns.tempdir
+ self._tmp_dir: StrPath | None = ns.tempdir
# Randomize
self.randomize: bool = ns.randomize
@@ -159,6 +159,8 @@ def log(self, line: str = '') -> None:
self.logger.log(line)
def find_tests(self, tests: TestList | None = None) -> tuple[TestTuple,
TestList | None]:
+ if tests is None:
+ tests = []
if self.single_test_run:
self.next_single_filename = os.path.join(self.tmp_dir,
'pynexttest')
try:
@@ -454,6 +456,11 @@ def finalize_tests(self, coverage: trace.CoverageResults |
None) -> None:
self.results.write_junit(self.junit_filename)
def display_summary(self) -> None:
+ if self.first_runtests is None:
+ raise ValueError(
+ "Should never call `display_summary()` before calling
`_run_test()`"
+ )
+
duration = time.perf_counter() - self.logger.start_time
filtered = bool(self.match_tests)
@@ -708,7 +715,15 @@ def _init(self):
strip_py_suffix(self.cmdline_args)
- self.tmp_dir = get_temp_dir(self.tmp_dir)
+ self._tmp_dir = get_temp_dir(self._tmp_dir)
+
+ @property
+ def tmp_dir(self) -> StrPath:
+ if self._tmp_dir is None:
+ raise ValueError(
+ "Should never use `.tmp_dir` before calling `.main()`"
+ )
+ return self._tmp_dir
def main(self, tests: TestList | None = None) -> NoReturn:
if self.want_add_python_opts:
diff --git a/Lib/test/libregrtest/mypy.ini b/Lib/test/libregrtest/mypy.ini
index 22c7c7a9acef14..da75a27158a600 100644
--- a/Lib/test/libregrtest/mypy.ini
+++ b/Lib/test/libregrtest/mypy.ini
@@ -22,10 +22,8 @@ disallow_untyped_defs = False
check_untyped_defs = False
warn_return_any = False
-disable_error_code = return
-
# Enable --strict-optional for these ASAP:
-[mypy-Lib.test.libregrtest.main.*,Lib.test.libregrtest.run_workers.*]
+[mypy-Lib.test.libregrtest.run_workers.*]
strict_optional = False
# Various internal modules that typeshed deliberately doesn't have stubs for:
diff --git a/Lib/test/libregrtest/run_workers.py
b/Lib/test/libregrtest/run_workers.py
index 387ddf9614cf79..dcc817ae9aceb6 100644
--- a/Lib/test/libregrtest/run_workers.py
+++ b/Lib/test/libregrtest/run_workers.py
@@ -211,6 +211,7 @@ def _run_process(self, runtests: WorkerRunTests, output_fd:
int,
# on reading closed stdout
raise ExitThread
raise
+ return None
except:
self._kill()
raise
@@ -544,6 +545,7 @@ def _get_result(self) -> QueueOutput | None:
running = get_running(self.workers)
if running:
self.log(running)
+ return None
def display_result(self, mp_result: MultiprocessResult) -> None:
result = mp_result.result
_______________________________________________
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]