Skip to content

Commit 06b9110

Browse files
committed
Update sys module to conform with the PEP, add matching C API
1 parent fe526b4 commit 06b9110

File tree

18 files changed

+260
-177
lines changed

18 files changed

+260
-177
lines changed

Doc/c-api/import.rst

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -333,3 +333,40 @@ Importing Modules
333333
strings instead of Python :class:`str` objects.
334334
335335
.. versionadded:: 3.14
336+
337+
.. c:function:: PyImport_LazyImportsMode PyImport_GetLazyImportsMode()
338+
339+
Gets the current lazy imports mode.
340+
341+
.. versionadded:: 3.15
342+
343+
.. c:function:: PyObject* PyImport_GetLazyImportsFilter()
344+
345+
Gets the current lazy imports filter. Returns a new reference.
346+
347+
.. versionadded:: 3.15
348+
349+
.. c:function:: PyObject* PyImport_SetLazyImportsMode(PyImport_LazyImportsMode mode)
350+
351+
Similar to :c:func:`PyImport_ImportModuleAttr`, but names are UTF-8 encoded
352+
strings instead of Python :class:`str` objects.
353+
354+
.. versionadded:: 3.15
355+
356+
.. c:function:: PyObject* PyImport_SetLazyImportsFilter(PyObject *filter)
357+
358+
Sets the current lazy imports filter. The function should be a callable that
359+
will receive (importing_module_name, imported_module_name, [fromlist]) when
360+
an import can potentially be lazy. Returns True if the import should be lazy
361+
or False otherwise.
362+
363+
.. versionadded:: 3.15
364+
365+
.. c:type:: PyImport_LazyImportsMode
366+
367+
Enumeration of possible lazy import modes:
368+
- ``PyImport_LAZY_NORMAL``
369+
- ``PyImport_LAZY_ALL``
370+
- ``PyImport_LAZY_NONE``
371+
372+
.. versionadded:: 3.12

Include/import.h

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -89,14 +89,16 @@ PyAPI_FUNC(int) PyImport_AppendInittab(
8989
);
9090

9191
typedef enum {
92-
PyLazyImportsMode_Default,
93-
PyLazyImportsMode_ForcedOff,
94-
PyLazyImportsMode_ForcedOn,
92+
PyImport_LAZY_NORMAL,
93+
PyImport_LAZY_ALL,
94+
PyImport_LAZY_NONE,
9595
} PyImport_LazyImportsMode;
9696

97-
PyAPI_FUNC(int) PyImport_SetLazyImports(PyImport_LazyImportsMode mode, PyObject *filter);
97+
PyAPI_FUNC(int) PyImport_SetLazyImportsMode(PyImport_LazyImportsMode mode);
98+
PyAPI_FUNC(int) PyImport_SetLazyImportsFilter(PyObject *filter);
9899

99-
PyAPI_FUNC(PyImport_LazyImportsMode) PyImport_LazyImportsEnabled(void);
100+
PyAPI_FUNC(PyImport_LazyImportsMode) PyImport_GetLazyImportsMode(void);
101+
PyAPI_FUNC(PyObject *) PyImport_GetLazyImportsFilter(void);
100102

101103
#ifndef Py_LIMITED_API
102104
# define Py_CPYTHON_IMPORT_H

Include/internal/pycore_global_objects_fini_generated.h

Lines changed: 1 addition & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Include/internal/pycore_global_strings.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -427,6 +427,7 @@ struct _Py_global_strings {
427427
STRUCT_FOR_ID(effective_ids)
428428
STRUCT_FOR_ID(element_factory)
429429
STRUCT_FOR_ID(emptyerror)
430+
STRUCT_FOR_ID(enabled)
430431
STRUCT_FOR_ID(encode)
431432
STRUCT_FOR_ID(encoding)
432433
STRUCT_FOR_ID(end)

Include/internal/pycore_runtime_init_generated.h

Lines changed: 1 addition & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Include/internal/pycore_unicodeobject_generated.h

Lines changed: 4 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Lib/importlib/__init__.py

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -59,8 +59,6 @@
5959

6060
from ._bootstrap import __import__
6161

62-
from _imp import set_lazy_imports
63-
6462

6563
def invalidate_caches():
6664
"""Call the invalidate_caches() method on all meta path finders stored in

Lib/test/test_import/__init__.py

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2548,7 +2548,8 @@ def tearDown(self):
25482548
if key.startswith('test.test_import.data.lazy_imports'):
25492549
del sys.modules[key]
25502550

2551-
importlib.set_lazy_imports(None, None)
2551+
sys.set_lazy_imports_filter(None)
2552+
sys.set_lazy_imports(None)
25522553

25532554
def test_basic_unused(self):
25542555
try:
@@ -2738,7 +2739,7 @@ def test_lazy_try_except_from_star(self):
27382739
import test.test_import.data.lazy_imports.lazy_try_except_from_star
27392740

27402741
def test_try_except_eager(self):
2741-
importlib.set_lazy_imports(True)
2742+
sys.set_lazy_imports(True)
27422743
try:
27432744
import test.test_import.data.lazy_imports.try_except_eager
27442745
except ImportError as e:
@@ -2747,7 +2748,7 @@ def test_try_except_eager(self):
27472748
self.assertTrue("test.test_import.data.lazy_imports.basic2" in sys.modules)
27482749

27492750
def test_try_except_eager_from(self):
2750-
importlib.set_lazy_imports(True)
2751+
sys.set_lazy_imports(True)
27512752
try:
27522753
import test.test_import.data.lazy_imports.try_except_eager_from
27532754
except ImportError as e:
@@ -2759,8 +2760,8 @@ def test_lazy_import_func(self):
27592760
with self.assertRaises(SyntaxError):
27602761
import test.test_import.data.lazy_imports.lazy_import_func
27612762

2762-
def test_eager_import_func(self):
2763-
importlib.set_lazy_imports(True)
2763+
def test_eager_import_func(self):
2764+
sys.set_lazy_imports(True)
27642765
try:
27652766
import test.test_import.data.lazy_imports.eager_import_func
27662767
except ImportError as e:
Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
1-
import importlib
1+
import sys
22

33
def filter(module_name, imported_name, from_list):
44
assert module_name == __name__
55
assert imported_name == "test.test_import.data.lazy_imports.basic2"
66
return False
77

8-
importlib.set_lazy_imports(None, filter)
8+
sys.set_lazy_imports_filter(filter)
99

1010
lazy import test.test_import.data.lazy_imports.basic2 as basic2
Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,11 @@
1-
import importlib
1+
import sys
22

33
def filter(module_name, imported_name, from_list):
44
assert module_name == __name__
55
assert imported_name == "test.test_import.data.lazy_imports.basic2"
66
return True
77

8-
importlib.set_lazy_imports(None, filter)
8+
sys.set_lazy_imports(None)
9+
sys.set_lazy_imports_filter(filter)
910

1011
lazy import test.test_import.data.lazy_imports.basic2 as basic2

0 commit comments

Comments
 (0)