Skip to main content

Pre-commit hook to generate markdown documentation from argparse-based CLI scripts

Project description

argparse_to_md: Argparse to README.md

PyPI - Version CI Python

argparse_to_md tool helps developers of command-line tools written in Python keep the usage instructions in their README.md files up to date. It can automatically update usage instructions in README.md file based on argparse parsers defined in the code. It can be invoked as a pre-commit hook or as a standalone script.

How to use argparse_to_md:

  1. In your CLI tool, move creation of argparse.ArgumentParser into a separate function:
    import argparse
    
    def create_parser() -> argparse.ArgumentParser:
        parser = argparse.ArgumentParser(prog='mytool')
        parser.add_argument(...)
        return parser
    
    def main():
        parser = create_parser()
        parser.parse_args()
    
  2. In your README.md file, add a section where the usage would be described. Replace mytool with the fully qualified name of the module and create_parser with the name of the function which returns an argparse.ArgumentParser.
    ### Usage
    
    <!-- argparse_to_md:mytool:create_parser -->
    <!-- argparse_to_md_end -->
    
  3. Run argparse_to_md, either manually or as a pre-commit hook. The README.md file will be updated, the usage instructions will appear inside this section.
  4. Whenever you modify the parser in your code, re-run argparse_to_md, or let the pre-commit hook run. README.md will be updated with the new usage instructions.

Usage as a pre-commit hook

Add to your .pre-commit-config.yaml. This pre-commit hook will be triggered by changes to all Python or Markdown files, and it will edit README.md:

repos:
-   repo: https://github.com/igrr/argparse_to_md.git
    rev: v0.5.0
    hooks:
    -   id: argparse_to_md

If you need to adjust the list of files to be updated, specify them in args: as follows:

repos:
-   repo: https://github.com/igrr/argparse_to_md.git
    rev: v0.5.0
    hooks:
    -   id: argparse_to_md
        args: [--input=README.md, --input=README_CN.md]

Command-line usage

You can also use argparse_to_md from the command line:

Usage:

argparse_to_md [-h] [-i INPUT [INPUT ...]] [--extra-sys-path EXTRA_SYS_PATH [EXTRA_SYS_PATH ...]]
               [--check] [--version]

Optional arguments:

  • -i INPUT [INPUT ...], --input INPUT [INPUT ...]: Markdown file to update (can be specified multiple times).
  • --extra-sys-path EXTRA_SYS_PATH [EXTRA_SYS_PATH ...]: Extra paths to add to PYTHONPATH before loading the module
  • --check: Check if the files need to be updated, but don't modify them. Non-zero exit code is returned if any file needs to be updated.
  • --version: show program's version number and exit

Customizing output

Output can be customized by passing additional options in the comment:

    <!-- argparse_to_md:module_name:function_name:opt1=value1:opt2=value2 -->
    <!-- argparse_to_md_end -->

The following options are supported:

  • subheading_level (default 0): if set to a non-zero value, the Usage line and all the Usage lines related to subparsers are prefixed with a markdown heading of respective level. For example, when specifying subheading_level=2, the final output will contain ## Usage: instead of Usage:.
  • pad_lists (default 0): if set to 1, an empty line is added before each markdown list. Some markdown renderers require this blank line for proper list rendering.

Related projects

License

This tool is Copyright (c) 2024 Ivan Grokhotkov and distributed under the MIT License.

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

argparse_to_md-0.5.0.tar.gz (17.7 kB view details)

Uploaded Source

Built Distribution

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

argparse_to_md-0.5.0-py3-none-any.whl (11.2 kB view details)

Uploaded Python 3

File details

Details for the file argparse_to_md-0.5.0.tar.gz.

File metadata

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

File hashes

Hashes for argparse_to_md-0.5.0.tar.gz
Algorithm Hash digest
SHA256 1439fb26d3e8e3a54ba74e0c93de9ffa97f3e1855e421cd1ffc92273756b226f
MD5 b46cd4f170559a80a22d1ec70e34adf4
BLAKE2b-256 a01f8e1d5d77c3c79ff043b0ae50206228cb9804b17ec80d61cc2d0aad725e6d

See more details on using hashes here.

Provenance

The following attestation bundles were made for argparse_to_md-0.5.0.tar.gz:

Publisher: main.yml on igrr/argparse_to_md

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

File details

Details for the file argparse_to_md-0.5.0-py3-none-any.whl.

File metadata

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

File hashes

Hashes for argparse_to_md-0.5.0-py3-none-any.whl
Algorithm Hash digest
SHA256 d122b96d6587700f75cbc8150f9fa026e8522852273ef0e8dfa8aae116ac9a8e
MD5 e06898f98b8a035a7ec3ad704bfea0df
BLAKE2b-256 72bc797346ddb49b64d35bad7505cfdd661826e297b2615fa966dc85d82cdb5c

See more details on using hashes here.

Provenance

The following attestation bundles were made for argparse_to_md-0.5.0-py3-none-any.whl:

Publisher: main.yml on igrr/argparse_to_md

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