#!/usr/bin/env python """ Simple apigen runner. Usage: runner.py your_python_program [func_name_to_call] """ import sys import py import types from apigen.tracer.tracer import Tracer from apigen.tracer.docstorage import DocStorage from apigen.tracer.docstorage import DocStorageAccessor from apigen.tool.htmlgen import htmlgen, linker, project def build(dsa): class_names = dsa.get_class_names() function_names = dsa.get_function_names() for name in class_names: print "Class: %s" % name for meth in dsa.get_class_methods(name): print " Method: %s" % meth print " ", dsa.get_function_signature(name + "." + meth) def dump(storage): build(DocStorageAccessor(storage)) def process_dict(d, new_d, prefix=""): for k, v in d.items(): if isinstance(v, (types.FunctionType, types.ClassType, types.MethodType)): if hasattr(v, '__dict__'): process_dict(v.__dict__, new_d, prefix=prefix + k + ".") new_d[prefix + k] = v def _main(argv): if len(argv) < 2 or len(argv) > 3: print __doc__ sys.exit(1) docstorage = DocStorage() mod = py.path.local(argv[1]).pyimport() d = mod.__dict__.copy() del d['__builtins__'] new_d = {} process_dict(d, new_d) docstorage.from_dict(new_d) tracer = Tracer(docstorage) tracer.start() try: if len(argv) == 3: getattr(mod, argv[2])() finally: tracer.end() dump(docstorage) if __name__ == '__main__': _main(sys.argv)