id,summary,reporter,owner,description,type,status,priority,component,severity,resolution,keywords,cc,release 141,Show only specific modules,Noah Kantrowitz,Alec Thomas,"Here is the diff for this. Its a very ugly hack, but it does work. Configuration is via the {{{show}}} parameter in trac.ini. {{{ #!diff --- tracpydoc/tracpydoc.py (revision 361) +++ tracpydoc/tracpydoc.py (working copy) @@ -7,6 +7,8 @@ from trac.util import escape, shorten_line from trac.wiki.api import IWikiSyntaxProvider, IWikiMacroProvider from trac.Search import ISearchSource +import inspect, os +from pydoc import ispackage try: from trac.util import Markup @@ -45,6 +47,43 @@ def __init__(self, env): self.env = env + def index(self, dir, shadowed=None, show=None): + """"""Generate an HTML index for a directory of modules."""""" + modpkgs = [] + if shadowed is None: shadowed = {} + seen = {} + files = os.listdir(dir) + + def found(name, ispackage, + modpkgs=modpkgs, shadowed=shadowed, seen=seen): + if name not in seen: + modpkgs.append((name, '', ispackage, name in shadowed)) + seen[name] = 1 + shadowed[name] = 1 + + # Package spam/__init__.py takes precedence over module spam.py. + for file in files: + path = os.path.join(dir, file) + if show: + if ispackage(path) and file in show: found(file, 1) + else: + if ispackage(path): found(file, 1) + for file in files: + path = os.path.join(dir, file) + if os.path.isfile(path): + modname = inspect.getmodulename(file) + if show: + if modname and modname in show: found(modname, 0) + else: + if modname: found(modname, 0) + + modpkgs.sort() + contents = self.multicolumn(modpkgs, self.modpkglink) + if modpkgs: + return self.bigsection(dir, '#ffffff', '#ee77aa', contents) + else: + return '' + def modulelink(self, obj): return '%s' % \ (self.env.href.pydoc(obj.__name__), obj.__name__) @@ -104,6 +143,10 @@ syspath.split(os.pathsep)] else: self.syspath = sys.path + + self.show = self.config.get('pydoc', 'show', None) + if self.show: self.show = [p.rstrip('.*') for p in self.show.split()] + show_private = self.config.get('pydoc', 'show_private', '') self.show_private = [p.rstrip('.*') for p in show_private.split()] self.makedoc_lock = threading.Lock() @@ -161,7 +204,7 @@ doc = '