mirror of
https://github.com/python/cpython.git
synced 2025-08-22 09:45:06 +00:00
Issue #18010: Merge pydoc web search fix from 3.4 into 3.5
This commit is contained in:
commit
98da9d0e0d
3 changed files with 38 additions and 7 deletions
|
@ -2359,7 +2359,9 @@ def _url_handler(url, content_type="text/html"):
|
||||||
|
|
||||||
with warnings.catch_warnings():
|
with warnings.catch_warnings():
|
||||||
warnings.filterwarnings('ignore') # ignore problems during import
|
warnings.filterwarnings('ignore') # ignore problems during import
|
||||||
ModuleScanner().run(callback, key)
|
def onerror(modname):
|
||||||
|
pass
|
||||||
|
ModuleScanner().run(callback, key, onerror=onerror)
|
||||||
|
|
||||||
# format page
|
# format page
|
||||||
def bltinlink(name):
|
def bltinlink(name):
|
||||||
|
|
|
@ -396,6 +396,13 @@ class PydocBaseTest(unittest.TestCase):
|
||||||
finally:
|
finally:
|
||||||
pkgutil.walk_packages = walk_packages
|
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):
|
class PydocDocTest(unittest.TestCase):
|
||||||
|
|
||||||
|
@ -704,6 +711,29 @@ class PydocImportTest(PydocBaseTest):
|
||||||
finally:
|
finally:
|
||||||
os.chmod(pkgdir, current_mode)
|
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)')
|
@unittest.skip('causes undesireable side-effects (#20128)')
|
||||||
def test_modules(self):
|
def test_modules(self):
|
||||||
# See Helper.listmodules().
|
# See Helper.listmodules().
|
||||||
|
@ -880,16 +910,12 @@ class PydocUrlHandlerTest(PydocBaseTest):
|
||||||
|
|
||||||
with self.restrict_walk_packages():
|
with self.restrict_walk_packages():
|
||||||
for url, title in requests:
|
for url, title in requests:
|
||||||
text = pydoc._url_handler(url, "text/html")
|
self.call_url_handler(url, title)
|
||||||
result = get_html_title(text)
|
|
||||||
self.assertEqual(result, title, text)
|
|
||||||
|
|
||||||
path = string.__file__
|
path = string.__file__
|
||||||
title = "Pydoc: getfile " + path
|
title = "Pydoc: getfile " + path
|
||||||
url = "getfile?key=" + path
|
url = "getfile?key=" + path
|
||||||
text = pydoc._url_handler(url, "text/html")
|
self.call_url_handler(url, title)
|
||||||
result = get_html_title(text)
|
|
||||||
self.assertEqual(result, title)
|
|
||||||
|
|
||||||
|
|
||||||
class TestHelper(unittest.TestCase):
|
class TestHelper(unittest.TestCase):
|
||||||
|
|
|
@ -54,6 +54,9 @@ Core and Builtins
|
||||||
Library
|
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 #25554: Got rid of circular references in regular expression parsing.
|
||||||
|
|
||||||
- Issue #25510: fileinput.FileInput.readline() now returns b'' instead of ''
|
- Issue #25510: fileinput.FileInput.readline() now returns b'' instead of ''
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue