summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEric Snow <ericsnowcurrently@gmail.com>2013-08-14 18:03:34 -0600
committerEric Snow <ericsnowcurrently@gmail.com>2013-08-14 18:03:34 -0600
commit7491f1726ba3a5f78beddca2280f9141d559ff1c (patch)
treea272bd5852fe3662a81dfc78481f6aa88a68a870
parente76c0393a8dc35af38d6d2af2827f405a7ef6116 (diff)
downloadcpython-git-7491f1726ba3a5f78beddca2280f9141d559ff1c.tar.gz
issue #18698: ensure importlib.reload() returns the module out of sys.modules.
-rw-r--r--Lib/imp.py4
-rw-r--r--Lib/test/test_imp.py17
-rw-r--r--Misc/NEWS2
3 files changed, 22 insertions, 1 deletions
diff --git a/Lib/imp.py b/Lib/imp.py
index 34b6c542e1..30c343f62e 100644
--- a/Lib/imp.py
+++ b/Lib/imp.py
@@ -268,7 +268,9 @@ def reload(module):
if parent_name and parent_name not in sys.modules:
msg = "parent {!r} not in sys.modules"
raise ImportError(msg.format(parent_name), name=parent_name)
- return module.__loader__.load_module(name)
+ module.__loader__.load_module(name)
+ # The module may have replaced itself in sys.modules!
+ return sys.modules[module.__name__]
finally:
try:
del _RELOADING[name]
diff --git a/Lib/test/test_imp.py b/Lib/test/test_imp.py
index 3fb119bfc3..bf29e424d2 100644
--- a/Lib/test/test_imp.py
+++ b/Lib/test/test_imp.py
@@ -5,6 +5,7 @@ import os.path
import shutil
import sys
from test import support
+from test.test_importlib import util
import unittest
import warnings
@@ -285,6 +286,22 @@ class ReloadTests(unittest.TestCase):
with self.assertRaisesRegex(ImportError, 'html'):
imp.reload(parser)
+ def test_module_replaced(self):
+ # see #18698
+ def code():
+ module = type(sys)('top_level')
+ module.spam = 3
+ sys.modules['top_level'] = module
+ mock = util.mock_modules('top_level',
+ module_code={'top_level': code})
+ with mock:
+ with util.import_state(meta_path=[mock]):
+ module = importlib.import_module('top_level')
+ reloaded = imp.reload(module)
+ actual = sys.modules['top_level']
+ self.assertEqual(actual.spam, 3)
+ self.assertEqual(reloaded.spam, 3)
+
class PEP3147Tests(unittest.TestCase):
"""Tests of PEP 3147."""
diff --git a/Misc/NEWS b/Misc/NEWS
index 7a4491aa3a..0dd2d1099b 100644
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -202,6 +202,8 @@ Library
- Issue #17269: Workaround for socket.getaddrinfo crash on MacOS X
with port None or "0" and flags AI_NUMERICSERV.
+- Issue #18698: Ensure imp.reload() returns the module out of sys.modules.
+
- Issue #18080: When building a C extension module on OS X, if the compiler
is overriden with the CC environment variable, use the new compiler as
the default for linking if LDSHARED is not also overriden. This restores