diff options
author | Martin Panter <vadmium+py@gmail.com> | 2015-11-06 00:51:38 (GMT) |
---|---|---|
committer | Martin Panter <vadmium+py@gmail.com> | 2015-11-06 00:51:38 (GMT) |
commit | 98da9d0e0de8300e1362aacb213e450c977d28dc (patch) | |
tree | 910b479dfe85ebc23dc32630c47a3bd7452c4a8f | |
parent | 7931be403d6f616777e4a46cf43ee0bd21374889 (diff) | |
parent | 9ad0aae6566311c6982a20955381cda5a2954519 (diff) | |
download | cpython-98da9d0e0de8300e1362aacb213e450c977d28dc.zip cpython-98da9d0e0de8300e1362aacb213e450c977d28dc.tar.gz cpython-98da9d0e0de8300e1362aacb213e450c977d28dc.tar.bz2 |
Issue #18010: Merge pydoc web search fix from 3.4 into 3.5
-rwxr-xr-x | Lib/pydoc.py | 4 | ||||
-rw-r--r-- | Lib/test/test_pydoc.py | 38 | ||||
-rw-r--r-- | Misc/NEWS | 3 |
3 files changed, 38 insertions, 7 deletions
diff --git a/Lib/pydoc.py b/Lib/pydoc.py index ee558bf..a9c04f0 100755 --- a/Lib/pydoc.py +++ b/Lib/pydoc.py @@ -2359,7 +2359,9 @@ def _url_handler(url, content_type="text/html"): 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): diff --git a/Lib/test/test_pydoc.py b/Lib/test/test_pydoc.py index ec5c31b..8ad5706 100644 --- a/Lib/test/test_pydoc.py +++ b/Lib/test/test_pydoc.py @@ -396,6 +396,13 @@ class PydocBaseTest(unittest.TestCase): 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 @@ class PydocImportTest(PydocBaseTest): 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(). @@ -880,16 +910,12 @@ class PydocUrlHandlerTest(PydocBaseTest): 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): @@ -54,6 +54,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 #25510: fileinput.FileInput.readline() now returns b'' instead of '' |