Skip to content

Commit aa85f9d

Browse files
committed
dir() doesn't reify module
1 parent e5e9592 commit aa85f9d

File tree

3 files changed

+27
-1
lines changed

3 files changed

+27
-1
lines changed

Lib/test/test_import/__init__.py

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2558,6 +2558,25 @@ def test_basic_unused(self):
25582558

25592559
self.assertFalse("test.test_import.data.lazy_imports.basic2" in sys.modules)
25602560

2561+
def test_basic_unused_dir(self):
2562+
try:
2563+
import test.test_import.data.lazy_imports.basic_unused
2564+
except ImportError as e:
2565+
self.fail('lazy import failed')
2566+
2567+
x = dir(test.test_import.data.lazy_imports.basic_unused)
2568+
self.assertIn("test", x)
2569+
self.assertFalse("test.test_import.data.lazy_imports.basic2" in sys.modules)
2570+
2571+
def test_basic_dir(self):
2572+
try:
2573+
from test.test_import.data.lazy_imports import basic_dir
2574+
except ImportError as e:
2575+
self.fail('lazy import failed')
2576+
2577+
self.assertIn("test", basic_dir.x)
2578+
self.assertFalse("test.test_import.data.lazy_imports.basic2" in sys.modules)
2579+
25612580
def test_basic_used(self):
25622581
try:
25632582
import test.test_import.data.lazy_imports.basic_used
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
lazy import test.test_import.data.lazy_imports.basic2
2+
x = dir()

Objects/moduleobject.c

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1259,7 +1259,12 @@ static PyObject *
12591259
module_dir(PyObject *self, PyObject *args)
12601260
{
12611261
PyObject *result = NULL;
1262-
PyObject *dict = PyObject_GetAttr(self, &_Py_ID(__dict__));
1262+
PyObject *dict;
1263+
if (PyModule_CheckExact(self)) {
1264+
dict = Py_NewRef(((PyModuleObject *)self)->md_dict);
1265+
} else {
1266+
dict = PyObject_GetAttr(self, &_Py_ID(__dict__));
1267+
}
12631268

12641269
if (dict != NULL) {
12651270
if (PyDict_Check(dict)) {

0 commit comments

Comments
 (0)