dir() doesn't reify module

This commit is contained in:
Dino Viehland 2025-10-07 14:52:23 -07:00
parent e5e9592863
commit aa85f9d79e
3 changed files with 27 additions and 1 deletions

View file

@ -2558,6 +2558,25 @@ def test_basic_unused(self):
self.assertFalse("test.test_import.data.lazy_imports.basic2" in sys.modules)
def test_basic_unused_dir(self):
try:
import test.test_import.data.lazy_imports.basic_unused
except ImportError as e:
self.fail('lazy import failed')
x = dir(test.test_import.data.lazy_imports.basic_unused)
self.assertIn("test", x)
self.assertFalse("test.test_import.data.lazy_imports.basic2" in sys.modules)
def test_basic_dir(self):
try:
from test.test_import.data.lazy_imports import basic_dir
except ImportError as e:
self.fail('lazy import failed')
self.assertIn("test", basic_dir.x)
self.assertFalse("test.test_import.data.lazy_imports.basic2" in sys.modules)
def test_basic_used(self):
try:
import test.test_import.data.lazy_imports.basic_used

View file

@ -0,0 +1,2 @@
lazy import test.test_import.data.lazy_imports.basic2
x = dir()

View file

@ -1259,7 +1259,12 @@ static PyObject *
module_dir(PyObject *self, PyObject *args)
{
PyObject *result = NULL;
PyObject *dict = PyObject_GetAttr(self, &_Py_ID(__dict__));
PyObject *dict;
if (PyModule_CheckExact(self)) {
dict = Py_NewRef(((PyModuleObject *)self)->md_dict);
} else {
dict = PyObject_GetAttr(self, &_Py_ID(__dict__));
}
if (dict != NULL) {
if (PyDict_Check(dict)) {