mirror of
				https://github.com/python/cpython.git
				synced 2025-10-30 21:21:22 +00:00 
			
		
		
		
	Closes issue #18698: ensure importlib.reload() returns the module out of sys.modules.
This commit is contained in:
		
							parent
							
								
									01dbca0b06
								
							
						
					
					
						commit
						8e4554027b
					
				
					 3 changed files with 21 additions and 1 deletions
				
			
		|  | @ -118,7 +118,9 @@ def reload(module): | ||||||
|         if parent_name and parent_name not in sys.modules: |         if parent_name and parent_name not in sys.modules: | ||||||
|             msg = "parent {!r} not in sys.modules" |             msg = "parent {!r} not in sys.modules" | ||||||
|             raise ImportError(msg.format(parent_name), name=parent_name) |             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: |     finally: | ||||||
|         try: |         try: | ||||||
|             del _RELOADING[name] |             del _RELOADING[name] | ||||||
|  |  | ||||||
|  | @ -162,6 +162,22 @@ def test_reload_modules(self): | ||||||
|                     module = importlib.import_module(mod) |                     module = importlib.import_module(mod) | ||||||
|                     importlib.reload(module) |                     importlib.reload(module) | ||||||
| 
 | 
 | ||||||
|  |     def test_module_replaced(self): | ||||||
|  |         def code(): | ||||||
|  |             import sys | ||||||
|  |             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 = importlib.reload(module) | ||||||
|  |                 actual = sys.modules['top_level'] | ||||||
|  |                 self.assertEqual(actual.spam, 3) | ||||||
|  |                 self.assertEqual(reloaded.spam, 3) | ||||||
|  | 
 | ||||||
| 
 | 
 | ||||||
| class InvalidateCacheTests(unittest.TestCase): | class InvalidateCacheTests(unittest.TestCase): | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -203,6 +203,8 @@ Core and Builtins | ||||||
| 
 | 
 | ||||||
| - Issue #17867: Raise an ImportError if __import__ is not found in __builtins__. | - Issue #17867: Raise an ImportError if __import__ is not found in __builtins__. | ||||||
| 
 | 
 | ||||||
|  | - Issue #18698: Ensure importlib.reload() returns the module out of sys.modules. | ||||||
|  | 
 | ||||||
| - Issue #17857: Prevent build failures with pre-3.5.0 versions of sqlite3, | - Issue #17857: Prevent build failures with pre-3.5.0 versions of sqlite3, | ||||||
|   such as was shipped with Centos 5 and Mac OS X 10.4. |   such as was shipped with Centos 5 and Mac OS X 10.4. | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 Eric Snow
						Eric Snow