bpo-42131: Add PEP 451-related methods to zipimport (GH-23187) · python/cpython@d2e94bb

GitHub

@@ -450,8 +450,9 @@ def testZipImporterMethods(self):

450450451451zi=zipimport.zipimporter(TEMP_ZIP)

452452self.assertEqual(zi.archive, TEMP_ZIP)

453-self.assertEqual(zi.is_package(TESTPACK), True)

453+self.assertTrue(zi.is_package(TESTPACK))

454454455+# PEP 302

455456find_mod=zi.find_module('spam')

456457self.assertIsNotNone(find_mod)

457458self.assertIsInstance(find_mod, zipimport.zipimporter)

@@ -462,25 +463,39 @@ def testZipImporterMethods(self):

462463mod=zi.load_module(TESTPACK)

463464self.assertEqual(zi.get_filename(TESTPACK), mod.__file__)

464465466+# PEP 451

467+spec=zi.find_spec('spam')

468+self.assertIsNotNone(spec)

469+self.assertIsInstance(spec.loader, zipimport.zipimporter)

470+self.assertFalse(spec.loader.is_package('spam'))

471+exec_mod=importlib.util.module_from_spec(spec)

472+spec.loader.exec_module(exec_mod)

473+self.assertEqual(spec.loader.get_filename('spam'), exec_mod.__file__)

474+475+spec=zi.find_spec(TESTPACK)

476+mod=importlib.util.module_from_spec(spec)

477+spec.loader.exec_module(mod)

478+self.assertEqual(zi.get_filename(TESTPACK), mod.__file__)

479+465480existing_pack_path=importlib.import_module(TESTPACK).__path__[0]

466481expected_path_path=os.path.join(TEMP_ZIP, TESTPACK)

467482self.assertEqual(existing_pack_path, expected_path_path)

468483469-self.assertEqual(zi.is_package(packdir+'__init__'), False)

470-self.assertEqual(zi.is_package(packdir+TESTPACK2), True)

471-self.assertEqual(zi.is_package(packdir2+TESTMOD), False)

484+self.assertFalse(zi.is_package(packdir+'__init__'))

485+self.assertTrue(zi.is_package(packdir+TESTPACK2))

486+self.assertFalse(zi.is_package(packdir2+TESTMOD))

472487473488mod_path=packdir2+TESTMOD

474489mod_name=module_path_to_dotted_name(mod_path)

475490mod=importlib.import_module(mod_name)

476491self.assertTrue(mod_nameinsys.modules)

477-self.assertEqual(zi.get_source(TESTPACK), None)

478-self.assertEqual(zi.get_source(mod_path), None)

492+self.assertIsNone(zi.get_source(TESTPACK))

493+self.assertIsNone(zi.get_source(mod_path))

479494self.assertEqual(zi.get_filename(mod_path), mod.__file__)

480495# To pass in the module name instead of the path, we must use the

481496# right importer

482-loader=mod.__loader__

483-self.assertEqual(loader.get_source(mod_name), None)

497+loader=mod.__spec__.loader

498+self.assertIsNone(loader.get_source(mod_name))

484499self.assertEqual(loader.get_filename(mod_name), mod.__file__)

485500486501# test prefix and archivepath members

@@ -505,17 +520,22 @@ def testZipImporterMethodsInSubDirectory(self):

505520zi=zipimport.zipimporter(TEMP_ZIP+os.sep+packdir)

506521self.assertEqual(zi.archive, TEMP_ZIP)

507522self.assertEqual(zi.prefix, packdir)

508-self.assertEqual(zi.is_package(TESTPACK2), True)

523+self.assertTrue(zi.is_package(TESTPACK2))

524+# PEP 302

509525mod=zi.load_module(TESTPACK2)

510526self.assertEqual(zi.get_filename(TESTPACK2), mod.__file__)

527+# PEP 451

528+spec=zi.find_spec(TESTPACK2)

529+mod=importlib.util.module_from_spec(spec)

530+spec.loader.exec_module(mod)

531+self.assertEqual(spec.loader.get_filename(TESTPACK2), mod.__file__)

511532512-self.assertEqual(

513-zi.is_package(TESTPACK2+os.sep+'__init__'), False)

514-self.assertEqual(

515-zi.is_package(TESTPACK2+os.sep+TESTMOD), False)

533+self.assertFalse(zi.is_package(TESTPACK2+os.sep+'__init__'))

534+self.assertFalse(zi.is_package(TESTPACK2+os.sep+TESTMOD))

516535517536pkg_path=TEMP_ZIP+os.sep+packdir+TESTPACK2

518537zi2=zipimport.zipimporter(pkg_path)

538+# PEP 302

519539find_mod_dotted=zi2.find_module(TESTMOD)

520540self.assertIsNotNone(find_mod_dotted)

521541self.assertIsInstance(find_mod_dotted, zipimport.zipimporter)

@@ -524,17 +544,27 @@ def testZipImporterMethodsInSubDirectory(self):

524544self.assertEqual(

525545find_mod_dotted.get_filename(TESTMOD), load_mod.__file__)

526546547+# PEP 451

548+spec=zi2.find_spec(TESTMOD)

549+self.assertIsNotNone(spec)

550+self.assertIsInstance(spec.loader, zipimport.zipimporter)

551+self.assertFalse(spec.loader.is_package(TESTMOD))

552+load_mod=importlib.util.module_from_spec(spec)

553+spec.loader.exec_module(load_mod)

554+self.assertEqual(

555+spec.loader.get_filename(TESTMOD), load_mod.__file__)

556+527557mod_path=TESTPACK2+os.sep+TESTMOD

528558mod_name=module_path_to_dotted_name(mod_path)

529559mod=importlib.import_module(mod_name)

530560self.assertTrue(mod_nameinsys.modules)

531-self.assertEqual(zi.get_source(TESTPACK2), None)

532-self.assertEqual(zi.get_source(mod_path), None)

561+self.assertIsNone(zi.get_source(TESTPACK2))

562+self.assertIsNone(zi.get_source(mod_path))

533563self.assertEqual(zi.get_filename(mod_path), mod.__file__)

534564# To pass in the module name instead of the path, we must use the

535565# right importer.

536566loader=mod.__loader__

537-self.assertEqual(loader.get_source(mod_name), None)

567+self.assertIsNone(loader.get_source(mod_name))

538568self.assertEqual(loader.get_filename(mod_name), mod.__file__)

539569540570deftestGetData(self):

@@ -655,7 +685,9 @@ def testUnencodable(self):

655685zinfo=ZipInfo(TESTMOD+".py", time.localtime(NOW))

656686zinfo.compress_type=self.compression

657687z.writestr(zinfo, test_src)

658-zipimport.zipimporter(filename).load_module(TESTMOD)

688+spec=zipimport.zipimporter(filename).find_spec(TESTMOD)

689+mod=importlib.util.module_from_spec(spec)

690+spec.loader.exec_module(mod)

659691660692deftestBytesPath(self):

661693filename=os_helper.TESTFN+".zip"

@@ -747,14 +779,17 @@ def _testBogusZipFile(self):

747779748780try:

749781self.assertRaises(TypeError, z.find_module, None)

782+self.assertRaises(TypeError, z.find_spec, None)

783+self.assertRaises(TypeError, z.exec_module, None)

750784self.assertRaises(TypeError, z.load_module, None)

751785self.assertRaises(TypeError, z.is_package, None)

752786self.assertRaises(TypeError, z.get_code, None)

753787self.assertRaises(TypeError, z.get_data, None)

754788self.assertRaises(TypeError, z.get_source, None)

755789756790error=zipimport.ZipImportError

757-self.assertEqual(z.find_module('abc'), None)

791+self.assertIsNone(z.find_module('abc'))

792+self.assertIsNone(z.find_spec('abc'))

758793759794self.assertRaises(error, z.load_module, 'abc')

760795self.assertRaises(error, z.get_code, 'abc')