77 lines
2.5 KiB
Python
Executable File
77 lines
2.5 KiB
Python
Executable File
#!/usr/bin/env python
|
|
"""Generates files for sphinx documentation using a simple Autodoc based
|
|
template.
|
|
|
|
To use, just run as a script:
|
|
$ python doc/generate_autodoc_index.py
|
|
"""
|
|
|
|
import os
|
|
|
|
|
|
base_dir = os.path.dirname(os.path.abspath(__file__))
|
|
RSTDIR=os.path.join(base_dir, "source", "sourcecode")
|
|
SOURCEDIR=os.path.join(base_dir, "..")
|
|
|
|
# Exclude these modules from the autodoc results
|
|
EXCLUDE_MODULES = ['keystone.backends.sqlalchemy.migrate_repo']
|
|
|
|
def in_exclude_list(module_name):
|
|
"""Compares a module to the list of excluded modules
|
|
|
|
Returns true if the provided module resides in or matches
|
|
an excluded module, false otherwise.
|
|
"""
|
|
for excluded_module in EXCLUDE_MODULES:
|
|
if module_name.startswith(excluded_module):
|
|
return True
|
|
return False
|
|
|
|
def find_autodoc_modules(module_name, sourcedir):
|
|
"""returns a list of modules in the SOURCE directory"""
|
|
modlist = []
|
|
os.chdir(os.path.join(sourcedir, module_name))
|
|
for root, dirs, files in os.walk("."):
|
|
for filename in files:
|
|
if filename.endswith(".py"):
|
|
# root = ./keystone/test/unit
|
|
# filename = base.py
|
|
elements = root.split(os.path.sep)
|
|
# replace the leading "." with the module name
|
|
elements[0] = module_name
|
|
# and get the base module name
|
|
base, extension = os.path.splitext(filename)
|
|
if not (base == "__init__"):
|
|
elements.append(base)
|
|
result = (".".join(elements))
|
|
if not in_exclude_list(result):
|
|
modlist.append(result)
|
|
return modlist
|
|
|
|
if not(os.path.exists(RSTDIR)):
|
|
os.mkdir(RSTDIR)
|
|
|
|
INDEXOUT = open("%s/autoindex.rst" % RSTDIR, "w")
|
|
INDEXOUT.write("Source Code Index\n")
|
|
INDEXOUT.write("=================\n")
|
|
INDEXOUT.write(".. toctree::\n")
|
|
INDEXOUT.write(" :maxdepth: 1\n")
|
|
INDEXOUT.write("\n")
|
|
|
|
for module in find_autodoc_modules('keystone', SOURCEDIR):
|
|
generated_file = "%s/%s.rst" % (RSTDIR, module)
|
|
|
|
INDEXOUT.write(" %s\n" % module)
|
|
FILEOUT = open(generated_file, "w")
|
|
FILEOUT.write("The :mod:`%s` Module\n" % module)
|
|
FILEOUT.write("=============================="
|
|
"=============================="
|
|
"==============================\n")
|
|
FILEOUT.write(".. automodule:: %s\n" % module)
|
|
FILEOUT.write(" :members:\n")
|
|
FILEOUT.write(" :undoc-members:\n")
|
|
FILEOUT.write(" :show-inheritance:\n")
|
|
FILEOUT.close()
|
|
|
|
INDEXOUT.close()
|