Skip to main content

A minimal command-line interface using plugin-based architecture

Project description

Minimal command-line interface using a plugin-based architecture

This project demonstrates a minimal (but featureful) command-line interface (CLI) using a plugin-based architecture (PBA). The CLI itself is constructed using Typer.

The PBA is achieved using a combination of:

For a working plugin example, see minimal-pba-cli-plugin-example.

Installation

Install the core CLI using the following command:

$ pipx install minimal-pba-cli

Usage

List available commands using the help:

$ pba-cli --help

Plugins

List available plugins using the following command (requires a Libraries.io API key):

LIBRARIES_IO_API_KEY=<your API key> pba-cli plugin catalog

Install a plugin using the following command:

$ pba-cli plugin install <plugin name>

List installed plugins using the following command:

$ pba-cli plugin list

Install a plugin from a local directory using the following command:

$ pba-cli plugin install-local <path to plugin directory>

Uninstall a plugin using the following command:

$ pba-cli plugin uninstall <plugin name>

Custom scripts

To create a custom script that registers in the CLI, create an executable anywhere on your PATH that follows the naming convention minimal-pba-cli-<name>. This script will be registered as a command named <name> in the CLI.

As an example, create a script named minimal-pba-cli-hello with the following content:

#!/usr/bin/env sh

echo "Hello, world!"

Make the script executable:

$ chmod +x minimal-pba-cli-hello

Now, if the script is located in a directory on your PATH, you can run it using the following command:

$ pba-cli hello
Hello, world!

Scripts can be written in any language, as long as they are executable and follow the naming convention:

#!/usr/bin/env python

# minimal-pba-cli-quote

import json
import urllib.request


if __name__ == "__main__":
    response = urllib.request.urlopen("https://zenquotes.io/api/random")
    data = json.loads(response.read().decode("utf-8"))
    print(f"""
"{data[0]['q']}"

- {data[0]['a']}
$ pba-cli quote

"Educating the mind without educating the heart is no education at all."

- Aristotle

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

minimal_pba_cli-0.0.5.tar.gz (7.9 kB view details)

Uploaded Source

Built Distribution

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

minimal_pba_cli-0.0.5-py3-none-any.whl (8.3 kB view details)

Uploaded Python 3

File details

Details for the file minimal_pba_cli-0.0.5.tar.gz.

File metadata

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

File hashes

Hashes for minimal_pba_cli-0.0.5.tar.gz
Algorithm Hash digest
SHA256 609586da1ddeafb900802043eed8aba27f59e2521af8bb1eb4b3d6ccd2927990
MD5 e43b233519a555879500f8dc0c847053
BLAKE2b-256 b8db1b255e1295016c43bdb2006cc3c529bbafdc12c93324c742d8e3c244347b

See more details on using hashes here.

File details

Details for the file minimal_pba_cli-0.0.5-py3-none-any.whl.

File metadata

File hashes

Hashes for minimal_pba_cli-0.0.5-py3-none-any.whl
Algorithm Hash digest
SHA256 11ece826d926401ced28b01cc2921ffe5fd7421b8391ec5f720d1eff51fb3210
MD5 573c2315727123beb67713e4e34a796e
BLAKE2b-256 4ee50bc2653a7ff8643707170623a764acbb9a4938e27d8cbec1c9ff38a48cfe

See more details on using hashes here.

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