Commit 107a39bd authored by Georg Brandl's avatar Georg Brandl

Patch #1530482: add pydoc.render_doc() which returns the documentation

for a thing instead of paging it to stdout, which pydoc.doc() does.
parent 75880dd2
...@@ -1461,31 +1461,35 @@ def resolve(thing, forceload=0): ...@@ -1461,31 +1461,35 @@ def resolve(thing, forceload=0):
else: else:
return thing, getattr(thing, '__name__', None) return thing, getattr(thing, '__name__', None)
def render_doc(thing, title='Python Library Documentation: %s', forceload=0):
"""Render text documentation, given an object or a path to an object."""
object, name = resolve(thing, forceload)
desc = describe(object)
module = inspect.getmodule(object)
if name and '.' in name:
desc += ' in ' + name[:name.rfind('.')]
elif module and module is not object:
desc += ' in module ' + module.__name__
if type(object) is _OLD_INSTANCE_TYPE:
# If the passed object is an instance of an old-style class,
# document its available methods instead of its value.
object = object.__class__
elif not (inspect.ismodule(object) or
inspect.isclass(object) or
inspect.isroutine(object) or
inspect.isgetsetdescriptor(object) or
inspect.ismemberdescriptor(object) or
isinstance(object, property)):
# If the passed object is a piece of data or an instance,
# document its available methods instead of its value.
object = type(object)
desc += ' object'
return title % desc + '\n\n' + text.document(object, name)
def doc(thing, title='Python Library Documentation: %s', forceload=0): def doc(thing, title='Python Library Documentation: %s', forceload=0):
"""Display text documentation, given an object or a path to an object.""" """Display text documentation, given an object or a path to an object."""
try: try:
object, name = resolve(thing, forceload) pager(render_doc(thing, title, forceload))
desc = describe(object)
module = inspect.getmodule(object)
if name and '.' in name:
desc += ' in ' + name[:name.rfind('.')]
elif module and module is not object:
desc += ' in module ' + module.__name__
if type(object) is _OLD_INSTANCE_TYPE:
# If the passed object is an instance of an old-style class,
# document its available methods instead of its value.
object = object.__class__
elif not (inspect.ismodule(object) or
inspect.isclass(object) or
inspect.isroutine(object) or
inspect.isgetsetdescriptor(object) or
inspect.ismemberdescriptor(object) or
isinstance(object, property)):
# If the passed object is a piece of data or an instance,
# document its available methods instead of its value.
object = type(object)
desc += ' object'
pager(title % desc + '\n\n' + text.document(object, name))
except (ImportError, ErrorDuringImport), value: except (ImportError, ErrorDuringImport), value:
print value print value
......
...@@ -168,6 +168,9 @@ Core and builtins ...@@ -168,6 +168,9 @@ Core and builtins
Library Library
------- -------
- Patch #1530482: add pydoc.render_doc() which returns the documentation
for a thing instead of paging it to stdout, which pydoc.doc() does.
- Patch #1533909: the timeit module now accepts callables in addition to - Patch #1533909: the timeit module now accepts callables in addition to
strings for the code to time and the setup code. Also added two strings for the code to time and the setup code. Also added two
convenience functions for instantiating a Timer and calling its methods. convenience functions for instantiating a Timer and calling its methods.
......
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