Skip to main content

A lightweight and minimal CLI framework

Project description

[!IMPORTANT] While foxcli is in development, breaking changes may be made without bumping the major version!

foxcli is a minimal-by-design CLI framework for Python.

There are many great CLI frameworks out there, but some features I like in one aren't present in another. Likewise, one framework I like may have features that I don't like or has a bunch of extra features that I don't need.

foxcli being minimal-by-design means that it does not include any built-in commands, no TUI helpers, no command usage generation. You will have to handle all of this yourself.

This framework features:

  • Class-based commands + being able to subclass its Command class
  • Multi-level commands (like user create)
  • Global options that can appear anywhere in command invocation

foxcli is still very much in early development but certainly usable, in fact I am using it in a testdrive with my project WinUtils!

Planned features include:

  • Counted arguments like -vvv
  • Overriding error messages

Installation

pip install foxcli

Sample

from sys import exit
from foxcli.cli import CLI
from foxcli.command import Command
from foxcli.argument import Argument
from foxcli.option import Opt, Option

app = CLI(
    name='myapp',
    version='1.0.0',
    description='My app',
    global_options=[
        # global options, accessible in commands via `self.ctx.global_options`
        Option(name='verbose', short='v', default=False, help='Show verbose output'),
    ]
)

@app.command()
class Version(Command):
    name = 'version'
    description = 'Show version'

    def run(self, args) -> int:
        print(self.ctx.cli.version)
        return 0

# subclassing `Command` to add options
class UserableCommand(Command):
    arguments = [
        Argument('username'),  # supports `nargs` which takes int, '*', '+', and '?'. defaults to 1, which implicitly makes it required
    ]

@app.command()
class User(Command):
    name = 'user'
    aliases = ['u']
    description = 'User management commands'

# multi-level command
@app.command(parent='user')
class UserCreate(UserableCommand):
    name = 'create'
    description = 'Creates a new user'
    aliases = ['c', 'add']
    arguments = [
        # positional arguments
        Argument('avatar', default='https://website.com/image.png'),  # supports default values
    ]
    options = [
        Opt('rank', short='r', required=True)  # shortcut for `Option`, `Arg` also exists
    ]

    # `myapp user add Caim -r "Super Admin" -v`
    def run(self, args) -> int:
        # self.ctx.global_options.get('verbose', bool) -> True
        print(self.ctx.global_options.to_dict())  # {'verbose': True}

        # args.get('username', str) -> 'Caim'
        # args.get('avatar', str) -> 'https://website.com/image.png'
        # args.get('rank', str) -> 'Super Admin'
        print(args.to_dict())  # {'username': 'Caim', 'avatar': 'https://website.com/image.png', 'rank': 'Super Admin'}
        return 0

exit(app.run())

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

foxcli-0.3.0.tar.gz (7.2 kB view details)

Uploaded Source

Built Distribution

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

foxcli-0.3.0-py3-none-any.whl (9.7 kB view details)

Uploaded Python 3

File details

Details for the file foxcli-0.3.0.tar.gz.

File metadata

  • Download URL: foxcli-0.3.0.tar.gz
  • Upload date:
  • Size: 7.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.13.9

File hashes

Hashes for foxcli-0.3.0.tar.gz
Algorithm Hash digest
SHA256 e6f5c9f59afb5671746afc41029be73ec77515f13e7c3e00a717603f2b530b0e
MD5 ee9f3f2f8d46665cfe32c957dbcd229e
BLAKE2b-256 74004a82ce3d069d758f790d35358327e0c333e68f79a750be971f8f4caf79cf

See more details on using hashes here.

File details

Details for the file foxcli-0.3.0-py3-none-any.whl.

File metadata

  • Download URL: foxcli-0.3.0-py3-none-any.whl
  • Upload date:
  • Size: 9.7 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.13.9

File hashes

Hashes for foxcli-0.3.0-py3-none-any.whl
Algorithm Hash digest
SHA256 cc50df6668cbffeab1d0cd7487792fbc735b3b985fe1162b0eb79848b172af91
MD5 b07b216f86e5cfc2099a70245a866ef5
BLAKE2b-256 5be2ccfd9631e1a60431daf5bd00a6ff671ccc84d657253514c54eafba6f24da

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