Skip to main content

A library for creating declarative, interactive CLI menus with Pydantic and prompt-toolkit.

Project description

🗿 Typerdantic

Typerdantic is a Python library for building powerful, interactive, and self-documenting command-line interface (CLI) menus. It combines the command-line elegance of Typer, the robust data modeling of Pydantic, and the rich terminal UI capabilities of prompt-toolkit.

The goal is to abstract away the boilerplate of creating interactive menus, allowing developers to define complex, multi-screen applications using simple Pydantic models or configuration files.


Core Features

  • Declarative & Dynamic Menus: Define menus by subclassing TyperdanticMenu or generate them on the fly from configuration files (e.g., YAML, JSON) using a Pydantic-validated schema.
  • External Action Execution: Run shell commands and scripts directly from your menu configuration using action strings like "command::echo Hello" or "script::./deploy.sh".
  • Seamless Navigation: A top-level TyperdanticApp controller manages a single, persistent UI, eliminating screen flashes when navigating between menus.
  • Custom Styling: Theme your entire application by loading a simple TOML style file.
  • Asynchronous by Design: Built with asyncio to handle user input and execute subprocesses without blocking or freezing the UI.

Example Usage

Define your menu in a configuration file, like menu.yml:

# file: menu.yml
doc: My Awesome CLI
items:
  list_files:
    description: List files in the current directory
    action: "command::ls -l"

  run_backup:
    description: Run the backup script
    action: "script::./scripts/backup.sh"

  quit:
    description: Exit the application
    is_quit: true

Then, load and run your application:

# main.py
import asyncio
import yaml
from pathlib import Path
from typerdantic import TyperdanticApp, create_menu_from_config
from typerdantic.config_models import MenuConfig

async def main():
    # Load and parse the YAML configuration
    config_path = Path("menu.yml")
    with open(config_path, "r") as f:
        config_dict = yaml.safe_load(f)

    menu_config = MenuConfig(**config_dict)

    # Create a menu class from the validated config
    MyMenu = create_menu_from_config("MyMenu", menu_config)

    # Create and run the app
    app = TyperdanticApp(main_menu=MyMenu)
    await app.run()

if __name__ == "__main__":
    asyncio.run(main())

Future Goals

  • YAML/JSON Loaders: Add convenience functions like load_menu_from_yaml() to simplify the loading process.
  • Internal Action Registry: Create a system for registering and calling internal Python functions via action strings (e.g., "internal::backup_database").
  • CLI Menu Builder: An interactive command to help scaffold new Typerdantic apps, menus, and actions.
  • More Widgets: Support for forms, confirmation dialogs, and progress bars.

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

typerdantic-1.0.2.tar.gz (15.4 kB view details)

Uploaded Source

Built Distribution

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

typerdantic-1.0.2-py3-none-any.whl (11.6 kB view details)

Uploaded Python 3

File details

Details for the file typerdantic-1.0.2.tar.gz.

File metadata

  • Download URL: typerdantic-1.0.2.tar.gz
  • Upload date:
  • Size: 15.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.12.9

File hashes

Hashes for typerdantic-1.0.2.tar.gz
Algorithm Hash digest
SHA256 fcac809217468bb5fbf553947133b43963d330f5bfd894a0dbcc6b0caf3f5ed0
MD5 3f3475807227c264b5f9bb28b8f6d21a
BLAKE2b-256 741fa55852a0d7833d9c4233632e48d35093e37260ced53c50de601d8e667b31

See more details on using hashes here.

Provenance

The following attestation bundles were made for typerdantic-1.0.2.tar.gz:

Publisher: python-publish.yml on Willmo103/typerdantic

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

File details

Details for the file typerdantic-1.0.2-py3-none-any.whl.

File metadata

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

File hashes

Hashes for typerdantic-1.0.2-py3-none-any.whl
Algorithm Hash digest
SHA256 fba1732f60a065f8b52a6356029cb1cb01ce18460dd0ba64987e4e9e96a97a85
MD5 d6ba3f0945e268ab120492883a979f82
BLAKE2b-256 ae90023476d750a536f28adf196750ca902de5a8d5ad4a44b188426511d7a371

See more details on using hashes here.

Provenance

The following attestation bundles were made for typerdantic-1.0.2-py3-none-any.whl:

Publisher: python-publish.yml on Willmo103/typerdantic

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