Skip to main content

A plugin for Hatch for building documentation with Sphinx

Project description

Hatch Sphinx Plugin

A plugin for Hatch that allows you to build documentation with Sphinx and include the output in your package distributions.

Installation

hatch-sphinx is a plugin for the hatchling build system, so to use it in your project you'll need to to be using that build-backend. You can add hatch-sphinx to your project's pyproject.toml file as a build-system requirement:

[build-system]
requires = ["hatchling", "hatch-sphinx"]
build-backend = "hatchling.build"

Standard Python package builders (pip install <package>, python -m build, hatchling build, ...) will install the hatch-sphinx package for you into the build environment. (Or at least, they will do so once hatch-sphinx is uploaded to PyPI!)

Usage

The set of Sphinx build steps needed by your project are configured in the the [[tool.hatch.build.targets.wheel.hooks.sphinx.tools]] tables in your pyproject.toml file. You can repeat this table multiple times to run different tools (e.g. sphinx-apidoc and then sphinx-build).

Which tool is being run is configured via the tool configuration key. The known values are build, apidoc, custom, and the different configuration keys they support are listed below

Common options

Key Default Description
tool required Select the tool to be run build, apidoc or custom
doc_dir "doc", "docs", "." (first existing) The 'base' of the Sphinx documentation tree; set as the working directory prior to invoking any tool.
out_dir "output" The directory the tool outputs will be placed into, relative do doc_dir; created if it doesn't exist and deleted on clean.
work_dir "." The directory to run the commands in. All artifact patterns are relative to this directory.
sphinx_opts "" Any additional options to be sent to the tool.
environment {} Dictionary of environment settings passed to the tool.

Tool apidoc options

Key Default Description
tool required apidoc
depth 3 API depth to be included (-d 3 option).
private false Include private members in documentation (--private option).
separate true Make a separate rst file per module (--separate option).
header None Header for documentation (-H header option).
source "." Source code to be included in the API docs.
tool_apidoc ["python", "-m", "sphinx.ext.apidoc" Command to run as a list of strings

Tool build options

Key Default Description
tool required build
format "html" Output format for documentation (-b html option).
warnings false Treat warnings as errors (--warnings option).
keep_going false Continue after warnings rather exiting immediately (--keep-going option).
source "." Source code to be included in the docs.
tool_build ["python", "-m", "sphinx", "build" Command to run as a list of strings

Tool custom options

Key Default Description
tool required custom
commands required List of commands to be executed; the magic string {python} is replaced with current interpreter (sys.executable). Each command can be a list of strings (preferred) or a single string.
shell false Whether to run the command via the shell (i.e. the shell parameter for subprocess.run) which permits wildcard expansion and scripting; note that the command cannot be a list of strings in shell=true mode. The standard warnings from subprocess.run to avoid using the shell apply here too.
expand_globs false Whether to expand globs in the command arguments.

Note that not all combinations of shell=true, expand_globs=true and the individual command being a single string are supported. The recommended configuration is to use shell=false and each command as a list, with expand_globs=true if wildcard expansion is needed.

Examples

A sample configuration for generating the API docs and then running Sphinx

[[tool.hatch.build.targets.wheel.hooks.sphinx.tools]]
tool = "apidoc"
source = "../src/mymodule"
out_dir = "source/api"
depth = 4
header = "MyModule API Documentation"

[[tool.hatch.build.targets.wheel.hooks.sphinx.tools]]
tool = "build"
format = "html"
source = "source"
out_dir = "build"

[[tool.hatch.build.targets.wheel.hooks.sphinx.tools]]
tool = "custom"
out_dir = "build"
shell = false
expand_globs = true
commands = [
  [ "ls", "-l", "*.py" ],
  "ls -l *.py",
  [ "{python}", "-c", "import shutil; shutil.copytree('foo', 'bar')"],
]

Notes

  • The examples above are focusing on the wheel stage but it is possible to build the docs in the sdist stage instead if desired.
  • The output directory is deleted in the clean step if used (e.g. hatchling build --clean)

To-do list

  • support a make tool for Makefile based invocation of Sphinx
  • add option to allow commands to exit uncleanly

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

hatch_sphinx-0.0.2.tar.gz (9.8 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

hatch_sphinx-0.0.2-py3-none-any.whl (9.1 kB view details)

Uploaded Python 3

File details

Details for the file hatch_sphinx-0.0.2.tar.gz.

File metadata

  • Download URL: hatch_sphinx-0.0.2.tar.gz
  • Upload date:
  • Size: 9.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.0.1 CPython/3.12.8

File hashes

Hashes for hatch_sphinx-0.0.2.tar.gz
Algorithm Hash digest
SHA256 099df0095c608d52583e171cd24bdba09eb5974f289a8fe4b20c6ec7dc4a8926
MD5 59b78ae522ec6c3dccc59bee0cd674d9
BLAKE2b-256 95d84cd69711308f1c36d64ff72df4f7c36a35dc3a8cdf993e0432a6f93d283a

See more details on using hashes here.

File details

Details for the file hatch_sphinx-0.0.2-py3-none-any.whl.

File metadata

  • Download URL: hatch_sphinx-0.0.2-py3-none-any.whl
  • Upload date:
  • Size: 9.1 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.0.1 CPython/3.12.8

File hashes

Hashes for hatch_sphinx-0.0.2-py3-none-any.whl
Algorithm Hash digest
SHA256 37f4dbd85999c7eb9ccbdd148fc90d213af9269fd5ea433abfb07f753ebb5153
MD5 902a69aacdf739fc8be6239386f5029e
BLAKE2b-256 c6e7ce9394e74b089374f7a7fbbc747df664d2a16ec121d516b78a441e8dfa5e

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page