Skip to main content

When flattened is not enough.

CI Coverage Black isort PyPI - Python Version Documentation Status

Installation

Use pip or pip3 to install sphinx-nested-apidoc

pip install sphinx-nested-apidoc

or

pip3 install sphinx-nested-apidoc

Introduction

sphinx-apidoc is a great tool for generating documentation, but it does not replicate the directory structure of your package. sphinx-nested-apidoc aims to solve that problem.

Tutorial

Let’s say we have the following directory structure of our package:

mymodule/
├── fruits/
│   ├── __init__.py
│   ├── mango.py
│   ├── pear.py
├── animals/
│   ├── special/
│   │   ├── __init__.py
│   │   ├── doggo.py
│   │   └── catto.py
│   ├── __init__.py
│   ├── monke.py
│   └── chimp.py
├── __init__.py
├── base.py
└── exceptions.py

And we want to generate documentation for this package in some directory docs/.

Let’s see the difference.

Using sphinx-apidoc we get

We use the following command:

sphinx-apidoc -o docs/ mymodule/ -e

It generates:

docs/
├── modules.rst
├── mymodule.animals.chimp.rst
├── mymodule.animals.monke.rst
├── mymodule.animals.rst
├── mymodule.animals.special.catto.rst
├── mymodule.animals.special.doggo.rst
├── mymodule.animals.special.rst
├── mymodule.base.rst
├── mymodule.exceptions.rst
├── mymodule.fruits.mango.rst
├── mymodule.fruits.pear.rst
├── mymodule.fruits.rst
└── mymodule.rst

This is not very clean, obviously.

Using sphinx-nested-apidoc we get

We use the following command:

sphinx-nested-apidoc -o docs/ mymodule/

It generates:

docs/
├── modules.rst
└── mymodule/
    ├── animals/
    │   ├── chimp.rst
    │   ├── index.rst
    │   ├── monke.rst
    │   └── special/
    │       ├── catto.rst
    │       ├── doggo.rst
    │       └── index.rst
    ├── base.rst
    ├── exceptions.rst
    ├── fruits/
    │   ├── mango.rst
    │   ├── pear.rst
    │   └── index.rst
    └── index.rst

Looks clean!

Want to name the package something else?

sphinx-nested-apidoc --package-name src -o docs/ mymodule/

It generates:

docs/
├── modules.rst
└── src/
    ├── animals/
    │   ├── chimp.rst
    │   ├── index.rst
    │   ├── monke.rst
    │   └── special/
    │       ├── catto.rst
    │       ├── doggo.rst
    │       └── index.rst
    ├── base.rst
    ├── exceptions.rst
    ├── fruits/
    │   ├── mango.rst
    │   ├── pear.rst
    │   └── index.rst
    └── index.rst

Note that mymodule has been renamed to src.

As a Sphinx Extension

You can also use this as a sphinx extension.

Create a file called docs/conf.py and configure it like this:

# ...
extensions = [
    "sphinx_nested_apidoc",
    # ...other extensions
]

# Name of the package directory.
sphinx_nested_apidoc_package_dir = "packagename"
# Name of the folder to put all the package documentation in. By default it is
# the name of the package itself.
sphinx_nested_apidoc_package_name = "src"
# ...

And then run:

sphinx-build docs docs/_build

Usage Details

usage: sphinx-nested-apidoc [-h] [-v | -q] [--version] [-f] [-n] -o DESTDIR
                            [--package-name PACKAGE_NAME] [-s SUFFIX]
                            [--implicit-namespaces]
                            module_path ...

Generates nested directory from sphinx-apidoc’s flattened files. It is simply a wrapper over sphinx-apidoc and you can pass additional arguments to it for extended configuration.

positional arguments:
module_path

Path to package to document.

...

Commands and flags to supply to sphinx-apidoc. Note that some arguments like –dry-run are ignored.

options:
-h, --help

show this help message and exit

-v, --verbose

Increase application verbosity. This option is repeatable and will increase verbosity each time it is repeated. This option cannot be used when -q/–quiet is used. (default: 3)

-q, --quiet

Disable logging. This option cannot be used when -v/–verbose is used. (default: False)

--version

show program’s version number and exit

-f, --force

Replace existing files. (default: False)

