8000 gh-109413: Fix some trivial mypy nitpicks in libregrtest by AlexWaygood · Pull Request #109454 · python/cpython · GitHub
[go: up one dir, main page]

Skip to content

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

Merged
merged 2 commits into from
Sep 15, 2023

Conversation

AlexWaygood
Copy link
Member
@AlexWaygood AlexWaygood commented Sep 15, 2023

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 into Lib/test and then run mypy --config-file regrtest/mypy.ini, mypy reports 23 errors. This PR brings the number of errors reported down to 9.

Copy link
Member Author
@AlexWaygood AlexWaygood left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Some explanatory comments:

Comment on lines 35 to 37
formatted_test_time = "%d:%02d:%02d" % (hours, mins, secs)

line = f"{test_time} {line}"
line = f"{formatted_test_time} {line}"
Copy link
Member Author

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

Copy link
Member

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.

Copy link
Member Author

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

Copy link
Member

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)}")
Copy link
Member Author

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")

Comment on lines -139 to +146
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)
Copy link
Member Author
@AlexWaygood AlexWaygood Sep 15, 2023

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,)
Copy link
Member Author

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.

Copy link
Member
@vstinner vstinner left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM

Comment on lines 35 to 37
formatted_test_time = "%d:%02d:%02d" % (hours, mins, secs)

line = f"{test_time} {line}"
line = f"{formatted_test_time} {line}"
Copy link
Member

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.

@AlexWaygood AlexWaygood enabled auto-merge (squash) September 15, 2023 16:35
@AlexWaygood AlexWaygood merged commit 92ed7e4 into python:main Sep 15, 2023
@AlexWaygood AlexWaygood deleted the regrtest-confusing-vars branch September 15, 2023 17:01
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants
0