mirror of
				https://github.com/python/cpython.git
				synced 2025-10-30 21:21:22 +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) | ||||
|         else: | ||||
|             loader = finder.find_module(fullname) | ||||
|             portions = None | ||||
|             portions = [] | ||||
|         if loader is not None: | ||||
|             return spec_from_loader(fullname, loader) | ||||
|         spec = ModuleSpec(fullname, None) | ||||
|  |  | |||
|  | @ -116,5 +116,29 @@ def test_None_on_sys_path(self): | |||
|         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__': | ||||
|     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, | ||||
|     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, | ||||
|     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,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, | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 Brett Cannon
						Brett Cannon