summaryrefslogtreecommitdiffstats
path: root/Lib/pydoc.py
diff options
context:
space:
mode:
authorRaymond Hettinger <python@rcn.com>2011-03-25 23:00:13 (GMT)
committerRaymond Hettinger <python@rcn.com>2011-03-25 23:00:13 (GMT)
commit9aa5a34b6b38ef9eec67f80a8f105c8c5a7a9c10 (patch)
tree0a91fce7125acf1fa6ba1605cf5c6ccc291d0a9a /Lib/pydoc.py
parentf9e9a6f403af61c6aead4cfe766fb1efbb058171 (diff)
downloadcpython-9aa5a34b6b38ef9eec67f80a8f105c8c5a7a9c10.zip
cpython-9aa5a34b6b38ef9eec67f80a8f105c8c5a7a9c10.tar.gz
cpython-9aa5a34b6b38ef9eec67f80a8f105c8c5a7a9c10.tar.bz2
Issue #11666: Teach pydoc to display full help for named tuples
Diffstat (limited to 'Lib/pydoc.py')
-rwxr-xr-xLib/pydoc.py21
1 files changed, 12 insertions, 9 deletions
diff --git a/Lib/pydoc.py b/Lib/pydoc.py
index ff9a5f4..8b6f7ee 100755
--- a/Lib/pydoc.py
+++ b/Lib/pydoc.py
@@ -156,7 +156,7 @@ def _split_list(s, predicate):
no.append(x)
return yes, no
-def visiblename(name, all=None):
+def visiblename(name, all=None, obj=None):
"""Decide whether to show documentation on a variable."""
# Certain special names are redundant.
_hidden_names = ('__builtins__', '__doc__', '__file__', '__path__',
@@ -164,6 +164,9 @@ def visiblename(name, all=None):
if name in _hidden_names: return 0
# Private names are hidden, but special names are displayed.
if name.startswith('__') and name.endswith('__'): return 1
+ # Namedtuples have public fields and methods with a single leading underscore
+ if name.startswith('_') and hasattr(obj, '_fields'):
+ return 1
if all is not None:
# only document that which the programmer exported in __all__
return name in all
@@ -627,7 +630,7 @@ class HTMLDoc(Doc):
# if __all__ exists, believe it. Otherwise use old heuristic.
if (all is not None or
(inspect.getmodule(value) or object) is object):
- if visiblename(key, all):
+ if visiblename(key, all, object):
classes.append((key, value))
cdict[key] = cdict[value] = '#' + key
for key, value in classes:
@@ -643,13 +646,13 @@ class HTMLDoc(Doc):
# if __all__ exists, believe it. Otherwise use old heuristic.
if (all is not None or
inspect.isbuiltin(value) or inspect.getmodule(value) is object):
- if visiblename(key, all):
+ if visiblename(key, all, object):
funcs.append((key, value))
fdict[key] = '#-' + key
if inspect.isfunction(value): fdict[value] = fdict[key]
data = []
for key, value in inspect.getmembers(object, isdata):
- if visiblename(key, all):
+ if visiblename(key, all, object):
data.append((key, value))
doc = self.markup(getdoc(object), self.preformat, fdict, cdict)
@@ -773,7 +776,7 @@ class HTMLDoc(Doc):
push('\n')
return attrs
- attrs = filter(lambda data: visiblename(data[0]),
+ attrs = filter(lambda data: visiblename(data[0], obj=object),
classify_class_attrs(object))
mdict = {}
for key, kind, homecls, value in attrs:
@@ -1042,18 +1045,18 @@ class TextDoc(Doc):
# if __all__ exists, believe it. Otherwise use old heuristic.
if (all is not None
or (inspect.getmodule(value) or object) is object):
- if visiblename(key, all):
+ if visiblename(key, all, object):
classes.append((key, value))
funcs = []
for key, value in inspect.getmembers(object, inspect.isroutine):
# if __all__ exists, believe it. Otherwise use old heuristic.
if (all is not None or
inspect.isbuiltin(value) or inspect.getmodule(value) is object):
- if visiblename(key, all):
+ if visiblename(key, all, object):
funcs.append((key, value))
data = []
for key, value in inspect.getmembers(object, isdata):
- if visiblename(key, all):
+ if visiblename(key, all, object):
data.append((key, value))
modpkgs = []
@@ -1186,7 +1189,7 @@ class TextDoc(Doc):
name, mod, maxlen=70, doc=doc) + '\n')
return attrs
- attrs = filter(lambda data: visiblename(data[0]),
+ attrs = filter(lambda data: visiblename(data[0], obj=object),
classify_class_attrs(object))
while attrs:
if mro: