#!/usr/bin/env python import types from os.path import join from inspect import getsource, getmembers, isclass, isfunction, ismethod, ismodule from importlib import import_module root="./build/api" # autopath from os.path import dirname, abspath, join, normpath import sys HERE = dirname(abspath(__file__)) PATH = normpath(join(HERE, '..', '..')) if PATH not in sys.path: sys.path.insert(1, PATH) htmltmpl = """ <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> <html> <head> <title>{title}</title> <meta http-equiv="content-type" content="text/html; charset=UTF-8"> <meta http-equiv="content-type" content="application/xhtml+xml; charset=UTF-8"> <meta http-equiv="content-style-type" content="text/css"> <meta http-equiv="expires" content="0"> </head> <body> <pre> {content} </pre> </body> </html> """ def write_source(name, content): fh = file(join(root, name)+'.html', 'w') fh.write(format_html(name, content)) fh.close() def format_html(title, content): return htmltmpl.format(title=title, content=content) def parse_module(module): module = import_module(module) write_source(module.__name__, getsource(module)) # classes = [(cls, value) for cls, value in getattr(module, '__dict__').items() if value == types.ClassType] classes = getmembers(module, isclass) for name, obj in classes: write_source(module.__name__ + '.' + name, getsource(obj)) # methods = [(meth, value) for meth, value in getattr(obj, '__dict__').items() if type(value) == types.MethodType] methods = getmembers(obj, ismethod) for meth, value in methods: write_source(module.__name__ + '.' + name + '.' + meth, getsource(value)) #functions = [(func, value) for func, value in getattr(module, '__dict__').items() if type(value) == types.FunctionType] functions = getmembers(module, isfunction) for name, obj in functions: write_source(module.__name__ + '.' + name, getsource(obj)) def process_modules(): from glob import glob from os.path import abspath, dirname, normpath, splitext, basename here = abspath(__file__) directory = dirname(here) pyfiles = glob(normpath(join(directory, '..', '*.py'))) for pyf in pyfiles: pyf = splitext(basename(pyf))[0] modname = 'tiramisu.' + pyf if not '__init__' in modname: parse_module(modname) pyfiles = glob(normpath(join(directory, '..', 'test', '*.py'))) for pyf in pyfiles: pyf = splitext(basename(pyf))[0] modname = 'tiramisu.test.' + pyf if not '__init__' in modname: parse_module(modname) process_modules()