taolib.flows.tasks.doc 源代码

from pathlib import Path
import logging
from shutil import rmtree
from tempfile import mkdtemp
from invoke import task
from invoke.context import Context

[文档] logger = logging.getLogger(__name__)
@task
[文档] def clean(ctx: Context): """清除文档构建目标目录,以便下次构建是干净的。""" output = Path(ctx.sphinx.target) if output.exists(): logger.info(f'删除 {output}') rmtree(output)
@task(default=True)
[文档] def build(ctx: Context, opts: str = "", language: str|None = None, source: str|None = None, target: str|None = None, nitpick: bool = False): """构建项目的 Sphinx 文档。 Args: opts: Extra sphinx-build options/args nitpick: Build with stricter warnings/errors enabled source: Source directory; overrides config setting target: Output directory; overrides config setting """ source = source or ctx.sphinx.source target = target or ctx.sphinx.target if language: opts = f'-D language={language}' target = f'{target}/{language}' if nitpick: opts += " -n -W -T" cmd = f"sphinx-build {opts} {source} {target}" logger.info(f"{source} => {target}") ctx.run(cmd, pty=True)
@task
[文档] def intl(ctx: Context, language: str = 'en'): '''Update the POT file and invoke the `sphinx-intl update` command Only used with `invoke intl.update` ''' opts = "-b gettext" target = Path(ctx.sphinx.target).parent / 'gettext' if language == 'en': clean(ctx) build(ctx, target=target, opts=opts) elif language: if not Path(target).exists(): build(ctx, target=target, opts=opts) ctx.run( f'sphinx-intl update -p {target} -l {language}' )
# for DIR in ['pages', 'posts', 'shop']: # rmtree(f'locales/{language}/LC_MESSAGES/{DIR}/') @task
[文档] def doctest(ctx: Context): """ Run Sphinx' doctest builder. This will act like a test run, displaying test results & exiting nonzero if all tests did not pass. A temporary directory is used for the build target, as the only output is the text file which is automatically printed. """ tmpdir = mkdtemp() try: opts = "-b doctest" target = tmpdir clean(ctx) build(ctx, target=target, opts=opts) finally: rmtree(tmpdir)
@task
[文档] def tree(ctx: Context): """ Display documentation contents with the 'tree' program. """ ignore = ".git|*.pyc|*.swp|dist|*.egg-info|_static|_build|_templates" ctx.run(f'tree -Ca -I "{ignore}" {ctx.sphinx.source}')