Skip to content
Merged
Show file tree
Hide file tree
Changes from 2 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion Lib/test/test_cmd_line_script.py
Original file line number Diff line number Diff line change
Expand Up @@ -827,7 +827,7 @@ def test_zipfile_run_filter_syntax_warnings_by_module(self):
'-Werror:::test_pkg.__main__',
os.path.join(zip_name, 'test_pkg')
)
self.assertEqual(err.count(b': SyntaxWarning: '), 12)
self.assertEqual(err.count(b': SyntaxWarning: '), 6)


def tearDownModule():
Expand Down
18 changes: 18 additions & 0 deletions Lib/test/test_zipimport.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@
import time
import unittest
import unittest.mock
import warnings

from test import support
from test.support import import_helper
Expand Down Expand Up @@ -229,6 +230,23 @@ def testPy(self):
files = {TESTMOD + ".py": test_src}
self.doTest(".py", files, TESTMOD)

def test_syntax_warning(self):
files = {TESTMOD + ".py": "x = 1 is 1\n"}
self.makeZip(files)
zi = zipimport.zipimporter(TEMP_ZIP)

with warnings.catch_warnings(record=True) as caught:
warnings.simplefilter("always", SyntaxWarning)
spec = zi.find_spec(TESTMOD)
self.assertIsNotNone(spec)
self.assertEqual(caught, [])

mod = importlib.util.module_from_spec(spec)
spec.loader.exec_module(mod)

self.assertEqual(len(caught), 1)
self.assertIsInstance(caught[0].message, SyntaxWarning)

def testPyc(self):
files = {TESTMOD + pyc_ext: test_pyc}
self.doTest(pyc_ext, files, TESTMOD)
Expand Down
2 changes: 1 addition & 1 deletion Lib/test/test_zipimport_support.py
Original file line number Diff line number Diff line change
Expand Up @@ -253,7 +253,7 @@ def test_import_filter_syntax_warnings_by_module(self):
warnings.filterwarnings('error', module='test_mod')
import test_pkg.test_mod
self.assertEqual(sorted(wm.lineno for wm in wlog),
sorted([4, 7, 10, 13, 14, 21]*2))
[4, 7, 10, 13, 14, 21])
filename = test_pkg.test_mod.__file__
for wm in wlog:
self.assertEqual(wm.filename, filename)
Expand Down
11 changes: 7 additions & 4 deletions Lib/zipimport.py
Original file line number Diff line number Diff line change
Expand Up @@ -163,7 +163,8 @@ def get_filename(self, fullname):
"""
# Deciding the filename requires working out where the code
# would come from if the module was actually loaded
code, ispackage, modpath = _get_module_code(self, fullname)
_, _, modpath = _get_module_code(
self, fullname, compile_source=False)
return modpath


Expand Down Expand Up @@ -793,9 +794,9 @@ def _get_pyc_source(self, path):
return _get_data(self.archive, toc_entry)


# Get the code object associated with the module specified by
# 'fullname'.
def _get_module_code(self, fullname):
# Get the code object associated with the module specified by 'fullname'.
# If compile_source is false, return None for source code without compiling it.
Comment thread
itamaro marked this conversation as resolved.
Resolved
def _get_module_code(self, fullname, *, compile_source=True):
path = _get_module_path(self, fullname)
import_error = None
for suffix, isbytecode, ispackage in _zip_searchorder:
Expand All @@ -815,6 +816,8 @@ def _get_module_code(self, fullname):
except ImportError as exc:
import_error = exc
else:
if not compile_source:
return None, ispackage, modpath
Comment thread
itamaro marked this conversation as resolved.
Resolved
code = _compile_source(modpath, data, fullname)
if code is None:
# bad magic number or non-matching mtime
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
Fix duplicate :exc:`SyntaxWarning` messages when importing source modules
from ZIP archives.
Comment thread
itamaro marked this conversation as resolved.
Resolved
Loading