Something went wrong on our end
make.py 3.72 KiB
'''Documentation build on sphinx - please run from root dir by calling ost doc/make.py'''
import os, sys, re
import shutil
from ost import settings
from optparse import OptionParser
import subprocess
if len(sys.argv)==2:
root_dir=sys.argv[1]
else:
root_dir='.'
def _CheckCall(cmd, shell):
r = subprocess.call(cmd, shell=True)
if r != 0:
sys.stderr.write("Command '%s' returned non-zero exit status %d\n"%(cmd, r))
sys.exit(-1)
def _OutputPath(inpath, outdir):
parts=inpath.split(os.path.sep)
filtered_parts=[outdir]
index=parts.index('modules')
for part in parts[index+1:]:
if part!='doc':
filtered_parts.append(part)
return os.path.join(*filtered_parts)
def _RequireCopy(in_name, out_name):
if not os.path.exists(out_name):
return True
if os.path.getmtime(in_name)>os.path.getmtime(out_name):
return True
return False
pattern = re.compile(r'\.\.\s+image\:\:\s+([a-zA-Z0-9_\-//]+\.png|[a-zA-Z0-9_\-//]+\.jpg)')
def _CheckImage(in_name):
file = open(in_name, "r")
text = file.read()
picture_list = pattern.findall(text)
file.close()
return picture_list
def _CreateAndCopy(in_name, outdir):
out_name=_OutputPath(in_name, outdir)
out_dir=os.path.dirname(out_name)
if not os.path.exists(out_dir):
_MkDir(out_dir)
if _RequireCopy(in_name, out_name):
print 'cp %s %s' % (in_name, out_name)
os.system('cp %s %s' % (in_name, out_name))
def _MkDir(dirname):
"""
Recursively create directories if they don't exist
"""
parts=dirname.split(os.path.sep)
for i, d in enumerate(parts):
n=os.path.join(*parts[:1+i])
if not os.path.exists(n):
os.mkdir(n)
def _CollectRstDocs(outdir, dirname, fnames):
for fname in fnames:
if fname.endswith('.rst'):
in_name=os.path.join(dirname, fname)
_CreateAndCopy(in_name,outdir)
img_list = _CheckImage(in_name)
for img in img_list:
img_name = os.path.join(dirname,img)
_CreateAndCopy(img_name, outdir)
def ParseArgs():
parser = OptionParser("usage: ost make.py [options] ")
parser.add_option("-l","--linkcheck", action="store_true", default=False, dest="linkcheck", help="validate all external links")
parser.add_option("-b", "--build-html", action="store_true",
default=False, dest="html", help="build html documentation")
parser.add_option('-j', '--build-json', action='store_true', default=False)
parser.add_option("-d", "--doctest", action="store_true", default=False, dest="doctest", help="run all test")
parser.add_option("-q", "--quiet", action="store_true", default=False, dest="quiet", help="run all test")
return parser.parse_args()
opts, args=ParseArgs()
if not opts.html and\
not opts.linkcheck and\
not opts.doctest:
opts.html=True
opt_str=''
if opts.quiet:
opt_str=' -Q '
for sub_dir in ('modules',):
os.path.walk(sub_dir, _CollectRstDocs, 'doc/source')
sphinx_bin=settings.Locate(['sphinx-build', 'sphinx-build-2.6','sphinx-build-2.7'])
if opts.html:
cmd='%s %s -b html -c %s %s %s' % (sphinx_bin, opt_str,
'doc/conf', 'doc/source', 'doc/build/html')
print cmd
_CheckCall(cmd, shell=True)
if opts.doctest:
cmd='%s %s -b doctest -c %s %s %s' % (sphinx_bin, opt_str,
'doc/conf', 'doc/source',
'doc/build/doctest')
_CheckCall(cmd, shell=True)
if opts.build_json:
cmd='%s %s -b json -c %s %s %s' % (sphinx_bin, opt_str, 'doc/conf',
'doc/source', 'doc/build/json')
_CheckCall(cmd, shell=True)
if opts.linkcheck:
cmd='%s %s -b linkcheck -c %s %s %s' % (sphinx_bin, opt_str, 'doc/conf',
'doc/source', 'doc/build/check')
_CheckCall(cmd, shell=True)