diff -r 6b2f703a38c2 Lib/pydoc.py --- a/Lib/pydoc.py Sun Jan 20 15:50:05 2008 +0100 +++ b/Lib/pydoc.py Sun Jan 20 16:40:11 2008 +0100 @@ -1052,9 +1052,11 @@ class TextDoc(Doc): if visiblename(key, all): data.append((key, value)) + modpkgs = [] + modpkgs_names = set() if hasattr(object, '__path__'): - modpkgs = [] for importer, modname, ispkg in pkgutil.iter_modules(object.__path__): + modpkgs_names.add(modname) if ispkg: modpkgs.append(modname + ' (package)') else: @@ -1063,6 +1065,16 @@ class TextDoc(Doc): modpkgs.sort() result = result + self.section( 'PACKAGE CONTENTS', join(modpkgs, '\n')) + + # Detect submodules as sometimes created by C extensions + submodules = [] + for key, value in inspect.getmembers(object, inspect.ismodule): + if value.__name__.startswith(name + '.') and key not in modpkgs_names: + submodules.append(key) + if submodules: + submodules.sort() + result = result + self.section( + 'SUBMODULES', join(submodules, '\n')) if classes: classlist = map(lambda (key, value): value, classes) diff -r 6b2f703a38c2 Lib/test/pydocfodder.py --- a/Lib/test/pydocfodder.py Sun Jan 20 15:50:05 2008 +0100 +++ b/Lib/test/pydocfodder.py Sun Jan 20 16:40:11 2008 +0100 @@ -1,4 +1,6 @@ """Something just to look at via pydoc.""" + +import types class A_classic: "A classic class." @@ -208,3 +210,8 @@ class FunkyProperties(object): del inst.desc[self.attr] x = property(get_desc('x'), set_desc('x'), del_desc('x'), 'prop x') + + +submodule = types.ModuleType(__name__ + '.submodule', + """A submodule, which should appear in its parent's summary""") +