Files
create/src/Tools/pythondoc.py
2023-04-22 13:07:06 -05:00

92 lines
2.7 KiB
Python

#! python
# -*- coding: utf-8 -*-
# (c) 2007 Werner Mayer LGPL
# Create HTML documentation from FreeCAD's Python modules and classes.
import pydoc, pkgutil, sys, os, dircache, zipfile
def generateDoc():
# Get the path to the FreeCAD module relative to this directory
toolspath = os.path.dirname(__file__)
homepath = toolspath + "/../../"
homepath = os.path.realpath(homepath)
binpath = os.path.join(homepath, "bin")
docpath = os.path.join(homepath, "doc")
modpath = os.path.join(homepath, "Mod")
# Change to the doc directory
cwd = os.getcwd()
print("Change to " + docpath)
os.chdir(homepath)
if os.path.exists("doc") == False:
os.mkdir("doc")
os.chdir("doc")
# Add the bin path to the system path
if os.name == "nt":
os.environ["PATH"] = os.environ["PATH"] + ";" + binpath
else:
os.environ["PATH"] = os.environ["PATH"] + ":" + binpath
# Import FreeCAD module
sys.path.append(binpath)
print("Write documentation for module 'FreeCAD'")
pydoc.writedoc("FreeCAD")
print("")
# Module directory
ModDirs = dircache.listdir(modpath)
# Search for module paths and append them to Python path
# for Dir in ModDirs:
# if (Dir != '__init__.py'):
# sys.path.append( os.path.join(modpath,Dir) )
# Walk through the module paths again and try loading the modules to create HTML files
for Dir in ModDirs:
dest = os.path.join(modpath, Dir)
print("Write documentation for module '" + Dir + "'")
if Dir != "__init__.py":
writedocs(dest)
print("")
# Now we must create a document and create instances of all Python classes which
# cannot be directly created by a module.
# Create a ZIP archive from all HTML files
print("Creating ZIP archive 'docs.zip'...")
zip = zipfile.ZipFile("docs.zip", "w")
for file in os.listdir("."):
if not os.path.isdir(file):
if file.find(".html") > 0:
print(" Adding file " + file + " to archive")
zip.write(file)
print("done.")
zip.close()
# Remove all HTML files
print("Cleaning up HTML files...")
for file in os.listdir("."):
if not os.path.isdir(file):
if file.find(".html") > 0:
print(" Removing " + file)
os.remove(file)
os.chdir(cwd)
print("done.")
def writedocs(dir, pkgpath=""):
"""Write out HTML documentation for all modules in a directory tree."""
for importer, modname, ispkg in pkgutil.walk_packages([dir], pkgpath):
# Ignore all debug modules
if modname[-2:] != "_d":
pydoc.writedoc(modname)
return
if __name__ == "__main__":
generateDoc()