-n, --dry-run

Run the script without creating files (default: False)

-o, --output-dir

directory to place all output (default: None)

--package-name

Name of the directory to put the package documentation in. By default it is the name of the package itself. (default: None)

sphinx-apidoc options:
-s, --suffix

file suffix (default: rst)

--implicit-namespaces

interpret module paths according to PEP-0420 implicit namespaces specification (default: False)

Sphinx Extension Configuration

The following configuration values are used:

Option Name

Description

Default

Required?

sphinx_nested_apidoc_package_dir

This is where the package to document resides.

YES

sphinx_nested_apidoc_package_name

Name of the directory to put all the package documentation in. By default it is the name of the package itself.

None

sphinx_nested_apidoc_suffix

The suffix of the generated documentation files.

rst

sphinx_nested_apidoc_excluded_files

List of files (without extension) to exclude from modification/renaming.

index, modules

sphinx_nested_apidoc_module_first

put module documentation before submodule documentation.

False

sphinx_nested_apidoc_implicit_namespaces

interpret module paths according to PEP-0420 implicit namespaces specification.

False

Some additional details

What it does

  • As you saw earlier, it generates a nested directory from a flattened one.

  • Under the hood, it uses sphinx-apidoc. More on this below.

As stated above, sphinx-nested-apidoc uses sphinx-apidoc internally. This means, you can configure sphinx-apidoc from sphinx-nested-apidoc. For example:

# You can pass arguments like this:
sphinx-nested-apidoc -o docs/ mymodule/ -- -M -F --ext-githubpages
# or you can simply omit the '--'.

Everything after the required positional argument of sphinx-nested-apidoc is passed to sphinx-apidoc.

What it does not do

  • It does not modify the contents of the file. It just renames (or moves) them.

  • It is not a standalone tool. It requires sphinx-apidoc for its work.

License

MIT

Download files

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

Source Distribution

sphinx_nested_apidoc-1.2.7.tar.gz (13.2 kB view details)

Uploaded Source

Built Distribution

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

sphinx_nested_apidoc-1.2.7-py3-none-any.whl (12.0 kB view details)

Uploaded Python 3

File details

Details for the file sphinx_nested_apidoc-1.2.7.tar.gz.

File metadata

  • Download URL: sphinx_nested_apidoc-1.2.7.tar.gz
  • Upload date:
  • Size: 13.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: pdm/2.15.0 CPython/3.12.3 Linux/6.5.0-1018-azure

File hashes

Hashes for sphinx_nested_apidoc-1.2.7.tar.gz
Algorithm Hash digest
SHA256 522384aca91a9b4ce8e46331dc50e07d0d833bdfd38cd89e0362d0e62ae225fa
MD5 0985f6418cee52becfc2bc749e0a82f7
BLAKE2b-256 0f40110253e5943f94a97618ac837f94c03fd5e6b5b8cf8c8e066e445a51d1ac

See more details on using hashes here.

File details

Details for the file sphinx_nested_apidoc-1.2.7-py3-none-any.whl.

File metadata

  • Download URL: sphinx_nested_apidoc-1.2.7-py3-none-any.whl
  • Upload date:
  • Size: 12.0 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: pdm/2.15.0 CPython/3.12.3 Linux/6.5.0-1018-azure

File hashes

Hashes for sphinx_nested_apidoc-1.2.7-py3-none-any.whl
Algorithm Hash digest
SHA256 3be664d411d380d07b256e5958b0f7b184c55ba8083dc77a62198e9a6bc79646
MD5 58237c2fde940aa1ca579c0baa099d67
BLAKE2b-256 1edd1b42da19f0c935e5f6e73087b7ea00f7f5cfb29ca95278c1e49bfc53125f

See more details on using hashes here.

Release history Release notifications | RSS feed

This release

1.2.7 This release

2 files

1.2.6

2 files

1.2.5

2 files

1.2.4

2 files

1.2.3

2 files

1.2.2

2 files

1.2.1

2 files

1.2.0

2 files

1.1.1

2 files

1.1.0

2 files

1.0.0

2 files

0.3.2

2 files

0.3.1

2 files

0.3.0

2 files

0.2.0

2 files

0.1.0

2 files

Supported by

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