From 8441f15626998df7881f49223948b7e6fef18c08 Mon Sep 17 00:00:00 2001 From: Georg Brandl Date: Tue, 13 Mar 2007 20:02:57 +0000 Subject: [PATCH] Patch #1530482: add pydoc.render_doc() which returns the documentation for a thing instead of paging it to stdout, which pydoc.doc() does. --- Lib/pydoc.py | 48 ++++++++++++++++++++++++++---------------------- Misc/NEWS | 3 +++ 2 files changed, 29 insertions(+), 22 deletions(-) diff --git a/Lib/pydoc.py b/Lib/pydoc.py index 8435175d5e0..d7c0d000195 100755 --- a/Lib/pydoc.py +++ b/Lib/pydoc.py @@ -1461,31 +1461,35 @@ def resolve(thing, forceload=0): else: 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): """Display text documentation, given an object or a path to an object.""" try: - 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' - pager(title % desc + '\n\n' + text.document(object, name)) + pager(render_doc(thing, title, forceload)) except (ImportError, ErrorDuringImport), value: print value diff --git a/Misc/NEWS b/Misc/NEWS index ee4b538a8ab..634ada1e1de 100644 --- a/Misc/NEWS +++ b/Misc/NEWS @@ -168,6 +168,9 @@ Core and builtins 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 strings for the code to time and the setup code. Also added two convenience functions for instantiating a Timer and calling its methods.