@@ -121,10 +121,10 @@ def tearDown(self):
121121 sys .set_lazy_imports_filter (None )
122122 sys .set_lazy_imports ("normal" )
123123
124- def test_global_off (self ):
125- """Mode 'none' should disable lazy imports entirely ."""
126- import test . test_lazy_import . data . global_off
127- self . assertIn ( "test.test_lazy_import.data.basic2" , sys . modules )
124+ def test_global_off_rejected (self ):
125+ """Mode 'none' is not supported ."""
126+ with self . assertRaises ( ValueError ):
127+ sys . set_lazy_imports ( "none" )
128128
129129 def test_global_on (self ):
130130 """Mode 'all' should make regular imports lazy."""
@@ -557,9 +557,6 @@ def test_get_lazy_imports_returns_string(self):
557557 sys .set_lazy_imports ("all" )
558558 self .assertEqual (sys .get_lazy_imports (), "all" )
559559
560- sys .set_lazy_imports ("none" )
561- self .assertEqual (sys .get_lazy_imports (), "none" )
562-
563560 def test_get_lazy_imports_filter_default (self ):
564561 """get_lazy_imports_filter should return None by default."""
565562 sys .set_lazy_imports_filter (None )
@@ -1104,68 +1101,16 @@ def test_cli_lazy_imports_all_makes_regular_imports_lazy(self):
11041101 self .assertEqual (result .returncode , 0 , f"stderr: { result .stderr } " )
11051102 self .assertIn ("LAZY" , result .stdout )
11061103
1107- def test_cli_lazy_imports_none_forces_all_imports_eager (self ):
1108- """-X lazy_imports=none should force all imports to be eager."""
1109- code = textwrap .dedent ("""
1110- import sys
1111- # Even explicit lazy imports should be eager in 'none' mode
1112- lazy import json
1113- if 'json' in sys.modules:
1114- print("EAGER")
1115- else:
1116- print("LAZY")
1117- """ )
1104+ def test_cli_lazy_imports_none_is_rejected (self ):
1105+ """-X lazy_imports=none should be rejected."""
11181106 result = subprocess .run (
1119- [sys .executable , "-X" , "lazy_imports=none" , "-c" , code ],
1107+ [sys .executable , "-X" , "lazy_imports=none" , "-c" , "pass" ],
11201108 capture_output = True ,
11211109 text = True
11221110 )
1123- self .assertEqual (result .returncode , 0 , f"stderr: { result .stderr } " )
1124- self .assertIn ("EAGER" , result .stdout )
1125-
1126- @support .requires_resource ("cpu" )
1127- def test_cli_lazy_imports_modes_import_stdlib_modules (self ):
1128- """-X lazy_imports modes should import available stdlib modules."""
1129- # Do not smoke-test modules with intentional import-time effects.
1130- import_side_effect_modules = {"antigravity" , "this" }
1131- importable = []
1132-
1133- for module in sorted (sys .stdlib_module_names ):
1134- if module in import_side_effect_modules :
1135- continue
1136-
1137- with self .subTest (module = module ):
1138- code = f"import { module } ; print({ module } )"
1139- baseline = subprocess .run (
1140- [sys .executable , "-I" , "-c" , code ],
1141- capture_output = True ,
1142- text = True ,
1143- timeout = 60 ,
1144- )
1145- if baseline .returncode :
1146- # sys.stdlib_module_names includes modules for other
1147- # platforms and optional extension modules not built here.
1148- continue
1149- importable .append (module )
1150-
1151- for mode in ("normal" , "none" ):
1152- with self .subTest (module = module , mode = mode ):
1153- result = subprocess .run (
1154- [
1155- sys .executable ,
1156- "-I" ,
1157- "-X" ,
1158- f"lazy_imports={ mode } " ,
1159- "-c" ,
1160- code ,
1161- ],
1162- capture_output = True ,
1163- text = True ,
1164- timeout = 60 ,
1165- )
1166- self .assertEqual (result .returncode , 0 , result .stderr )
1167-
1168- self .assertGreater (len (importable ), 100 )
1111+ self .assertNotEqual (result .returncode , 0 )
1112+ self .assertIn ("-X lazy_imports: invalid value" , result .stderr )
1113+ self .assertIn ("expected 'all' or 'normal'" , result .stderr )
11691114
11701115 def test_cli_lazy_imports_normal_respects_lazy_keyword_only (self ):
11711116 """-X lazy_imports=normal should respect lazy keyword only."""
@@ -1214,101 +1159,51 @@ def test_env_var_lazy_imports_all_enables_global_lazy(self):
12141159 self .assertEqual (result .returncode , 0 , f"stderr: { result .stderr } " )
12151160 self .assertIn ("LAZY" , result .stdout )
12161161
1217- def test_env_var_lazy_imports_none_disables_all_lazy (self ):
1218- """PYTHON_LAZY_IMPORTS=none should disable all lazy imports."""
1219- code = textwrap .dedent ("""
1220- import sys
1221- lazy import json
1222- if 'json' in sys.modules:
1223- print("EAGER")
1224- else:
1225- print("LAZY")
1226- """ )
1162+ def test_env_var_lazy_imports_none_is_rejected (self ):
1163+ """PYTHON_LAZY_IMPORTS=none should be rejected."""
12271164 import os
12281165 env = os .environ .copy ()
12291166 env ["PYTHON_LAZY_IMPORTS" ] = "none"
12301167 result = subprocess .run (
1231- [sys .executable , "-c" , code ],
1168+ [sys .executable , "-c" , "pass" ],
12321169 capture_output = True ,
12331170 text = True ,
12341171 env = env
12351172 )
1236- self .assertEqual (result .returncode , 0 , f"stderr: { result .stderr } " )
1237- self .assertIn ("EAGER" , result .stdout )
1238-
1239- def test_cli_lazy_imports_none_disables_dunder_lazy_modules (self ):
1240- """-X lazy_imports=none should override __lazy_modules__."""
1241- code = textwrap .dedent ("""
1242- import sys
1243- __lazy_modules__ = ["json"]
1244- import json
1245- if 'json' in sys.modules:
1246- print("EAGER")
1247- else:
1248- print("LAZY")
1249- """ )
1250- result = subprocess .run (
1251- [sys .executable , "-X" , "lazy_imports=none" , "-c" , code ],
1252- capture_output = True ,
1253- text = True ,
1254- )
1255- self .assertEqual (result .returncode , 0 , f"stderr: { result .stderr } " )
1256- self .assertIn ("EAGER" , result .stdout )
1257-
1258- def test_env_var_lazy_imports_none_disables_dunder_lazy_modules (self ):
1259- """PYTHON_LAZY_IMPORTS=none should override __lazy_modules__."""
1260- code = textwrap .dedent ("""
1261- import sys
1262- __lazy_modules__ = ["json"]
1263- import json
1264- if 'json' in sys.modules:
1265- print("EAGER")
1266- else:
1267- print("LAZY")
1268- """ )
1269- import os
1270-
1271- env = os .environ .copy ()
1272- env ["PYTHON_LAZY_IMPORTS" ] = "none"
1273- result = subprocess .run (
1274- [sys .executable , "-c" , code ],
1275- capture_output = True ,
1276- text = True ,
1277- env = env ,
1278- )
1279- self .assertEqual (result .returncode , 0 , f"stderr: { result .stderr } " )
1280- self .assertIn ("EAGER" , result .stdout )
1173+ self .assertNotEqual (result .returncode , 0 )
1174+ self .assertIn ("PYTHON_LAZY_IMPORTS: invalid value" , result .stderr )
1175+ self .assertIn ("expected 'all' or 'normal'" , result .stderr )
12811176
12821177 def test_cli_overrides_env_var (self ):
12831178 """Command-line option should take precedence over environment variable."""
12841179 # PEP 810: -X lazy_imports takes precedence over PYTHON_LAZY_IMPORTS
12851180 code = textwrap .dedent ("""
12861181 import sys
1287- lazy import json
1182+ import json
12881183 if 'json' in sys.modules:
12891184 print("EAGER")
12901185 else:
12911186 print("LAZY")
12921187 """ )
12931188 import os
12941189 env = os .environ .copy ()
1295- env ["PYTHON_LAZY_IMPORTS" ] = "all" # env says all
1190+ env ["PYTHON_LAZY_IMPORTS" ] = "all" # env says all imports are lazy
12961191 result = subprocess .run (
1297- [sys .executable , "-X" , "lazy_imports=none " , "-c" , code ], # CLI says none
1192+ [sys .executable , "-X" , "lazy_imports=normal " , "-c" , code ],
12981193 capture_output = True ,
12991194 text = True ,
13001195 env = env
13011196 )
13021197 self .assertEqual (result .returncode , 0 , f"stderr: { result .stderr } " )
1303- # CLI should win - imports should be eager
1198+ # CLI should win, so a regular import should stay eager.
13041199 self .assertIn ("EAGER" , result .stdout )
13051200
13061201 def test_sys_set_lazy_imports_overrides_cli (self ):
13071202 """sys.set_lazy_imports() should take precedence over CLI option."""
13081203 code = textwrap .dedent ("""
13091204 import sys
1310- sys.set_lazy_imports("none ") # Override CLI
1311- lazy import json
1205+ sys.set_lazy_imports("normal ") # Override CLI
1206+ import json
13121207 if 'json' in sys.modules:
13131208 print("EAGER")
13141209 else:
@@ -2090,9 +1985,10 @@ def tearDown(self):
20901985
20911986 def test_set_matches_sys (self ):
20921987 self .assertEqual (_testcapi .PyImport_GetLazyImportsMode (), sys .get_lazy_imports ())
2093- for mode in ("normal" , "all" , "none" ):
1988+ for mode in ("normal" , "all" ):
20941989 _testcapi .PyImport_SetLazyImportsMode (mode )
20951990 self .assertEqual (_testcapi .PyImport_GetLazyImportsMode (), sys .get_lazy_imports ())
1991+ self .assertRaises (ValueError , _testcapi .PyImport_SetLazyImportsMode , "none" )
20961992
20971993 def test_filter_matches_sys (self ):
20981994 self .assertEqual (_testcapi .PyImport_GetLazyImportsFilter (), sys .get_lazy_imports_filter ())
0 commit comments