Source code for doitpy.docs
"""create tasks related to documentation generation
Example to create tasks to:
- spell check all restructured text files (including README)
- build sphinx docs in `doc` folder
- upload built sphinx docs to `pythonhosted` using `setuptools`
::
def task_docs():
doc_files = glob.glob('doc/*.rst') + ['README.rst']
yield docs.spell(doc_files, 'doc/dictionary.txt')
yield docs.sphinx('doc/', 'doc/_build/html/', task_dep=['spell'])
yield docs.pythonhosted_upload('doc/_build/html/', task_dep=['sphinx'])
"""
import subprocess
def check_no_output(doc_file, dictionary):
"""run spell checker on file
spell always return successful code (0)
so this checks if the output is empty
"""
# -l list misspelled words
# -p set path of personal dictionary
cmd = 'hunspell -l -d en_US -p {} {}'.format(dictionary, doc_file)
output = subprocess.check_output(cmd, shell=True,
universal_newlines=True)
if len(output) != 0:
print(output)
return False
else:
return True
# task creator
[docs]def spell(files, dictionary):
"""spell checker for doc files
:param list-str files: list of files to spell check
:param str dictionary: path of dictionary with extra words
"""
for doc_file in files:
yield {
'basename': 'spell',
'name': doc_file,
'actions': [(check_no_output, (doc_file, dictionary))],
'file_dep': [dictionary, doc_file],
'verbosity': 2,
}
# task creator
[docs]def sphinx(root_path, build_path, sphinx_opts='', task_dep=None):
"""build sphinx docs
:param str root_path: root path of sphinx docs
:param str build_path: path generated sphinx docs will be saved in
:param str sphinx_opts: `sphinx-build` command line options
:param list-str task_dep: list of tasks this task will depend on
"""
cmd = "sphinx-build -b html {opts} -d {root}_build/doctrees {root} {build}"
action = cmd.format(root=root_path, build=build_path, opts=sphinx_opts)
# sphinx has its own check it up-to-date so we dont care
# about always re-executing the task.
task = {
'basename': 'sphinx',
'actions': [action],
'verbosity': 2,
}
if task_dep:
task['task_dep'] = task_dep
yield task
# task creator
[docs]def pythonhosted_upload(www_path, task_dep):
"""deploy website (sphinx docs)
:param str www_path: path to folder containig www files
:param list-str task_dep: list of tasks this task will depend on
"""
action = "python setup.py upload_docs --upload-dir %s"
yield {
'basename': 'pythonhosted_upload',
'actions': [action % www_path],
'task_dep': task_dep,
'verbosity': 2,
}