Commit ecace28e authored by Nick Coghlan's avatar Nick Coghlan

Handle Windows paths and don't double up on HTML header sections in new pydoc URL handler

parent 1eb40bc9
...@@ -2540,7 +2540,7 @@ def _url_handler(url, content_type="text/html"): ...@@ -2540,7 +2540,7 @@ def _url_handler(url, content_type="text/html"):
'<p align=right><font color="#909090" face="helvetica,' '<p align=right><font color="#909090" face="helvetica,'
'arial"><strong>pydoc</strong> by Ka-Ping Yee' 'arial"><strong>pydoc</strong> by Ka-Ping Yee'
'&lt;ping@lfw.org&gt;</font>') '&lt;ping@lfw.org&gt;</font>')
return html.page('Index of Modules', ''.join(contents)) return 'Index of Modules', ''.join(contents)
def html_search(key): def html_search(key):
"""Search results page.""" """Search results page."""
...@@ -2568,11 +2568,11 @@ def _url_handler(url, content_type="text/html"): ...@@ -2568,11 +2568,11 @@ def _url_handler(url, content_type="text/html"):
results.append(bltinlink(name) + desc) results.append(bltinlink(name) + desc)
contents = heading + html.bigsection( contents = heading + html.bigsection(
'key = %s' % key, '#ffffff', '#ee77aa', '<br>'.join(results)) 'key = %s' % key, '#ffffff', '#ee77aa', '<br>'.join(results))
return html.page('Search Results', contents) return 'Search Results', contents
def html_getfile(path): def html_getfile(path):
"""Get and display a source file listing safely.""" """Get and display a source file listing safely."""
path = os.sep + path.replace('%20', ' ') path = path.replace('%20', ' ')
with open(path, 'r') as fp: with open(path, 'r') as fp:
lines = html.escape(fp.read()) lines = html.escape(fp.read())
body = '<pre>%s</pre>' % lines body = '<pre>%s</pre>' % lines
...@@ -2581,7 +2581,7 @@ def _url_handler(url, content_type="text/html"): ...@@ -2581,7 +2581,7 @@ def _url_handler(url, content_type="text/html"):
'#ffffff', '#7799ee') '#ffffff', '#7799ee')
contents = heading + html.bigsection( contents = heading + html.bigsection(
'File: %s' % path, '#ffffff', '#ee77aa', body) 'File: %s' % path, '#ffffff', '#ee77aa', body)
return html.page('getfile %s' % path, contents) return 'getfile %s' % path, contents
def html_topics(): def html_topics():
"""Index of topic texts available.""" """Index of topic texts available."""
...@@ -2597,7 +2597,7 @@ def _url_handler(url, content_type="text/html"): ...@@ -2597,7 +2597,7 @@ def _url_handler(url, content_type="text/html"):
contents = html.multicolumn(names, bltinlink) contents = html.multicolumn(names, bltinlink)
contents = heading + html.bigsection( contents = heading + html.bigsection(
'Topics', '#ffffff', '#ee77aa', contents) 'Topics', '#ffffff', '#ee77aa', contents)
return html.page('Topics', contents) return 'Topics', contents
def html_keywords(): def html_keywords():
"""Index of keywords.""" """Index of keywords."""
...@@ -2612,7 +2612,7 @@ def _url_handler(url, content_type="text/html"): ...@@ -2612,7 +2612,7 @@ def _url_handler(url, content_type="text/html"):
contents = html.multicolumn(names, bltinlink) contents = html.multicolumn(names, bltinlink)
contents = heading + html.bigsection( contents = heading + html.bigsection(
'Keywords', '#ffffff', '#ee77aa', contents) 'Keywords', '#ffffff', '#ee77aa', contents)
return html.page('Keywords', contents) return 'Keywords', contents
def html_topicpage(topic): def html_topicpage(topic):
"""Topic or keyword help page.""" """Topic or keyword help page."""
...@@ -2636,8 +2636,8 @@ def _url_handler(url, content_type="text/html"): ...@@ -2636,8 +2636,8 @@ def _url_handler(url, content_type="text/html"):
xrefs = html.multicolumn(xrefs, bltinlink) xrefs = html.multicolumn(xrefs, bltinlink)
xrefs = html.section('Related help topics: ', xrefs = html.section('Related help topics: ',
'#ffffff', '#ee77aa', xrefs) '#ffffff', '#ee77aa', xrefs)
return html.page('%s %s' % (title, topic), return ('%s %s' % (title, topic),
''.join((heading, contents, xrefs))) ''.join((heading, contents, xrefs)))
def html_error(url): def html_error(url):
heading = html.heading( heading = html.heading(
...@@ -2656,17 +2656,17 @@ def _url_handler(url, content_type="text/html"): ...@@ -2656,17 +2656,17 @@ def _url_handler(url, content_type="text/html"):
title = url title = url
contents = '' contents = ''
if url in ("", ".", "index"): if url in ("", ".", "index"):
contents = html_index() title, contents = html_index()
elif url == "topics": elif url == "topics":
contents = html_topics() title, contents = html_topics()
elif url == "keywords": elif url == "keywords":
contents = html_keywords() title, contents = html_keywords()
elif url.startswith("search?key="): elif url.startswith("search?key="):
contents = html_search(url[11:]) title, contents = html_search(url[11:])
elif url.startswith("getfile?key="): elif url.startswith("getfile?key="):
url = url[12:] url = url[12:]
try: try:
contents = html_getfile(url) title, contents = html_getfile(url)
except IOError: except IOError:
contents = html_error('could not read file %r' % url) contents = html_error('could not read file %r' % url)
title = 'Read Error' title = 'Read Error'
...@@ -2680,7 +2680,7 @@ def _url_handler(url, content_type="text/html"): ...@@ -2680,7 +2680,7 @@ def _url_handler(url, content_type="text/html"):
title = describe(obj) title = describe(obj)
contents = html.document(obj, url) contents = html.document(obj, url)
elif url in Helper.keywords or url in Helper.topics: elif url in Helper.keywords or url in Helper.topics:
contents = html_topicpage(url) title, contents = html_topicpage(url)
else: else:
contents = html_error( contents = html_error(
'no Python documentation found for %r' % url) 'no Python documentation found for %r' % url)
......
...@@ -237,8 +237,10 @@ def print_diffs(text1, text2): ...@@ -237,8 +237,10 @@ def print_diffs(text1, text2):
print('\n' + ''.join(diffs)) print('\n' + ''.join(diffs))
def get_html_title(text): def get_html_title(text):
_, _, text = text.rpartition("<title>") # Bit of hack, but good enough for test purposes
title, _, _ = text.rpartition("</title>") header, _, _ = text.partition("</head>")
_, _, title = header.partition("<title>")
title, _, _ = title.partition("</title>")
return title return title
...@@ -449,7 +451,7 @@ class PyDocUrlHandlerTest(unittest.TestCase): ...@@ -449,7 +451,7 @@ class PyDocUrlHandlerTest(unittest.TestCase):
self.assertEqual(result, title) self.assertEqual(result, title)
path = string.__file__ path = string.__file__
title = "Python: getfile /" + path title = "Python: getfile " + path
url = "getfile?key=" + path url = "getfile?key=" + path
text = pydoc._url_handler(url, "text/html") text = pydoc._url_handler(url, "text/html")
result = get_html_title(text) result = get_html_title(text)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment