@@ -120,10 +120,10 @@ def tearDown(self):
120120 sys .set_lazy_imports_filter (None )
121121 sys .set_lazy_imports ("normal" )
122122
123- def test_global_off (self ):
124- """Mode 'none' should disable lazy imports entirely ."""
125- import test . test_lazy_import . data . global_off
126- self . assertIn ( "test.test_lazy_import.data.basic2" , sys . modules )
123+ def test_global_off_rejected (self ):
124+ """Mode 'none' is not supported ."""
125+ with self . assertRaises ( ValueError ):
126+ sys . set_lazy_imports ( "none" )
127127
128128 def test_global_on (self ):
129129 """Mode 'all' should make regular imports lazy."""
@@ -576,9 +576,6 @@ def test_get_lazy_imports_returns_string(self):
576576 sys .set_lazy_imports ("all" )
577577 self .assertEqual (sys .get_lazy_imports (), "all" )
578578
579- sys .set_lazy_imports ("none" )
580- self .assertEqual (sys .get_lazy_imports (), "none" )
581-
582579 def test_get_lazy_imports_filter_default (self ):
583580 """get_lazy_imports_filter should return None by default."""
584581 sys .set_lazy_imports_filter (None )
@@ -1107,68 +1104,16 @@ def test_cli_lazy_imports_all_makes_regular_imports_lazy(self):
11071104 self .assertEqual (result .returncode , 0 , f"stderr: { result .stderr } " )
11081105 self .assertIn ("LAZY" , result .stdout )
11091106
1110- def test_cli_lazy_imports_none_forces_all_imports_eager (self ):
1111- """-X lazy_imports=none should force all imports to be eager."""
1112- code = textwrap .dedent ("""
1113- import sys
1114- # Even explicit lazy imports should be eager in 'none' mode
1115- lazy import json
1116- if 'json' in sys.modules:
1117- print("EAGER")
1118- else:
1119- print("LAZY")
1120- """ )
1107+ def test_cli_lazy_imports_none_is_rejected (self ):
1108+ """-X lazy_imports=none should be rejected."""
11211109 result = subprocess .run (
1122- [sys .executable , "-X" , "lazy_imports=none" , "-c" , code ],
1110+ [sys .executable , "-X" , "lazy_imports=none" , "-c" , "pass" ],
11231111 capture_output = True ,
11241112 text = True
11251113 )
1126- self .assertEqual (result .returncode , 0 , f"stderr: { result .stderr } " )
1127- self .assertIn ("EAGER" , result .stdout )
1128-
1129- @support .requires_resource ("cpu" )
1130- def test_cli_lazy_imports_modes_import_stdlib_modules (self ):
1131- """-X lazy_imports modes should import available stdlib modules."""
1132- # Do not smoke-test modules with intentional import-time effects.
1133- import_side_effect_modules = {"antigravity" , "this" }
1134- importable = []
1135-
1136- for module in sorted (sys .stdlib_module_names ):
1137- if module in import_side_effect_modules :
1138- continue
1139-
1140- with self .subTest (module = module ):
1141- code = f"import { module } ; print({ module } )"
1142- baseline = subprocess .run (
1143- [sys .executable , "-I" , "-c" , code ],
1144- capture_output = True ,
1145- text = True ,
1146- timeout = 60 ,
1147- )
1148- if baseline .returncode :
1149- # sys.stdlib_module_names includes modules for other
1150- # platforms and optional extension modules not built here.
1151- continue
1152- importable .append (module )
1153-
1154- for mode in ("normal" , "none" ):
1155- with self .subTest (module = module , mode = mode ):
1156- result = subprocess .run (
1157- [
1158- sys .executable ,
1159- "-I" ,
1160- "-X" ,
1161- f"lazy_imports={ mode } " ,
1162- "-c" ,
1163- code ,
1164- ],
1165- capture_output = True ,
1166- text = True ,
1167- timeout = 60 ,
1168- )
1169- self .assertEqual (result .returncode , 0 , result .stderr )
1170-
1171- self .assertGreater (len (importable ), 100 )
1114+ self .assertNotEqual (result .returncode , 0 )
1115+ self .assertIn ("-X lazy_imports: invalid value" , result .stderr )
1116+ self .assertIn ("expected 'all' or 'normal'" , result .stderr )
11721117
11731118 def test_cli_lazy_imports_normal_respects_lazy_keyword_only (self ):
11741119 """-X lazy_imports=normal should respect lazy keyword only."""
@@ -1217,101 +1162,51 @@ def test_env_var_lazy_imports_all_enables_global_lazy(self):
12171162 self .assertEqual (result .returncode , 0 , f"stderr: { result .stderr } " )
12181163 self .assertIn ("LAZY" , result .stdout )
12191164
1220- def test_env_var_lazy_imports_none_disables_all_lazy (self ):
1221- """PYTHON_LAZY_IMPORTS=none should disable all lazy imports."""
1222- code = textwrap .dedent ("""
1223- import sys
1224- lazy import json
1225- if 'json' in sys.modules:
1226- print("EAGER")
1227- else:
1228- print("LAZY")
1229- """ )
1165+ def test_env_var_lazy_imports_none_is_rejected (self ):
1166+ """PYTHON_LAZY_IMPORTS=none should be rejected."""
12301167 import os
12311168 env = os .environ .copy ()
12321169 env ["PYTHON_LAZY_IMPORTS" ] = "none"
12331170 result = subprocess .run (
1234- [sys .executable , "-c" , code ],
1171+ [sys .executable , "-c" , "pass" ],
12351172 capture_output = True ,
12361173 text = True ,
12371174 env = env
12381175 )
1239- self .assertEqual (result .returncode , 0 , f"stderr: { result .stderr } " )
1240- self .assertIn ("EAGER" , result .stdout )
1241-
1242- def test_cli_lazy_imports_none_disables_dunder_lazy_modules (self ):
1243- """-X lazy_imports=none should override __lazy_modules__."""
1244- code = textwrap .dedent ("""
1245- import sys
1246- __lazy_modules__ = ["json"]
1247- import json
1248- if 'json' in sys.modules:
1249- print("EAGER")
1250- else:
1251- print("LAZY")
1252- """ )
1253- result = subprocess .run (
1254- [sys .executable , "-X" , "lazy_imports=none" , "-c" , code ],
1255- capture_output = True ,
1256- text = True ,
1257- )
1258- self .assertEqual (result .returncode , 0 , f"stderr: { result .stderr } " )
1259- self .assertIn ("EAGER" , result .stdout )
1260-
1261- def test_env_var_lazy_imports_none_disables_dunder_lazy_modules (self ):
1262- """PYTHON_LAZY_IMPORTS=none should override __lazy_modules__."""
1263- code = textwrap .dedent ("""
1264- import sys
1265- __lazy_modules__ = ["json"]
1266- import json
1267- if 'json' in sys.modules:
1268- print("EAGER")
1269- else:
1270- print("LAZY")
1271- """ )
1272- import os
1273-
1274- env = os .environ .copy ()
1275- env ["PYTHON_LAZY_IMPORTS" ] = "none"
1276- result = subprocess .run (
1277- [sys .executable , "-c" , code ],
1278- capture_output = True ,
1279- text = True ,
1280- env = env ,
1281- )
1282- self .assertEqual (result .returncode , 0 , f"stderr: { result .stderr } " )
1283- self .assertIn ("EAGER" , result .stdout )
1176+ self .assertNotEqual (result .returncode , 0 )
1177+ self .assertIn ("PYTHON_LAZY_IMPORTS: invalid value" , result .stderr )
1178+ self .assertIn ("expected 'all' or 'normal'" , result .stderr )
12841179
12851180 def test_cli_overrides_env_var (self ):
12861181 """Command-line option should take precedence over environment variable."""
12871182 # PEP 810: -X lazy_imports takes precedence over PYTHON_LAZY_IMPORTS
12881183 code = textwrap .dedent ("""
12891184 import sys
1290- lazy import json
1185+ import json
12911186 if 'json' in sys.modules:
12921187 print("EAGER")
12931188 else:
12941189 print("LAZY")
12951190 """ )
12961191 import os
12971192 env = os .environ .copy ()
1298- env ["PYTHON_LAZY_IMPORTS" ] = "all" # env says all
1193+ env ["PYTHON_LAZY_IMPORTS" ] = "all" # env says all imports are lazy
12991194 result = subprocess .run (
1300- [sys .executable , "-X" , "lazy_imports=none " , "-c" , code ], # CLI says none
1195+ [sys .executable , "-X" , "lazy_imports=normal " , "-c" , code ],
13011196 capture_output = True ,
13021197 text = True ,
13031198 env = env
13041199 )
13051200 self .assertEqual (result .returncode , 0 , f"stderr: { result .stderr } " )
1306- # CLI should win - imports should be eager
1201+ # CLI should win, so a regular import should stay eager.
13071202 self .assertIn ("EAGER" , result .stdout )
13081203
13091204 def test_sys_set_lazy_imports_overrides_cli (self ):
13101205 """sys.set_lazy_imports() should take precedence over CLI option."""
13111206 code = textwrap .dedent ("""
13121207 import sys
1313- sys.set_lazy_imports("none ") # Override CLI
1314- lazy import json
1208+ sys.set_lazy_imports("normal ") # Override CLI
1209+ import json
13151210 if 'json' in sys.modules:
13161211 print("EAGER")
13171212 else:
@@ -2093,9 +1988,10 @@ def tearDown(self):
20931988
20941989 def test_set_matches_sys (self ):
20951990 self .assertEqual (_testcapi .PyImport_GetLazyImportsMode (), sys .get_lazy_imports ())
2096- for mode in ("normal" , "all" , "none" ):
1991+ for mode in ("normal" , "all" ):
20971992 _testcapi .PyImport_SetLazyImportsMode (mode )
20981993 self .assertEqual (_testcapi .PyImport_GetLazyImportsMode (), sys .get_lazy_imports ())
1994+ self .assertRaises (ValueError , _testcapi .PyImport_SetLazyImportsMode , "none" )
20991995
21001996 def test_filter_matches_sys (self ):
21011997 self .assertEqual (_testcapi .PyImport_GetLazyImportsFilter (), sys .get_lazy_imports_filter ())
0 commit comments