mirror of
https://github.com/python/cpython.git
synced 2025-08-01 07:33:08 +00:00
bpo-44061: Fix pkgutil.iter_modules regression when passed a pathlib.Path object (GH-25964) (GH-26052)
Co-authored-by: Miguel Brito <5544985+miguendes@users.noreply.github.com>
This commit is contained in:
parent
6c190b5ae5
commit
0cb9775a85
3 changed files with 49 additions and 0 deletions
|
@ -1,3 +1,4 @@
|
|||
from pathlib import Path
|
||||
from test.support import run_unittest, unload, check_warnings, CleanImport
|
||||
import unittest
|
||||
import sys
|
||||
|
@ -90,6 +91,45 @@ class PkgutilTests(unittest.TestCase):
|
|||
|
||||
del sys.modules[pkg]
|
||||
|
||||
def test_issue44061_iter_modules(self):
|
||||
#see: issue44061
|
||||
zip = 'test_getdata_zipfile.zip'
|
||||
pkg = 'test_getdata_zipfile'
|
||||
|
||||
# Include a LF and a CRLF, to test that binary data is read back
|
||||
RESOURCE_DATA = b'Hello, world!\nSecond line\r\nThird line'
|
||||
|
||||
# Make a package with some resources
|
||||
zip_file = os.path.join(self.dirname, zip)
|
||||
z = zipfile.ZipFile(zip_file, 'w')
|
||||
|
||||
# Empty init.py
|
||||
z.writestr(pkg + '/__init__.py', "")
|
||||
# Resource files, res.txt
|
||||
z.writestr(pkg + '/res.txt', RESOURCE_DATA)
|
||||
z.close()
|
||||
|
||||
# Check we can read the resources
|
||||
sys.path.insert(0, zip_file)
|
||||
try:
|
||||
res = pkgutil.get_data(pkg, 'res.txt')
|
||||
self.assertEqual(res, RESOURCE_DATA)
|
||||
|
||||
# make sure iter_modules accepts Path objects
|
||||
names = []
|
||||
for moduleinfo in pkgutil.iter_modules([Path(zip_file)]):
|
||||
self.assertIsInstance(moduleinfo, pkgutil.ModuleInfo)
|
||||
names.append(moduleinfo.name)
|
||||
self.assertEqual(names, [pkg])
|
||||
finally:
|
||||
del sys.path[0]
|
||||
sys.modules.pop(pkg, None)
|
||||
|
||||
# assert path must be None or list of paths
|
||||
expected_msg = "path must be None or list of paths to look for modules in"
|
||||
with self.assertRaisesRegex(ValueError, expected_msg):
|
||||
list(pkgutil.iter_modules("invalid_path"))
|
||||
|
||||
def test_unreadable_dir_on_syspath(self):
|
||||
# issue7367 - walk_packages failed if unreadable dir on sys.path
|
||||
package_name = "unreadable_package"
|
||||
|
@ -571,6 +611,12 @@ class ImportlibMigrationTests(unittest.TestCase):
|
|||
self.assertIsNone(pkgutil.get_importer("*??"))
|
||||
self.assertEqual(len(w.warnings), 0)
|
||||
|
||||
def test_issue44061(self):
|
||||
try:
|
||||
pkgutil.get_importer(Path("/home"))
|
||||
except AttributeError:
|
||||
self.fail("Unexpected AttributeError when calling get_importer")
|
||||
|
||||
def test_iter_importers_avoids_emulation(self):
|
||||
with check_warnings() as w:
|
||||
for importer in pkgutil.iter_importers(): pass
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue