Skip to main content

Generate CLI reference documentation from argparse-based applications using Jinja2 templates

Project description

gencodo-py

Generate CLI reference documentation from argparse-based applications using Jinja2 templates.

Installation

pip install gencodo-py

Quick Start

Define your CLI commands as plain Python classes (no base class required):

import argparse

class GreetCommand:
    name = "greet"
    help_msg = "Greet a specific person"
    overview = "Personalize your greeting by specifying a name."
    hidden = False
    examples = [("Greet Alice", "myapp greet Alice")]
    related_commands = None

    def fill_parser(self, parser: argparse.ArgumentParser) -> None:
        parser.add_argument("name", help="Name to greet")
        parser.add_argument("--formal", action="store_true", default=False,
                            help="Use formal style")

Generate documentation:

from gencodo import CommandGroup, gen_docs_tree, get_bundled_templates

groups = [CommandGroup(name="Greetings", commands=[GreetCommand])]
templates = get_bundled_templates("md")  # or "rst"

gen_docs_tree(
    appname="myapp",
    command_groups=groups,
    output_dir="docs/cli-ref",
    templates=templates,
)

API Reference

Types

  • Command -- Protocol that any CLI command class must satisfy (structural subtyping).
  • CommandGroup -- NamedTuple grouping commands under a name.
  • ExampleInfo -- Dataclass for a usage example (info, usage).
  • FlagInfo -- Dataclass for a CLI flag (name, usage, default_value).
  • TemplateInfo -- Dataclass for Jinja2 template configuration.

Functions

  • gen_docs(command_class, writer, template, appname, command_groups) -- Render docs for a single command to a TextIO writer.
  • gen_docs_tree(appname, command_groups, output_dir, templates, ...) -- Generate a full documentation tree (one file per command + index).
  • get_bundled_templates(format="rst", index_file_name=None) -- Load bundled reST or Markdown templates.

Command Protocol

Your command classes need these attributes/methods:

Attribute Type Description
name str Command name
help_msg str Short help string
overview str Longer description
hidden bool Exclude from docs if True
examples list[tuple[str, str]] (description, command) pairs
related_commands list[str] | None Explicit related commands, or None to auto-infer
fill_parser(parser) method Add arguments to an ArgumentParser

Template Customization

Bundled Templates

Use get_bundled_templates("rst") or get_bundled_templates("md") for the built-in templates.

Custom Templates

Pass your own Jinja2 template strings via TemplateInfo:

from gencodo import TemplateInfo

templates = TemplateInfo(
    index_file_name="index.md",
    index_template="# Commands\n{% for f in files %}...\n{% endfor %}",
    command_template="# {{ command_name }}\n{{ short }}\n...",
)

Available template variables for command templates:

Variable Type Description
ref str Anchor reference (underscored name)
command_name str Command name
short str Short help message
long str Overview text
synopsis str Usage synopsis
examples list[ExampleInfo] Usage examples
flags list[FlagInfo] Optional flags
related_commands list[str] Related command names
heading_len int Length of command name
appname str Application name

Custom Jinja2 filters available: indent(width), repeat(n).

License

LGPL-3.0-only

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

gencodo_py-0.1.1.tar.gz (42.0 kB view details)

Uploaded Source

Built Distribution

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

gencodo_py-0.1.1-py3-none-any.whl (10.1 kB view details)

Uploaded Python 3

File details

Details for the file gencodo_py-0.1.1.tar.gz.

File metadata

  • Download URL: gencodo_py-0.1.1.tar.gz
  • Upload date:
  • Size: 42.0 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for gencodo_py-0.1.1.tar.gz
Algorithm Hash digest
SHA256 bb4018a6b629c7c4972d0b1c67c501d02b59e17fb6c00e128df691a307e98e90
MD5 fe44cfd9f195ce367f9b0c7a5e7913f3
BLAKE2b-256 6925421802cba8de1136ba12b990220d68b3c033b9562c92fafea2595012e320

See more details on using hashes here.

Provenance

The following attestation bundles were made for gencodo_py-0.1.1.tar.gz:

Publisher: publish.yml on canonical/gencodo-py

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file gencodo_py-0.1.1-py3-none-any.whl.

File metadata

  • Download URL: gencodo_py-0.1.1-py3-none-any.whl
  • Upload date:
  • Size: 10.1 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for gencodo_py-0.1.1-py3-none-any.whl
Algorithm Hash digest
SHA256 80cc0106f1d3c892c29e3250956351b63a5079161bf3be9bc27191363ecfd94a
MD5 18242e5a914b3f44cf98e7afb6a3aca6
BLAKE2b-256 58e99335d92e84802a54bed975ba64ebf80af1d8e2ce6ac5c2900ee5ece17404

See more details on using hashes here.

Provenance

The following attestation bundles were made for gencodo_py-0.1.1-py3-none-any.whl:

Publisher: publish.yml on canonical/gencodo-py

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

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