Skip to main content

Intuitive CLI framework using argparse, rich, and pydantic

Project description

Treeparse

CLI framework to make tools maximally transparent to LLMs.

Overview

Treeparse is an intuitive CLI framework leveraging argparse, rich, and pydantic to create structured, testable command-line interfaces. It mirrors the tree-like help output of treeclick but uses argparse for parsing and pydantic for model-based definitions.

Key goals include speed, LLM transparency (JSON and rich tree help formats), ease of authoring (especially for AI-generated code).

Demo scripts

Key Features

  • Object-Oriented Structure: Define CLI using Pydantic models: cli, group, command, argument, option.
  • Rich Tree Help: Tree-structured help with branch pruning for subcommands, including higher levels.
  • JSON Output: --json / -j provides syntax-highlighted JSON of the CLI structure for LLM parsing.
  • Parameter Validation: Automatic matching of callback params to CLI definitions (names, types).
  • Sorting: sort_key for ordering elements in help outputs.
  • Type and Default Display: Optional show_types and show_defaults flags to include types and defaults in help.
  • Nargs Support: Handles variable arguments/options (e.g., *, + for lists).
  • Boolean Handling: Supports bool types with string-to-bool conversion.
  • Argparse Abstraction: Users work with models; parsing logic is hidden.
  • Dynamic Alignment: Help text aligns vertically, adjusting for type/default info.

Structure

  • cli: Root with subgroups, commands, options, configs (e.g., show_types, show_defaults).
  • group: Nested groups with subgroups, commands, options.
  • command: Commands with callbacks, arguments, options.
  • argument: Positional args (type, nargs, default, etc.).
  • option: Flags/options (type, nargs, default, etc.).

Models are modularized into files: argument.py, option.py, command.py, group.py, color_config.py, cli.py.

Initialization in __init__.py rebuilds models to handle forward references.

Usage Example

From examples/basic.py:

from treeparse import cli, command

def hello():
    print("Hello, world!")

app = cli(
    name="basic.py",
    help="A basic CLI example.",
    commands=[
        command(
            name="hello",
            help="Print hello world.",
            callback=hello,
        )
    ],
)

def main():
    app.run()

if __name__ == "__main__":
    main()

Run: python examples/basic.py hello

Help Output

Tree-structured help prunes irrelevant branches for subcommands while retaining context. Supports long help text wrapping.

LLM Transparency

  • Rich Tree Format: Visual, human/LLM-readable tree.
  • JSON Format: Structured, parseable output for LLMs.

Current Status

  • Implemented: Model definitions, tree/JSON help, validation, nargs, bool support, type/default display.
  • Examples: basic.py, demo.py (complex), list_demo.py (nargs).
  • Tests: Extensive pytest coverage (validation, execution, outputs) with cov reporting.
  • Tools: Ruff for lint/format, pytest-cov for coverage.

Plan

  • [active], make cli (inherit from) a group, so that a higher level cli can be constructed that can add an existing CLI as a sub-cli without any additional code
    • when this happens, use the layout options (colors, show_types etc) from the new top level

Planned: Config overriding.

License

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

treeparse-0.1.4.tar.gz (1.8 MB view details)

Uploaded Source

Built Distribution

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

treeparse-0.1.4-py3-none-any.whl (15.8 kB view details)

Uploaded Python 3

File details

Details for the file treeparse-0.1.4.tar.gz.

File metadata

  • Download URL: treeparse-0.1.4.tar.gz
  • Upload date:
  • Size: 1.8 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.12.9

File hashes

Hashes for treeparse-0.1.4.tar.gz
Algorithm Hash digest
SHA256 eaae5dbf2aab587932c93856e5920c612be4fe09879d14a8373cdea2963b943a
MD5 7014cb8fbbc943f2295547b355acd525
BLAKE2b-256 8e7b2a2e205aac8650927dca351986613d41d366a7a58e8aff45731033ca09e7

See more details on using hashes here.

Provenance

The following attestation bundles were made for treeparse-0.1.4.tar.gz:

Publisher: publish.yml on wr1/treeparse

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

File details

Details for the file treeparse-0.1.4-py3-none-any.whl.

File metadata

  • Download URL: treeparse-0.1.4-py3-none-any.whl
  • Upload date:
  • Size: 15.8 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.12.9

File hashes

Hashes for treeparse-0.1.4-py3-none-any.whl
Algorithm Hash digest
SHA256 01ad1a034a5eebcadd0d3cf7c6ea96d1e66e5b08650e4d6652e4d9bd545bed4f
MD5 35e264024f66c841131ce6ef24be56a7
BLAKE2b-256 3b631e5a6020c9b39b5e76115f51949fe099ed811842f9c2b1487cea527048a2

See more details on using hashes here.

Provenance

The following attestation bundles were made for treeparse-0.1.4-py3-none-any.whl:

Publisher: publish.yml on wr1/treeparse

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