-
-
Notifications
You must be signed in to change notification settings - Fork 32.1k
gh-109413: Fix some trivial mypy nitpicks in libregrtest #109454
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Conversation
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Some explanatory comments:
Lib/test/libregrtest/logger.py
Outdated
formatted_test_time = "%d:%02d:%02d" % (hours, mins, secs) | ||
|
||
line = f"{test_time} {line}" | ||
line = f"{formatted_test_time} {line}" |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This variable has been renamed here because there's already a variable earlier in this function called test_time
, and it has type float
. Mypy enforces that a variable should only ever have one consistent type within any given scope, and here the name is reassigned to a str
. We can fix the mypy complaints by using a new variable name for the str
value, rather than reusing the test_time
name
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
test_time is a bad name, in fact, it's just time relative to regrtest start time.
I suggest renaming test_time to log_time and the second variable to formatted_log_time.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Good shout, I'll do the renames
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
In the 8000 past, I put "test" everywhere :-) "test" now means nothing, since everything is called "test" in libregrtest :-) That's why I renamed "runtest.py" to "single.py" and rename "runtest_mp.py" to "run_worker.py" ;-)
report = ' '.join(report) | ||
print(f"Total tests: {report}") | ||
print(f"Total tests: {' '.join(report)}") |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
There's the same issue here: report
is a list earlier on in the function, but at this location, it's being assigned to a str
. We could use a new variable name, or just do what I suggest here (make it an "anonymous variable")
except support.ResourceDenied as msg: | ||
except support.ResourceDenied as exc: | ||
if not quiet and not pgo: | ||
print(f"{test_name} skipped -- {msg}", flush=True) | ||
print(f"{test_name} skipped -- {exc}", flush=True) | ||
result.state = State.RESOURCE_DENIED | ||
return | ||
except unittest.SkipTest as msg: | ||
except unittest.SkipTest as exc: | ||
if not quiet and not pgo: | ||
print(f"{test_name} skipped -- {msg}", flush=True) | ||
print(f"{test_name} skipped -- {exc}", flush=True) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This passage was causing mypy to get very agitated:
libregrtest\single.py:150: error: Assignment to variable "msg" outside
except: block [misc]
msg = f"test {test_name} failed"
^~~~~~~~~~~~~~~~~~~~~~~~~~
libregrtest\single.py:152: error: Trying to read deleted variable "msg"
[misc]
msg = f"{msg} -- {exc}"
^~~~~~
libregrtest\single.py:152: error: Assignment to variable "msg" outside
except: block [misc]
msg = f"{msg} -- {exc}"
^~~~~~~~~~~~~~~~~
libregrtest\single.py:153: error: Trying to read deleted variable "msg"
[misc]
print(msg, file=sys.stderr, flush=True)
^~~
libregrtest\single.py:160: error: Assignment to variable "msg" outside
except: block [misc]
msg = f"test {test_name} failed"
^~~~~~~~~~~~~~~~~~~~~~~~~~
libregrtest\single.py:162: error: Trying to read deleted variable "msg"
[misc]
msg = f"{msg} -- {exc}"
^~~~~~
libregrtest\single.py:162: error: Assignment to variable "msg" outside
except: block [misc]
msg = f"{msg} -- {exc}"
^~~~~~~~~~~~~~~~~
libregrtest\single.py:163: error: Trying to read deleted variable "msg"
[misc]
print(msg, file=sys.stderr, flush=True)
^~~
libregrtest\single.py:176: error: Assignment to variable "msg" outside
except: block [misc]
msg = traceback.format_exc()
^~~~~~~~~~~~~~~~~~~~~~
libregrtest\single.py:177: error: Trying to read deleted variable "msg"
[misc]
print(f"test {test_name} crashed -- {msg}",
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Mypy was getting confused because the msg
variable had type Exception
here, but lower down in the same function (on line 150), the same variable name is assigned to a str
. By renaming the variable here as exc
, the exc
variable is now always an Exception
instance in this function, and the msg
variable is now always a str
in this function.
@@ -25,7 +25,7 @@ def create_worker_process(runtests: RunTests, output_fd: int, | |||
if python_cmd is not None: | |||
executable = python_cmd | |||
else: | |||
executable = [sys.executable] | |||
executable = (sys.executable,) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Mypy complained about this line because on line 26, the executable
variable has type tuple[str, ...]
, but here, the same name is being assigned to an object of type list[str]
. We can make mypy happy by just making it a tuple
in both the branches.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
LGTM
Lib/test/libregrtest/logger.py
Outdated
formatted_test_time = "%d:%02d:%02d" % (hours, mins, secs) | ||
|
||
line = f"{test_time} {line}" | ||
line = f"{formatted_test_time} {line}" |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
test_time is a bad name, in fact, it's just time relative to regrtest start time.
I suggest renaming test_time to log_time and the second variable to formatted_log_time.
This PR fixes various mypy nitpicks with
Lib/test/libregrtest
that require small changes to the existing code, but can all be resolved fairly trivially.Currently, if you
cd
intoLib/test
and then runmypy --config-file regrtest/mypy.ini
, mypy reports 23 errors. This PR brings the number of errors reported down to 9.