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.0.tar.gz (14.3 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.0-py3-none-any.whl (9.9 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: gencodo_py-0.1.0.tar.gz
  • Upload date:
  • Size: 14.3 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.0.tar.gz
Algorithm Hash digest
SHA256 b654a4e39b9a637066fcb9a85092b3c4a398a7ecb5e57a3dce1ebddea3ea898e
MD5 bb3270aa33a412f669822afd4f08194d
BLAKE2b-256 6082df57339532a15527264cb1977ff0e7c3a12a232fc27b491690cb25a1b346

See more details on using hashes here.

Provenance

The following attestation bundles were made for gencodo_py-0.1.0.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.0-py3-none-any.whl.

File metadata

  • Download URL: gencodo_py-0.1.0-py3-none-any.whl
  • Upload date:
  • Size: 9.9 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.0-py3-none-any.whl
Algorithm Hash digest
SHA256 7c836479555455239f918df32d715b146b73f0d88bf096d5a8cf9dcae8f5e01f
MD5 69953c8fc923dbfe347b0ca6b0ed0d49
BLAKE2b-256 48775c7e06061338d98378fc7bfbe7b1400328089cd84e44921df3d722e0455b

See more details on using hashes here.

Provenance

The following attestation bundles were made for gencodo_py-0.1.0-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