@@ -100,10 +100,10 @@ def tearDown(self):
100100 sys .set_lazy_imports_filter (None )
101101 sys .set_lazy_imports ("normal" )
102102
103- def test_global_off (self ):
104- """Mode 'none' should disable lazy imports entirely ."""
105- import test . test_lazy_import . data . global_off
106- self . assertIn ( "test.test_lazy_import.data.basic2" , sys . modules )
103+ def test_global_off_rejected (self ):
104+ """Mode 'none' is not supported ."""
105+ with self . assertRaises ( ValueError ):
106+ sys . set_lazy_imports ( "none" )
107107
108108 def test_global_on (self ):
109109 """Mode 'all' should make regular imports lazy."""
@@ -468,9 +468,6 @@ def test_get_lazy_imports_returns_string(self):
468468 sys .set_lazy_imports ("all" )
469469 self .assertEqual (sys .get_lazy_imports (), "all" )
470470
471- sys .set_lazy_imports ("none" )
472- self .assertEqual (sys .get_lazy_imports (), "none" )
473-
474471 def test_get_lazy_imports_filter_default (self ):
475472 """get_lazy_imports_filter should return None by default."""
476473 sys .set_lazy_imports_filter (None )
@@ -1015,68 +1012,16 @@ def test_cli_lazy_imports_all_makes_regular_imports_lazy(self):
10151012 self .assertEqual (result .returncode , 0 , f"stderr: { result .stderr } " )
10161013 self .assertIn ("LAZY" , result .stdout )
10171014
1018- def test_cli_lazy_imports_none_forces_all_imports_eager (self ):
1019- """-X lazy_imports=none should force all imports to be eager."""
1020- code = textwrap .dedent ("""
1021- import sys
1022- # Even explicit lazy imports should be eager in 'none' mode
1023- lazy import json
1024- if 'json' in sys.modules:
1025- print("EAGER")
1026- else:
1027- print("LAZY")
1028- """ )
1015+ def test_cli_lazy_imports_none_is_rejected (self ):
1016+ """-X lazy_imports=none should be rejected."""
10291017 result = subprocess .run (
1030- [sys .executable , "-X" , "lazy_imports=none" , "-c" , code ],
1018+ [sys .executable , "-X" , "lazy_imports=none" , "-c" , "pass" ],
10311019 capture_output = True ,
10321020 text = True
10331021 )
1034- self .assertEqual (result .returncode , 0 , f"stderr: { result .stderr } " )
1035- self .assertIn ("EAGER" , result .stdout )
1036-
1037- @support .requires_resource ("cpu" )
1038- def test_cli_lazy_imports_modes_import_stdlib_modules (self ):
1039- """-X lazy_imports modes should import available stdlib modules."""
1040- # Do not smoke-test modules with intentional import-time effects.
1041- import_side_effect_modules = {"antigravity" , "this" }
1042- importable = []
1043-
1044- for module in sorted (sys .stdlib_module_names ):
1045- if module in import_side_effect_modules :
1046- continue
1047-
1048- with self .subTest (module = module ):
1049- code = f"import { module } ; print({ module } )"
1050- baseline = subprocess .run (
1051- [sys .executable , "-I" , "-c" , code ],
1052- capture_output = True ,
1053- text = True ,
1054- timeout = 60 ,
1055- )
1056- if baseline .returncode :
1057- # sys.stdlib_module_names includes modules for other
1058- # platforms and optional extension modules not built here.
1059- continue
1060- importable .append (module )
1061-
1062- for mode in ("normal" , "none" ):
1063- with self .subTest (module = module , mode = mode ):
1064- result = subprocess .run (
1065- [
1066- sys .executable ,
1067- "-I" ,
1068- "-X" ,
1069- f"lazy_imports={ mode } " ,
1070- "-c" ,
1071- code ,
1072- ],
1073- capture_output = True ,
1074- text = True ,
1075- timeout = 60 ,
1076- )
1077- self .assertEqual (result .returncode , 0 , result .stderr )
1078-
1079- self .assertGreater (len (importable ), 100 )
1022+ self .assertNotEqual (result .returncode , 0 )
1023+ self .assertIn ("-X lazy_imports: invalid value" , result .stderr )
1024+ self .assertIn ("expected 'all' or 'normal'" , result .stderr )
10801025
10811026 def test_cli_lazy_imports_normal_respects_lazy_keyword_only (self ):
10821027 """-X lazy_imports=normal should respect lazy keyword only."""
@@ -1125,101 +1070,51 @@ def test_env_var_lazy_imports_all_enables_global_lazy(self):
11251070 self .assertEqual (result .returncode , 0 , f"stderr: { result .stderr } " )
11261071 self .assertIn ("LAZY" , result .stdout )
11271072
1128- def test_env_var_lazy_imports_none_disables_all_lazy (self ):
1129- """PYTHON_LAZY_IMPORTS=none should disable all lazy imports."""
1130- code = textwrap .dedent ("""
1131- import sys
1132- lazy import json
1133- if 'json' in sys.modules:
1134- print("EAGER")
1135- else:
1136- print("LAZY")
1137- """ )
1073+ def test_env_var_lazy_imports_none_is_rejected (self ):
1074+ """PYTHON_LAZY_IMPORTS=none should be rejected."""
11381075 import os
11391076 env = os .environ .copy ()
11401077 env ["PYTHON_LAZY_IMPORTS" ] = "none"
11411078 result = subprocess .run (
1142- [sys .executable , "-c" , code ],
1079+ [sys .executable , "-c" , "pass" ],
11431080 capture_output = True ,
11441081 text = True ,
11451082 env = env
11461083 )
1147- self .assertEqual (result .returncode , 0 , f"stderr: { result .stderr } " )
1148- self .assertIn ("EAGER" , result .stdout )
1149-
1150- def test_cli_lazy_imports_none_disables_dunder_lazy_modules (self ):
1151- """-X lazy_imports=none should override __lazy_modules__."""
1152- code = textwrap .dedent ("""
1153- import sys
1154- __lazy_modules__ = ["json"]
1155- import json
1156- if 'json' in sys.modules:
1157- print("EAGER")
1158- else:
1159- print("LAZY")
1160- """ )
1161- result = subprocess .run (
1162- [sys .executable , "-X" , "lazy_imports=none" , "-c" , code ],
1163- capture_output = True ,
1164- text = True ,
1165- )
1166- self .assertEqual (result .returncode , 0 , f"stderr: { result .stderr } " )
1167- self .assertIn ("EAGER" , result .stdout )
1168-
1169- def test_env_var_lazy_imports_none_disables_dunder_lazy_modules (self ):
1170- """PYTHON_LAZY_IMPORTS=none should override __lazy_modules__."""
1171- code = textwrap .dedent ("""
1172- import sys
1173- __lazy_modules__ = ["json"]
1174- import json
1175- if 'json' in sys.modules:
1176- print("EAGER")
1177- else:
1178- print("LAZY")
1179- """ )
1180- import os
1181-
1182- env = os .environ .copy ()
1183- env ["PYTHON_LAZY_IMPORTS" ] = "none"
1184- result = subprocess .run (
1185- [sys .executable , "-c" , code ],
1186- capture_output = True ,
1187- text = True ,
1188- env = env ,
1189- )
1190- self .assertEqual (result .returncode , 0 , f"stderr: { result .stderr } " )
1191- self .assertIn ("EAGER" , result .stdout )
1084+ self .assertNotEqual (result .returncode , 0 )
1085+ self .assertIn ("PYTHON_LAZY_IMPORTS: invalid value" , result .stderr )
1086+ self .assertIn ("expected 'all' or 'normal'" , result .stderr )
11921087
11931088 def test_cli_overrides_env_var (self ):
11941089 """Command-line option should take precedence over environment variable."""
11951090 # PEP 810: -X lazy_imports takes precedence over PYTHON_LAZY_IMPORTS
11961091 code = textwrap .dedent ("""
11971092 import sys
1198- lazy import json
1093+ import json
11991094 if 'json' in sys.modules:
12001095 print("EAGER")
12011096 else:
12021097 print("LAZY")
12031098 """ )
12041099 import os
12051100 env = os .environ .copy ()
1206- env ["PYTHON_LAZY_IMPORTS" ] = "all" # env says all
1101+ env ["PYTHON_LAZY_IMPORTS" ] = "all" # env says all imports are lazy
12071102 result = subprocess .run (
1208- [sys .executable , "-X" , "lazy_imports=none " , "-c" , code ], # CLI says none
1103+ [sys .executable , "-X" , "lazy_imports=normal " , "-c" , code ],
12091104 capture_output = True ,
12101105 text = True ,
12111106 env = env
12121107 )
12131108 self .assertEqual (result .returncode , 0 , f"stderr: { result .stderr } " )
1214- # CLI should win - imports should be eager
1109+ # CLI should win, so a regular import should stay eager.
12151110 self .assertIn ("EAGER" , result .stdout )
12161111
12171112 def test_sys_set_lazy_imports_overrides_cli (self ):
12181113 """sys.set_lazy_imports() should take precedence over CLI option."""
12191114 code = textwrap .dedent ("""
12201115 import sys
1221- sys.set_lazy_imports("none ") # Override CLI
1222- lazy import json
1116+ sys.set_lazy_imports("normal ") # Override CLI
1117+ import json
12231118 if 'json' in sys.modules:
12241119 print("EAGER")
12251120 else:
@@ -2001,9 +1896,10 @@ def tearDown(self):
20011896
20021897 def test_set_matches_sys (self ):
20031898 self .assertEqual (_testcapi .PyImport_GetLazyImportsMode (), sys .get_lazy_imports ())
2004- for mode in ("normal" , "all" , "none" ):
1899+ for mode in ("normal" , "all" ):
20051900 _testcapi .PyImport_SetLazyImportsMode (mode )
20061901 self .assertEqual (_testcapi .PyImport_GetLazyImportsMode (), sys .get_lazy_imports ())
1902+ self .assertRaises (ValueError , _testcapi .PyImport_SetLazyImportsMode , "none" )
20071903
20081904 def test_filter_matches_sys (self ):
20091905 self .assertEqual (_testcapi .PyImport_GetLazyImportsFilter (), sys .get_lazy_imports_filter ())
0 commit comments