mirror of
				https://github.com/python/cpython.git
				synced 2025-10-31 13:41:24 +00:00 
			
		
		
		
	Issue #20763: Fix importlib.machinery.PathFinder to support
PathEntryFinder instances which only define find_module(). Reported by Yukihiro Nakadaira.
This commit is contained in:
		
							parent
							
								
									d44cebb0f5
								
							
						
					
					
						commit
						26dd0ff075
					
				
					 3 changed files with 26 additions and 2 deletions
				
			
		|  | @ -1869,7 +1869,7 @@ def _legacy_get_spec(cls, fullname, finder): | ||||||
|             loader, portions = finder.find_loader(fullname) |             loader, portions = finder.find_loader(fullname) | ||||||
|         else: |         else: | ||||||
|             loader = finder.find_module(fullname) |             loader = finder.find_module(fullname) | ||||||
|             portions = None |             portions = [] | ||||||
|         if loader is not None: |         if loader is not None: | ||||||
|             return spec_from_loader(fullname, loader) |             return spec_from_loader(fullname, loader) | ||||||
|         spec = ModuleSpec(fullname, None) |         spec = ModuleSpec(fullname, None) | ||||||
|  |  | ||||||
|  | @ -116,5 +116,29 @@ def test_None_on_sys_path(self): | ||||||
|         FinderTests, importlib=importlib, machinery=machinery) |         FinderTests, importlib=importlib, machinery=machinery) | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
|  | class PathEntryFinderTests: | ||||||
|  | 
 | ||||||
|  |     def test_finder_with_failing_find_module(self): | ||||||
|  |         # PathEntryFinder with find_module() defined should work. | ||||||
|  |         # Issue #20763. | ||||||
|  |         class Finder: | ||||||
|  |             path_location = 'test_finder_with_find_module' | ||||||
|  |             def __init__(self, path): | ||||||
|  |                 if path != self.path_location: | ||||||
|  |                     raise ImportError | ||||||
|  | 
 | ||||||
|  |             @staticmethod | ||||||
|  |             def find_module(fullname): | ||||||
|  |                 return None | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  |         with util.import_state(path=[Finder.path_location]+sys.path[:], | ||||||
|  |                                path_hooks=[Finder]): | ||||||
|  |             self.machinery.PathFinder.find_spec('importlib') | ||||||
|  | 
 | ||||||
|  | Frozen_PEFTests, Source_PEFTests = util.test_both( | ||||||
|  |         PathEntryFinderTests, machinery=machinery) | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
| if __name__ == '__main__': | if __name__ == '__main__': | ||||||
|     unittest.main() |     unittest.main() | ||||||
|  |  | ||||||
|  | @ -3365,7 +3365,7 @@ const unsigned char _Py_M__importlib[] = { | ||||||
|     116,0,0,124,2,0,100,1,0,131,2,0,114,39,0,124, |     116,0,0,124,2,0,100,1,0,131,2,0,114,39,0,124, | ||||||
|     2,0,106,1,0,124,1,0,131,1,0,92,2,0,125,3, |     2,0,106,1,0,124,1,0,131,1,0,92,2,0,125,3, | ||||||
|     0,125,4,0,110,21,0,124,2,0,106,2,0,124,1,0, |     0,125,4,0,110,21,0,124,2,0,106,2,0,124,1,0, | ||||||
|     131,1,0,125,3,0,100,0,0,125,4,0,124,3,0,100, |     131,1,0,125,3,0,103,0,0,125,4,0,124,3,0,100, | ||||||
|     0,0,107,9,0,114,85,0,116,3,0,124,1,0,124,3, |     0,0,107,9,0,114,85,0,116,3,0,124,1,0,124,3, | ||||||
|     0,131,2,0,83,116,4,0,124,1,0,100,0,0,131,2, |     0,131,2,0,83,116,4,0,124,1,0,100,0,0,131,2, | ||||||
|     0,125,5,0,124,4,0,124,5,0,95,5,0,124,5,0, |     0,125,5,0,124,4,0,124,5,0,95,5,0,124,5,0, | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 Brett Cannon
						Brett Cannon