gh-109413: Enable `strict_optional = true` for `libregrtest/run_workers` (#126855)

Co-authored-by: Alex Waygood <Alex.Waygood@Gmail.com>
This commit is contained in:
sobolevn 2024-11-18 17:23:43 +03:00 committed by GitHub
parent 2c0a21c1aa
commit a1d9c8aa80
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 13 additions and 11 deletions

View File

@ -22,10 +22,6 @@ disallow_untyped_defs = False
check_untyped_defs = False
warn_return_any = False
# Enable --strict-optional for these ASAP:
[mypy-Lib.test.libregrtest.run_workers.*]
strict_optional = False
# Various internal modules that typeshed deliberately doesn't have stubs for:
[mypy-_abc.*,_opcode.*,_overlapped.*,_testcapi.*,_testinternalcapi.*,test.*]
ignore_missing_imports = True

View File

@ -102,6 +102,9 @@ class WorkerError(Exception):
super().__init__()
_NOT_RUNNING = "<not running>"
class WorkerThread(threading.Thread):
def __init__(self, worker_id: int, runner: "RunWorkers") -> None:
super().__init__()
@ -111,8 +114,8 @@ class WorkerThread(threading.Thread):
self.output = runner.output
self.timeout = runner.worker_timeout
self.log = runner.log
self.test_name: TestName | None = None
self.start_time: float | None = None
self.test_name = _NOT_RUNNING
self.start_time = time.monotonic()
self._popen: subprocess.Popen[str] | None = None
self._killed = False
self._stopped = False
@ -129,7 +132,7 @@ class WorkerThread(threading.Thread):
popen = self._popen
if popen is not None:
dt = time.monotonic() - self.start_time
info.extend((f'pid={self._popen.pid}',
info.extend((f'pid={popen.pid}',
f'time={format_duration(dt)}'))
return '<%s>' % ' '.join(info)
@ -401,7 +404,7 @@ class WorkerThread(threading.Thread):
except WorkerError as exc:
mp_result = exc.mp_result
finally:
self.test_name = None
self.test_name = _NOT_RUNNING
mp_result.result.duration = time.monotonic() - self.start_time
self.output.put((False, mp_result))
@ -416,6 +419,9 @@ class WorkerThread(threading.Thread):
def _wait_completed(self) -> None:
popen = self._popen
# only needed for mypy:
if popen is None:
raise ValueError("Should never access `._popen` before calling `.run()`")
try:
popen.wait(WAIT_COMPLETED_TIMEOUT)
@ -483,7 +489,7 @@ class RunWorkers:
self.worker_timeout: float | None = min(self.timeout * 1.5, self.timeout + 5 * 60)
else:
self.worker_timeout = None
self.workers: list[WorkerThread] | None = None
self.workers: list[WorkerThread] = []
jobs = self.runtests.get_jobs()
if jobs is not None:
@ -503,7 +509,7 @@ class RunWorkers:
processes = plural(nworkers, "process", "processes")
msg = (f"Run {tests} in parallel using "
f"{nworkers} worker {processes}")
if self.timeout:
if self.timeout and self.worker_timeout is not None:
msg += (" (timeout: %s, worker timeout: %s)"
% (format_duration(self.timeout),
format_duration(self.worker_timeout)))
@ -555,7 +561,7 @@ class RunWorkers:
if mp_result.err_msg:
# WORKER_BUG
text += ' (%s)' % mp_result.err_msg
elif (result.duration >= PROGRESS_MIN_TIME and not pgo):
elif (result.duration and result.duration >= PROGRESS_MIN_TIME and not pgo):
text += ' (%s)' % format_duration(result.duration)
if not pgo:
running = get_running(self.workers)