Optionally create a full quickstart project in apidoc.

This commit is contained in:
Georg Brandl 2011-10-07 12:16:40 +02:00
parent ba95709f87
commit 1329984f2c
2 changed files with 63 additions and 13 deletions

View File

@ -41,7 +41,7 @@ def makename(package, module):
def write_file(name, text, opts): def write_file(name, text, opts):
"""Write the output file for module/package <name>.""" """Write the output file for module/package <name>."""
fname = path.join(opts.destdir, "%s.%s" % (name, opts.suffix)) fname = path.join(opts.destdir, '%s.%s' % (name, opts.suffix))
if opts.dryrun: if opts.dryrun:
print 'Would create file %s.' % fname print 'Would create file %s.' % fname
return return
@ -106,7 +106,7 @@ def create_package_file(root, master_package, subroot, py_files, opts, subs):
write_file(makename(master_package, subroot), text, opts) write_file(makename(master_package, subroot), text, opts)
def create_modules_toc_file(master_package, modules, opts, name='modules'): def create_modules_toc_file(modules, opts, name='modules'):
""" """
Create the module's index. Create the module's index.
""" """
@ -186,9 +186,8 @@ def recurse_tree(rootpath, excludes, opts):
create_module_file(package_name, module, opts) create_module_file(package_name, module, opts)
toc.append(makename(package_name, module)) toc.append(makename(package_name, module))
# create the module's index return toc
if not opts.notoc:
create_modules_toc_file(package_name, toc, opts)
def normalize_excludes(rootpath, excludes): def normalize_excludes(rootpath, excludes):
""" """
@ -246,23 +245,65 @@ Note: By default this script will not overwrite already created files.""")
help='Run the script without creating files') help='Run the script without creating files')
parser.add_option('-T', '--no-toc', action='store_true', dest='notoc', parser.add_option('-T', '--no-toc', action='store_true', dest='notoc',
help='Don\'t create a table of contents file') help='Don\'t create a table of contents file')
parser.add_option('-H', '--doc-header', action='store', dest='header',
help='Documentation header (default: Project)',
default='Project')
parser.add_option('-s', '--suffix', action='store', dest='suffix', parser.add_option('-s', '--suffix', action='store', dest='suffix',
help='file suffix (default: rst)', default='rst') help='file suffix (default: rst)', default='rst')
parser.add_option('-F', '--full', action='store_true', dest='full',
help='Generate a full project with sphinx-quickstart')
parser.add_option('-H', '--doc-project', action='store', dest='header',
help='Project name (default: root module name)')
parser.add_option('-A', '--doc-author', action='store', dest='author', type='str',
help='Project author(s), used when --full is given')
parser.add_option('-V', '--doc-version', action='store', dest='version',
help='Project version, used when --full is given')
parser.add_option('-R', '--doc-release', action='store', dest='release',
help='Project release, used when --full is given, '
'defaults to --doc-version')
(opts, args) = parser.parse_args(argv[1:]) (opts, args) = parser.parse_args(argv[1:])
if not args: if not args:
parser.error('A package path is required.') parser.error('A package path is required.')
rootpath, excludes = args[0], args[1:]
if not opts.destdir: if not opts.destdir:
parser.error('An output directory is required.') parser.error('An output directory is required.')
rootpath, excludes = args[0], args[1:] if opts.header is None:
opts.header = rootpath
if not path.isdir(rootpath): if not path.isdir(rootpath):
print >>sys.stderr, '%s is not a directory.' % rootpath print >>sys.stderr, '%s is not a directory.' % rootpath
sys.exit(1) sys.exit(1)
if not path.isdir(opts.destdir): if not path.isdir(opts.destdir):
os.makedirs(opts.destdir) os.makedirs(opts.destdir)
excludes = normalize_excludes(rootpath, excludes) excludes = normalize_excludes(rootpath, excludes)
recurse_tree(rootpath, excludes, opts) modules = recurse_tree(rootpath, excludes, opts)
if opts.full:
from sphinx import quickstart as qs
modules.sort()
prev_module = ''
text = ''
for module in modules:
if module.startswith(prev_module + '.'):
continue
prev_module = module
text += ' %s\n' % module
d = dict(
path = opts.destdir,
sep = False,
dot = '_',
project = opts.header,
author = opts.author or 'Author',
version = opts.version or '',
release = opts.release or opts.version or '',
suffix = '.' + opts.suffix,
master = 'modules',
epub = True,
ext_autodoc = True,
makefile = True,
batchfile = True,
mastertocmaxdepth = opts.maxdepth,
mastertoctree = text,
)
qs.generate(d, silent=True)
print 'Creating quickstart project and Makefile.'
elif not opts.notoc:
create_modules_toc_file(modules, opts)

View File

@ -344,7 +344,9 @@ Welcome to %(project)s's documentation!
Contents: Contents:
.. toctree:: .. toctree::
:maxdepth: 2 :maxdepth: %(mastertocmaxdepth)s
%(mastertoctree)s
Indices and tables Indices and tables
================== ==================
@ -946,11 +948,16 @@ directly.'''
'y', boolean) 'y', boolean)
def generate(d): def generate(d, silent=False):
"""Generate project based on values in *d*.""" """Generate project based on values in *d*."""
texescape.init() texescape.init()
if 'mastertoctree' not in d:
d['mastertoctree'] = ''
if 'mastertocmaxdepth' not in d:
d['mastertocmaxdepth'] = 2
d['project_fn'] = make_filename(d['project']) d['project_fn'] = make_filename(d['project'])
d['project_manpage'] = d['project_fn'].lower() d['project_manpage'] = d['project_fn'].lower()
d['now'] = time.asctime() d['now'] = time.asctime()
@ -993,7 +1000,7 @@ def generate(d):
conf_text = QUICKSTART_CONF % d conf_text = QUICKSTART_CONF % d
if d['epub']: if d['epub']:
conf_text += EPUB_CONFIG % d conf_text += EPUB_CONFIG % d
if d['ext_intersphinx']: if d.get('ext_intersphinx'):
conf_text += INTERSPHINX_CONFIG conf_text += INTERSPHINX_CONFIG
f = open(path.join(srcdir, 'conf.py'), 'w', encoding='utf-8') f = open(path.join(srcdir, 'conf.py'), 'w', encoding='utf-8')
@ -1020,6 +1027,8 @@ def generate(d):
f.write(BATCHFILE % d) f.write(BATCHFILE % d)
f.close() f.close()
if silent:
return
print print
print bold('Finished: An initial directory structure has been created.') print bold('Finished: An initial directory structure has been created.')
print ''' print '''