Skip to main content

CliFrame - Python CLI Development Framework

A simple and powerful framework for building interactive command-line applications with dynamic command discovery and hierarchical command organization.

🚀 Features

  • Hierarchical Command Structure - Organize commands in folders and files
  • Dynamic Command Discovery - Automatically discovers commands based on file structure
  • Interactive Shell - Rich interactive CLI with tab completion
  • Built-in Help System - Use ? to get help on any command or subcommand
  • Configuration Mode - Special configuration mode with _configure folder support
  • Rich Text Support - Color formatting and styled output
  • Customizable Prompts - Set custom prompt text and mode indicators
  • Method Chaining - Fluent API for easy CLI setup

📦 Installation

pip install cliframe

🏗️ Quick Start

1. Basic Setup

from cliframe import CliService

# Create and run CLI service
cli = CliService()
cli.motd("Welcome to My CLI App!", rich=True)
cli.prompt("myapp")
cli.run()

2. Command Structure

Organize your commands in a cli/ directory structure:

cli/
├── show/
│   ├── __init__.py          # 'show' command handler
│   ├── users.py             # 'show users' command
│   └── logs/
│       └── __init__.py      # 'show logs' command
├── start.py                 # 'start' command
├── stop.py                  # 'stop' command  
└── _configure/              # Configuration commands
    ├── network.py
    └── system.py

3. Command Handlers

Create command handlers as Python classes:

# cli/start.py
class StartCommand:
    """Start the application service."""
    
    def __init__(self, core):
        self.core = core
    
    def run(self, args=None):
        """Start the service with optional arguments."""
        print("Service started successfully!")
        return "Service is now running"

# Alternative: Use Command or StartCommand class names
class Command:  # Will be auto-discovered
    def run(self, args=None):
        print("Command executed!")

4. Advanced Configuration

from cliframe import CliService

cli = (CliService()
       .folder("/path/to/custom/cli/commands")  # Custom command folder
       .prompt("myapp")                         # Custom prompt
       .prompt_mode_sign("#")                   # Custom prompt sign
       .motd("🎉 Welcome to MyApp CLI!", rich=True))

cli.run()

🎯 Command Organization

File-based Commands

  • command.py → command CLI command
  • Each file should contain a command handler class

Directory-based Commands

  • command/ → command CLI command group
  • command/__init__.py → Handler for base command
  • command/subcommand.py → Handler for command subcommand

Handler Class Discovery

CliFrame looks for handler classes in this order:

  1. StartCommand class
  2. Command class
  3. Any class ending with Command
  4. First class found in the module

🛠️ Interactive Features

Help System

  • Type ? at the end of any command to get help
  • command ? - Shows help for the command
  • command sub ? - Shows help for subcommands

Tab Completion

  • Smart tab completion for all available commands
  • Context-aware completion based on current command path

Configuration Mode

  • Create _configure/ folder for configuration commands
  • Type configure to enter configuration mode
  • Prompt changes to (config)#
  • Type exit to leave configuration mode

📝 Example Usage

# Interactive CLI session
myapp> start ?                    # Get help for start command
myapp> show users                 # Execute show users command  
myapp> configure                  # Enter configuration mode
myapp(config)# network setup      # Run configuration command
myapp(config)# exit               # Exit configuration mode
myapp> exit                       # Exit CLI

🎨 Styling and Output

Color Markers

Use color markers in your command output:

def run(self, args=None):
    return "[green]Success![/green] Operation completed [yellow]successfully[/yellow]"

Available Styles

  • [red]text[/red] - Red text
  • [green]text[/green] - Green text
  • [yellow]text[/yellow] - Yellow text
  • [blue]text[/blue] - Blue text
  • [magenta]text[/magenta] - Magenta text
  • [cyan]text[/cyan] - Cyan text

🔧 API Reference

CliService Class

Methods

  • __init__(core=None, cli_root=None) - Initialize CLI service
  • folder(path) - Set custom CLI commands directory
  • prompt(text) - Set prompt text (default: "cli")
  • prompt_mode_sign(sign) - Set prompt mode sign (default: ">")
  • motd(message, rich=True) - Set message of the day
  • run() - Start the interactive CLI

Method Chaining

All configuration methods return self for easy chaining:

cli = (CliService()
       .folder("./my-commands")
       .prompt("myapp")
       .motd("Welcome!"))

📁 Project Structure

your-project/
├── cli/                    # Default CLI commands directory
│   ├── show/
│   ├── start.py
│   ├── stop.py
│   └── _configure/        # Configuration commands
├── main.py                # Your CLI application entry point
└── requirements.txt

🤝 Contributing

Contributions are welcome! Please feel free to submit a Pull Request.

📄 License

This project is licensed under the MIT License.

Metadata

Release files for cliframe 0.1.1

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for cliframe 0.1.1
File Size Uploaded
cliframe-0.1.1.tar.gz 7.7 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for cliframe 0.1.1
File Interpreter ABI Platform
cliframe-0.1.1-py3-none-any.whl Python 3 none any Details

Total release size: 16.0 kB

Release files / cliframe-0.1.1.tar.gz

Download URL cliframe-0.1.1.tar.gz
Size 7.7 kB
Tags Source
SHA-256 checksum
How to use checksums
8e20205149ba1b0e4002c81689d2c5d35db6e85a6cb3d4542071c03ebe6144e4
BLAKE2b-256 checksum
How to use checksums
9d37ed843d13954a6dd9e69277814c39a73c845c56e1e63b99cf80c86f488619
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.1.0 CPython/3.12.9

Release files / cliframe-0.1.1-py3-none-any.whl

Download URL cliframe-0.1.1-py3-none-any.whl
Size 8.4 kB
Tags Python 3
SHA-256 checksum
How to use checksums
572c8cade1da4943b7384befced6b97abb05c1751782500b8e3383c5bbeff603
BLAKE2b-256 checksum
How to use checksums
8e94227733aa72fa7ea77b32cc452b32218e0207670d8764854c3b6541bda770
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.1.0 CPython/3.12.9

Release history Release notifications | RSS feed

This release

0.1.1 This release

2 release files

0.1.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page