diff options
author | R David Murray <rdmurray@bitdance.com> | 2016-06-03 23:29:18 (GMT) |
---|---|---|
committer | R David Murray <rdmurray@bitdance.com> | 2016-06-03 23:29:18 (GMT) |
commit | 13ee7d15e3073ca1e602c655ede660a9b1dac01e (patch) | |
tree | a3aad5ec8c3d063dd438df83b8ba841acfd8929a /Lib | |
parent | cb835d875edd3b89100be1befdbe30dc7d59346f (diff) | |
parent | ead9bfc5c392951d8f0d8c537a138df672b762e4 (diff) | |
download | cpython-13ee7d15e3073ca1e602c655ede660a9b1dac01e.zip cpython-13ee7d15e3073ca1e602c655ede660a9b1dac01e.tar.gz cpython-13ee7d15e3073ca1e602c655ede660a9b1dac01e.tar.bz2 |
Merge: #16484: Fix pydoc doc links to modules whose names are mixed case.
Diffstat (limited to 'Lib')
-rw-r--r-- | Lib/pydoc.py | 12 | ||||
-rw-r--r-- | Lib/test/test_pydoc.py | 14 |
2 files changed, 20 insertions, 6 deletions
diff --git a/Lib/pydoc.py b/Lib/pydoc.py index 5e5a8ae..85000fe 100644 --- a/Lib/pydoc.py +++ b/Lib/pydoc.py @@ -366,7 +366,7 @@ def safeimport(path, forceload=0, cache={}): class Doc: PYTHONDOCS = os.environ.get("PYTHONDOCS", - "http://docs.python.org/%d.%d/library" + "https://docs.python.org/%d.%d/library" % sys.version_info[:2]) def document(self, object, name=None, *args): @@ -395,7 +395,9 @@ class Doc: docmodule = docclass = docroutine = docother = docproperty = docdata = fail - def getdocloc(self, object): + def getdocloc(self, object, + basedir=os.path.join(sys.base_exec_prefix, "lib", + "python%d.%d" % sys.version_info[:2])): """Return the location of module docs or None""" try: @@ -405,8 +407,6 @@ class Doc: docloc = os.environ.get("PYTHONDOCS", self.PYTHONDOCS) - basedir = os.path.join(sys.base_exec_prefix, "lib", - "python%d.%d" % sys.version_info[:2]) if (isinstance(object, type(os)) and (object.__name__ in ('errno', 'exceptions', 'gc', 'imp', 'marshal', 'posix', 'signal', 'sys', @@ -415,9 +415,9 @@ class Doc: not file.startswith(os.path.join(basedir, 'site-packages')))) and object.__name__ not in ('xml.etree', 'test.pydoc_mod')): if docloc.startswith("http://"): - docloc = "%s/%s" % (docloc.rstrip("/"), object.__name__) + docloc = "%s/%s" % (docloc.rstrip("/"), object.__name__.lower()) else: - docloc = os.path.join(docloc, object.__name__ + ".html") + docloc = os.path.join(docloc, object.__name__.lower() + ".html") else: docloc = None return docloc diff --git a/Lib/test/test_pydoc.py b/Lib/test/test_pydoc.py index 083ba2e..9a357da 100644 --- a/Lib/test/test_pydoc.py +++ b/Lib/test/test_pydoc.py @@ -18,6 +18,7 @@ import types import unittest import urllib.parse import xml.etree +import xml.etree.ElementTree import textwrap from io import StringIO from collections import namedtuple @@ -352,6 +353,14 @@ def get_pydoc_html(module): loc = "<br><a href=\"" + loc + "\">Module Docs</a>" return output.strip(), loc +def get_pydoc_link(module): + "Returns a documentation web link of a module" + dirname = os.path.dirname + basedir = os.path.join(dirname(dirname(__file__))) + doc = pydoc.TextDoc() + loc = doc.getdocloc(module, basedir=basedir) + return loc + def get_pydoc_text(module): "Returns pydoc generated output as text" doc = pydoc.TextDoc() @@ -443,6 +452,11 @@ class PydocDocTest(unittest.TestCase): doc = pydoc.render_doc(BinaryInteger) self.assertIn('<BinaryInteger.zero: 0>', doc) + def test_mixed_case_module_names_are_lower_cased(self): + # issue16484 + doc_link = get_pydoc_link(xml.etree.ElementTree) + self.assertIn('xml.etree.elementtree', doc_link) + def test_issue8225(self): # Test issue8225 to ensure no doc link appears for xml.etree result, doc_loc = get_pydoc_text(xml.etree) |