@@ -450,8 +450,9 @@ def testZipImporterMethods(self):
450450
451451 zi = zipimport .zipimporter (TEMP_ZIP )
452452 self .assertEqual (zi .archive , TEMP_ZIP )
453- self .assertEqual (zi .is_package (TESTPACK ), True )
453+ self .assertTrue (zi .is_package (TESTPACK ))
454454
455+ # PEP 302
455456 find_mod = zi .find_module ('spam' )
456457 self .assertIsNotNone (find_mod )
457458 self .assertIsInstance (find_mod , zipimport .zipimporter )
@@ -462,25 +463,39 @@ def testZipImporterMethods(self):
462463 mod = zi .load_module (TESTPACK )
463464 self .assertEqual (zi .get_filename (TESTPACK ), mod .__file__ )
464465
466+ # 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+
465480 existing_pack_path = importlib .import_module (TESTPACK ).__path__ [0 ]
466481 expected_path_path = os .path .join (TEMP_ZIP , TESTPACK )
467482 self .assertEqual (existing_pack_path , expected_path_path )
468483
469- 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 ))
472487
473488 mod_path = packdir2 + TESTMOD
474489 mod_name = module_path_to_dotted_name (mod_path )
475490 mod = importlib .import_module (mod_name )
476491 self .assertTrue (mod_name in sys .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 ))
479494 self .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 ))
484499 self .assertEqual (loader .get_filename (mod_name ), mod .__file__ )
485500
486501 # test prefix and archivepath members
@@ -505,17 +520,22 @@ def testZipImporterMethodsInSubDirectory(self):
505520 zi = zipimport .zipimporter (TEMP_ZIP + os .sep + packdir )
506521 self .assertEqual (zi .archive , TEMP_ZIP )
507522 self .assertEqual (zi .prefix , packdir )
508- self .assertEqual (zi .is_package (TESTPACK2 ), True )
523+ self .assertTrue (zi .is_package (TESTPACK2 ))
524+ # PEP 302
509525 mod = zi .load_module (TESTPACK2 )
510526 self .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__ )
511532
512- 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 ))
516535
517536 pkg_path = TEMP_ZIP + os .sep + packdir + TESTPACK2
518537 zi2 = zipimport .zipimporter (pkg_path )
538+ # PEP 302
519539 find_mod_dotted = zi2 .find_module (TESTMOD )
520540 self .assertIsNotNone (find_mod_dotted )
521541 self .assertIsInstance (find_mod_dotted , zipimport .zipimporter )
@@ -524,17 +544,27 @@ def testZipImporterMethodsInSubDirectory(self):
524544 self .assertEqual (
525545 find_mod_dotted .get_filename (TESTMOD ), load_mod .__file__ )
526546
547+ # 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+
527557 mod_path = TESTPACK2 + os .sep + TESTMOD
528558 mod_name = module_path_to_dotted_name (mod_path )
529559 mod = importlib .import_module (mod_name )
530560 self .assertTrue (mod_name in sys .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 ))
533563 self .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.
536566 loader = mod .__loader__
537- self .assertEqual (loader .get_source (mod_name ), None )
567+ self .assertIsNone (loader .get_source (mod_name ))
538568 self .assertEqual (loader .get_filename (mod_name ), mod .__file__ )
539569
540570 def testGetData (self ):
@@ -655,7 +685,9 @@ def testUnencodable(self):
655685 zinfo = ZipInfo (TESTMOD + ".py" , time .localtime (NOW ))
656686 zinfo .compress_type = self .compression
657687 z .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 )
659691
660692 def testBytesPath (self ):
661693 filename = os_helper .TESTFN + ".zip"
@@ -747,14 +779,17 @@ def _testBogusZipFile(self):
747779
748780 try :
749781 self .assertRaises (TypeError , z .find_module , None )
782+ self .assertRaises (TypeError , z .find_spec , None )
783+ self .assertRaises (TypeError , z .exec_module , None )
750784 self .assertRaises (TypeError , z .load_module , None )
751785 self .assertRaises (TypeError , z .is_package , None )
752786 self .assertRaises (TypeError , z .get_code , None )
753787 self .assertRaises (TypeError , z .get_data , None )
754788 self .assertRaises (TypeError , z .get_source , None )
755789
756790 error = zipimport .ZipImportError
757- self .assertEqual (z .find_module ('abc' ), None )
791+ self .assertIsNone (z .find_module ('abc' ))
792+ self .assertIsNone (z .find_spec ('abc' ))
758793
759794 self .assertRaises (error , z .load_module , 'abc' )
760795 self .assertRaises (error , z .get_code , 'abc' )
0 commit comments