gh-128030: Avoid error from PyModule_GetFilenameObject for non-module (#128047)

I missed the extra `PyModule_Check` in #127660 because I was looking at
3.12 as the base implementation for import from. This meant that I
missed the `PyModuleCheck` introduced in #112661.
This commit is contained in:
Shantanu 2024-12-20 00:22:26 -08:00 committed by GitHub
parent daa260ebb1
commit 45e6dd63b8
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
3 changed files with 25 additions and 1 deletions

View file

@ -851,6 +851,29 @@ from os import this_will_never_exist
stdout, stderr = popen.communicate()
self.assertIn(expected_error, stdout)
def test_non_module_from_import_error(self):
prefix = """
import sys
class NotAModule: ...
nm = NotAModule()
nm.symbol = 123
sys.modules["not_a_module"] = nm
from not_a_module import symbol
"""
scripts = [
prefix + "from not_a_module import missing_symbol",
prefix + "nm.__spec__ = []\nfrom not_a_module import missing_symbol",
]
for script in scripts:
with self.subTest(script=script):
expected_error = (
b"ImportError: cannot import name 'missing_symbol' from "
b"'<unknown module name>' (unknown location)"
)
popen = script_helper.spawn_python("-c", script)
stdout, stderr = popen.communicate()
self.assertIn(expected_error, stdout)
def test_script_shadowing_stdlib(self):
script_errors = [
(