Skip to content

gh-104415: Fix refleak tests for typing.ByteString deprecation - #104416

Merged
JelleZijlstra merged 2 commits into
python:mainfrom
sobolevn:issue-104415
May 12, 2023
Merged

JelleZijlstra merged 2 commits into
python:mainfrom
sobolevn:issue-104415

Conversation

@sobolevn

@sobolevn sobolevn commented May 12, 2023 •

Copy link
Copy Markdown
Member

It passes now! 🎉

@bedevere-bot bedevere-bot added the tests Tests in the Lib/test dir label May 12, 2023
@sobolevn sobolevn added skip news 🔨 test-with-refleak-buildbots Test PR w/ refleak buildbots; report in status section labels May 12, 2023
@bedevere-bot

ghost commented May 12, 2023

Copy link
Copy Markdown

🤖 New build scheduled with the buildbot fleet by @sobolevn for commit e8f6c3d 🤖

If you want to schedule another build, you need to add the 🔨 test-with-refleak-buildbots label again.

@bedevere-bot bedevere-bot removed the 🔨 test-with-refleak-buildbots Test PR w/ refleak buildbots; report in status section label May 12, 2023

ghost left a comment •

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Looks good; I can reproduce the refleak locally, and confirmed this fixes it. So I'm happy to merge this to get the buildbots green again. Thanks!

I'm slightly confused about why this is necessary, though: I thought the warnings registry was cleared in the clear_caches function here:

def clear_caches():
# Clear the warnings registry, so they can be displayed again
for mod in sys.modules.values():
if hasattr(mod, '__warningregistry__'):
del mod.__warningregistry__

And that clear_caches was called after each run when using the -R option:

# Clear caches
clear_caches()

ghost left a comment •

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

The root cause is that we cache ByteString in globals() here:

cpython/Lib/typing.py

Lines 3584 to 3586 in b2c1b4d

ByteString = globals()["ByteString"] = _DeprecatedGenericAlias(
collections.abc.ByteString, 0, removal_version=(3, 14)
)

But libregrtest.utils.clear_caches doesn't know about that cache. It only knows to perform the cleanup functions we have in typing._cleanups:

try:
typing = sys.modules['typing']
except KeyError:
pass
else:
for f in typing._cleanups:
f()

A better fix would be to do this instead:

diff --git a/Lib/typing.py b/Lib/typing.py
index bf7bd24197..cc38ef9b46 100644
--- a/Lib/typing.py
+++ b/Lib/typing.py
@@ -3586,3 +3586,13 @@ def __getattr__(attr):
             )
         return ByteString
     raise AttributeError(f"module 'typing' has no attribute {attr!r}")
+
+
+def _remove_ByteString_from_globals():
+    try:
+        del globals()["ByteString"]
+    except KeyError:
+        pass
+
+
+_cleanups.append(_remove_ByteString_from_globals)

And not touch anything in test_typing.py.

@bedevere-bot

ghost commented May 12, 2023

Copy link
Copy Markdown

A Python core developer has requested some changes be made to your pull request before we can consider merging it. If you could please address their requests along with any other requests in other reviews from core developers that would be appreciated.

Once you have made the requested changes, please leave a comment on this pull request containing the phrase I have made the requested changes; please review again. I will then notify any core developers who have left a review that you're ready for them to take another look at this pull request.

ghost left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Thanks!

@AlexWaygood

ghost commented May 12, 2023

Copy link
Copy Markdown
Member

I'll run the refleak buildbots again, just to double check this fixes things (it does on my machine)

@AlexWaygood AlexWaygood added the 🔨 test-with-refleak-buildbots Test PR w/ refleak buildbots; report in status section label May 12, 2023
@bedevere-bot

ghost commented May 12, 2023

Copy link
Copy Markdown

🤖 New build scheduled with the buildbot fleet by @AlexWaygood for commit 023a615 🤖

If you want to schedule another build, you need to add the 🔨 test-with-refleak-buildbots label again.

@bedevere-bot bedevere-bot removed the 🔨 test-with-refleak-buildbots Test PR w/ refleak buildbots; report in status section label May 12, 2023
@JelleZijlstra
JelleZijlstra merged commit 5b8cd5a into python:main May 12, 2023
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

skip news tests Tests in the Lib/test dir

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants