mirror of
				https://github.com/python/cpython.git
				synced 2025-10-31 13:41:24 +00:00 
			
		
		
		
	Issue #18010: Merge pydoc web search fix from 3.5
This commit is contained in:
		
						commit
						e2e0deec45
					
				
					 3 changed files with 38 additions and 7 deletions
				
			
		|  | @ -2370,7 +2370,9 @@ def callback(path, modname, desc): | |||
| 
 | ||||
|         with warnings.catch_warnings(): | ||||
|             warnings.filterwarnings('ignore') # ignore problems during import | ||||
|             ModuleScanner().run(callback, key) | ||||
|             def onerror(modname): | ||||
|                 pass | ||||
|             ModuleScanner().run(callback, key, onerror=onerror) | ||||
| 
 | ||||
|         # format page | ||||
|         def bltinlink(name): | ||||
|  |  | |||
|  | @ -396,6 +396,13 @@ def restrict_walk_packages(self, path=None): | |||
|         finally: | ||||
|             pkgutil.walk_packages = walk_packages | ||||
| 
 | ||||
|     def call_url_handler(self, url, expected_title): | ||||
|         text = pydoc._url_handler(url, "text/html") | ||||
|         result = get_html_title(text) | ||||
|         # Check the title to ensure an unexpected error page was not returned | ||||
|         self.assertEqual(result, expected_title, text) | ||||
|         return text | ||||
| 
 | ||||
| 
 | ||||
| class PydocDocTest(unittest.TestCase): | ||||
| 
 | ||||
|  | @ -704,6 +711,29 @@ def test_apropos_empty_doc(self): | |||
|         finally: | ||||
|             os.chmod(pkgdir, current_mode) | ||||
| 
 | ||||
|     def test_url_search_package_error(self): | ||||
|         # URL handler search should cope with packages that raise exceptions | ||||
|         pkgdir = os.path.join(TESTFN, "test_error_package") | ||||
|         os.mkdir(pkgdir) | ||||
|         init = os.path.join(pkgdir, "__init__.py") | ||||
|         with open(init, "wt", encoding="ascii") as f: | ||||
|             f.write("""raise ValueError("ouch")\n""") | ||||
|         with self.restrict_walk_packages(path=[TESTFN]): | ||||
|             # Package has to be importable for the error to have any effect | ||||
|             saved_paths = tuple(sys.path) | ||||
|             sys.path.insert(0, TESTFN) | ||||
|             try: | ||||
|                 with self.assertRaisesRegex(ValueError, "ouch"): | ||||
|                     import test_error_package  # Sanity check | ||||
| 
 | ||||
|                 text = self.call_url_handler("search?key=test_error_package", | ||||
|                     "Pydoc: Search Results") | ||||
|                 found = ('<a href="test_error_package.html">' | ||||
|                     'test_error_package</a>') | ||||
|                 self.assertIn(found, text) | ||||
|             finally: | ||||
|                 sys.path[:] = saved_paths | ||||
| 
 | ||||
|     @unittest.skip('causes undesireable side-effects (#20128)') | ||||
|     def test_modules(self): | ||||
|         # See Helper.listmodules(). | ||||
|  | @ -896,16 +926,12 @@ def test_url_requests(self): | |||
| 
 | ||||
|         with self.restrict_walk_packages(): | ||||
|             for url, title in requests: | ||||
|                 text = pydoc._url_handler(url, "text/html") | ||||
|                 result = get_html_title(text) | ||||
|                 self.assertEqual(result, title, text) | ||||
|                 self.call_url_handler(url, title) | ||||
| 
 | ||||
|             path = string.__file__ | ||||
|             title = "Pydoc: getfile " + path | ||||
|             url = "getfile?key=" + path | ||||
|             text = pydoc._url_handler(url, "text/html") | ||||
|             result = get_html_title(text) | ||||
|             self.assertEqual(result, title) | ||||
|             self.call_url_handler(url, title) | ||||
| 
 | ||||
| 
 | ||||
| class TestHelper(unittest.TestCase): | ||||
|  |  | |||
|  | @ -72,6 +72,9 @@ Core and Builtins | |||
| Library | ||||
| ------- | ||||
| 
 | ||||
| - Issue #18010: Fix the pydoc web server's module search function to handle | ||||
|   exceptions from importing packages. | ||||
| 
 | ||||
| - Issue #25554: Got rid of circular references in regular expression parsing. | ||||
| 
 | ||||
| - Issue #18973: Command-line interface of the calendar module now uses argparse | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 Martin Panter
						Martin Panter