Source code for experimental_lowqa.tasks.docs

"""
A module for project documentation tasks.
"""

# built-in
from pathlib import Path

# third-party
from vcorelib.paths import find_file
from vcorelib.task import Inbox, Outbox
from vcorelib.task.subprocess.run import SubprocessLogMixin

# internal
from experimental_lowqa import PKG_NAME
from experimental_lowqa.tasks.python import to_slug


[docs] class SphinxTask(SubprocessLogMixin): """A class to facilitate generating documentation with sphinx.""" default_requirements = { "venv", "python-install-sphinx", "python-install-sphinx-book-theme", "python-editable", }
[docs] async def run(self, inbox: Inbox, outbox: Outbox, *args, **kwargs) -> bool: """Generate ninja configuration files.""" cwd: Path = args[0] project: str = args[1] venv_bin = inbox["venv"]["venv{python_version}"]["bin"] # Find templates directory. templates = find_file( "templates", package=to_slug(PKG_NAME), strict=True, logger=self.logger, ) assert templates is not None # Generate sources with apidoc. result = await self.shell_cmd_in_dir( cwd.joinpath("docs"), [ str(venv_bin.joinpath("sphinx-apidoc")), str(Path("..", project.replace("-", "_"))), "-t", str(templates), "-A", f"\"{kwargs.get('author', 'Libre Embedded')}\"", "-f", "-F", "-o", ".", ], ) # Build. if result: result = await self.shell_cmd_in_dir( cwd.joinpath("docs"), [ str(venv_bin.joinpath("sphinx-build")), "-W", ".", "_build", ], ) return result