#16484: Fix pydoc doc links to modules whose names are mixed case.
Patch by Sean Rodman, test by Kaushik N.
This commit is contained in:
parent
369826a879
commit
ead9bfc5c3
12
Lib/pydoc.py
12
Lib/pydoc.py
|
@ -354,7 +354,7 @@ def safeimport(path, forceload=0, cache={}):
|
||||||
class Doc:
|
class Doc:
|
||||||
|
|
||||||
PYTHONDOCS = os.environ.get("PYTHONDOCS",
|
PYTHONDOCS = os.environ.get("PYTHONDOCS",
|
||||||
"http://docs.python.org/%d.%d/library"
|
"https://docs.python.org/%d.%d/library"
|
||||||
% sys.version_info[:2])
|
% sys.version_info[:2])
|
||||||
|
|
||||||
def document(self, object, name=None, *args):
|
def document(self, object, name=None, *args):
|
||||||
|
@ -383,7 +383,9 @@ class Doc:
|
||||||
|
|
||||||
docmodule = docclass = docroutine = docother = docproperty = docdata = fail
|
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"""
|
"""Return the location of module docs or None"""
|
||||||
|
|
||||||
try:
|
try:
|
||||||
|
@ -393,8 +395,6 @@ class Doc:
|
||||||
|
|
||||||
docloc = os.environ.get("PYTHONDOCS", self.PYTHONDOCS)
|
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
|
if (isinstance(object, type(os)) and
|
||||||
(object.__name__ in ('errno', 'exceptions', 'gc', 'imp',
|
(object.__name__ in ('errno', 'exceptions', 'gc', 'imp',
|
||||||
'marshal', 'posix', 'signal', 'sys',
|
'marshal', 'posix', 'signal', 'sys',
|
||||||
|
@ -403,9 +403,9 @@ class Doc:
|
||||||
not file.startswith(os.path.join(basedir, 'site-packages')))) and
|
not file.startswith(os.path.join(basedir, 'site-packages')))) and
|
||||||
object.__name__ not in ('xml.etree', 'test.pydoc_mod')):
|
object.__name__ not in ('xml.etree', 'test.pydoc_mod')):
|
||||||
if docloc.startswith("http://"):
|
if docloc.startswith("http://"):
|
||||||
docloc = "%s/%s" % (docloc.rstrip("/"), object.__name__)
|
docloc = "%s/%s" % (docloc.rstrip("/"), object.__name__.lower())
|
||||||
else:
|
else:
|
||||||
docloc = os.path.join(docloc, object.__name__ + ".html")
|
docloc = os.path.join(docloc, object.__name__.lower() + ".html")
|
||||||
else:
|
else:
|
||||||
docloc = None
|
docloc = None
|
||||||
return docloc
|
return docloc
|
||||||
|
|
|
@ -18,6 +18,7 @@ import types
|
||||||
import unittest
|
import unittest
|
||||||
import urllib.parse
|
import urllib.parse
|
||||||
import xml.etree
|
import xml.etree
|
||||||
|
import xml.etree.ElementTree
|
||||||
import textwrap
|
import textwrap
|
||||||
from io import StringIO
|
from io import StringIO
|
||||||
from collections import namedtuple
|
from collections import namedtuple
|
||||||
|
@ -352,6 +353,14 @@ def get_pydoc_html(module):
|
||||||
loc = "<br><a href=\"" + loc + "\">Module Docs</a>"
|
loc = "<br><a href=\"" + loc + "\">Module Docs</a>"
|
||||||
return output.strip(), loc
|
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):
|
def get_pydoc_text(module):
|
||||||
"Returns pydoc generated output as text"
|
"Returns pydoc generated output as text"
|
||||||
doc = pydoc.TextDoc()
|
doc = pydoc.TextDoc()
|
||||||
|
@ -443,6 +452,11 @@ class PydocDocTest(unittest.TestCase):
|
||||||
doc = pydoc.render_doc(BinaryInteger)
|
doc = pydoc.render_doc(BinaryInteger)
|
||||||
self.assertIn('<BinaryInteger.zero: 0>', doc)
|
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):
|
def test_issue8225(self):
|
||||||
# Test issue8225 to ensure no doc link appears for xml.etree
|
# Test issue8225 to ensure no doc link appears for xml.etree
|
||||||
result, doc_loc = get_pydoc_text(xml.etree)
|
result, doc_loc = get_pydoc_text(xml.etree)
|
||||||
|
|
Loading…
Reference in New Issue