view doc/scripts/docgen.py @ 1123:1a1c0c3adcca

coding_style: Added suggestion made by email by Francois about type checking
author Olivier Delalleau <delallea@iro>
date Wed, 15 Sep 2010 09:42:11 -0400
parents 9472d234db2e
children 57feab73c783
line wrap: on
line source

import sys
import os
import shutil
import inspect

from epydoc import docintrospecter 
from epydoc.apidoc import RoutineDoc

import getopt
from collections import defaultdict

if __name__ == '__main__':

    # make sure we're in the right directory
    this_file_directory = os.path.abspath(os.path.dirname(__file__))
    pylearn_root = os.path.join(os.path.join(this_file_directory, ".."), "..")

    #pylearn_root = "/".join(sys.path[0].split("/")[:-2])

    options = defaultdict(bool)
    options.update(dict([x, y or True] for x, y in getopt.getopt(sys.argv[1:], 'o:', ['epydoc', 'rst', 'help', 'nopdf'])[0]))
    if options['--help']:
        print 'Usage: %s [OPTIONS]' % sys.argv[0]
        print '  -o <dir>: output the html files in the specified dir'
        print '  --rst: only compile the doc (requires sphinx)'
        print '  --nopdf: do not produce a PDF file from the doc, only HTML'
        print '  --epydoc: only compile the api documentation (requires epydoc)'
        print '  --help: this help'
        sys.exit(0)

    options['--all'] = not (bool(options['--epydoc']) ^ bool(options['--rst']))

    def mkdir(path):
        try:
            os.mkdir(path)
        except OSError:
            pass

    outdir = options['-o'] or (pylearn_root + '/html')
    mkdir(outdir)
    os.chdir(outdir)
    mkdir("doc")
    mkdir("api")

    # Make sure the appropriate 'theano' directory is in the PYTHONPATH
    pythonpath = os.environ.get('PYTHONPATH', '')
    pythonpath = pylearn_root + ':' + pythonpath
    os.environ['PYTHONPATH'] = pythonpath

    if options['--all'] or options['--epydoc']:
        from epydoc.cli import cli
        sys.path[0:0] = [pylearn_root]

        #Generate HTML doc

        ## This causes problems with the subsequent generation of sphinx doc
        #sys.argv[:] = ['', '--config', '%s/doc/api/epydoc.conf' % pylearn_root, '-o', 'api']
        #cli()
        ## So we use this instead
        os.system("epydoc --config %s/doc/api/epydoc.conf -o api" % pylearn_root)

        # Generate PDF doc
        # TODO

    if options['--all'] or options['--rst']:
        import sphinx
        sys.path[0:0] = [os.path.join(pylearn_root, 'doc')]
        sphinx.main(['', '-E', os.path.join(pylearn_root, 'doc'), '.'])

        if not options['--nopdf']:
            # Generate latex file in a temp directory
            import tempfile
            workdir = tempfile.mkdtemp()
            sphinx.main(['', '-E', '-b', 'latex',
                os.path.join(pylearn_root, 'doc'), workdir])
            # Compile to PDF
            os.chdir(workdir)
            os.system('make')
            try:
                shutil.copy(os.path.join(workdir, 'pylearn.pdf'), outdir)
                os.chdir(outdir)
                shutil.rmtree(workdir)
            except OSError, e:
                print 'OSError:', e
            except IOError, e:
                print 'IOError:', e