diff --git a/py/apigen/layout.py b/py/apigen/layout.py index a786252cb..9e509f143 100644 --- a/py/apigen/layout.py +++ b/py/apigen/layout.py @@ -31,12 +31,15 @@ class LayoutPage(confrest.PyPage): self.body.insert(0, self.nav) def update_menubar_links(self, node): + docrelpath = py.std.os.environ.get('APIGEN_DOCRELPATH', '../py/doc') + if not docrelpath.endswith('/'): + docrelpath += '/' for item in node: if not isinstance(item, py.xml.Tag): continue if (item.__class__.__name__ == 'a' and hasattr(item.attr, 'href') and not item.attr.href.startswith('http://')): - item.attr.href = self.relpath + '../py/doc/' + item.attr.href + item.attr.href = self.relpath + docrelpath + item.attr.href def setup_scripts_styles(self, copyto=None): for path, name in self.stylesheets: diff --git a/py/bin/_docgen.py b/py/bin/_docgen.py new file mode 100755 index 000000000..c32df3136 --- /dev/null +++ b/py/bin/_docgen.py @@ -0,0 +1,59 @@ +#!/usr/bin/env python + +""" quick tool to get documentation + apigen docs generated + + given a certain targetpath, apigen docs will be placed in 'apigen', + + user can choose to only build either docs or apigen docs: in this case, + the navigation bar will be adjusted +""" + +from _findpy import py +import py +pypath = py.__package__.getpath() + +def run_tests(path, envvars='', args=''): + pytestpath = pypath.join('bin/py.test') + cmd = ('PYTHONPATH="%s" %s python "%s" %s "%s"' % + (pypath.dirpath(), envvars, pytestpath, args, path)) + print cmd + py.process.cmdexec(cmd) + +def build_apigen_docs(targetpath, testargs=''): + run_tests(pypath, + 'APIGEN_TARGET="%s/apigen" APIGEN_DOCRELPATH="../doc/"' % ( + targetpath,), + testargs + ' --apigen="%s/apigen/apigen.py"' % (pypath,)) + +def build_docs(targetpath, testargs): + docpath = pypath.join('doc') + run_tests(docpath, '', + testargs + ' --forcegen --apigenrelpath="../apigen/"') + topath = targetpath.ensure('doc', dir=True) + docpath.copy(topath) + +def build_nav(targetpath, docs=True, api=True): + pass + +def build(targetpath, docs=True, api=True, testargs=''): + targetpath.ensure(dir=True) + if docs: + print 'building docs' + build_docs(targetpath, testargs) + if api: + print 'building api' + build_apigen_docs(targetpath, testargs) + +if __name__ == '__main__': + import sys + if len(sys.argv) == 1: + print 'usage: %s [options]' + print + print ' targetdir: a path to a directory (created if it doesn\'t' + print ' exist) where the docs are put' + print ' options: options passed to py.test when running the tests' + sys.exit(1) + targetpath = py.path.local(sys.argv[1]) + args = ' '.join(sys.argv[2:]) + build(targetpath, True, True, args) +