CmdKit#
Release v2.7.7. (Tutorial)
The cmdkit library implements a few common patterns needed by well-formed command-line applications in Python. It only touches a few concepts but it implements them well. The idea is to reduce the boilerplate needed to get a full featured CLI off the ground. Applications developed using cmdkit are easy to implement, easy to maintain, and easy to understand.
Features#
An Application
class provides the boilerplate for a good entry-point.
Building your command-line application in layers with ApplicationGroup
let’s you develop simple structures and modules that mirror your CLI.
An Interface
class modifies the behavior of the standard
argparse.ArgumentParser
class to raise simple exceptions instead of exiting.
class Add(Application):
"""Application class for simple adding program."""
interface = Interface('add', USAGE_TEXT, HELP_TEXT)
interface.add_argument('-v', '--version', action='version', version='0.0.1')
lhs: float
rhs: float
interface.add_argument('lhs', type=float)
interface.add_argument('rhs', type=float)
def run(self) -> None:
"""Business logic of the application."""
print(self.lhs + self.rhs)
A Configuration
class makes it basically a one-liner to pull in
a configuration with a dictionary-like interface from a cascade of files as well as
expanding environment variables into a hierarchy and merged.
The standard behavior for any good application is for a configuration to allow for
system-level, user-level, and local configuration to overlap. Merging these should not
clobber the same section in a lower-priority source. The Namespace
class extends the behavior of a standard Python dict to have a depth-first merge for its
update implementation.
config = Configuration.from_local(env=True, prefix='MYAPP', default=default, **paths)
The underlying Namespace
also supports the convention of having
parameters with _env
and _eval
automatically expanded.
[database]
password_eval = "gpg ..."
Accessing the parameter with dot-notation, i.e., config.database.password
would execute
"gpg ..."
as a shell command and return the output.
Installation#
CmdKit is tested on Python 3.7+ for Windows, macOS, and Linux, and can be installed from the Python Package Index using Pip.
$ pip install cmdkit
Getting Started#
Checkout the Tutorial for examples.
You can also checkout how CmdKit is being used by other projects.
Project |
Description |
---|---|
Recommender Engine for Intelligent Transient Tracking |
|
HyperShell is an elegant, cross-platform, high-throughput computing utility for processing shell commands over a distributed, asynchronous queue. |
|
A simple, cross-platform, command-line move-to-trash. |
Table of Contents
- API
cmdkit.app
- Reference
Application
Application.interface
Application.ALLOW_NOARGS
Application.exceptions
Application.log_critical
Application.log_exception
Application.from_cmdline()
Application.from_namespace()
Application.main()
Application.run()
Application.__enter__()
Application.__exit__()
Application.shared
Application.handle_usage()
Application.handle_help()
Application.handle_version()
ApplicationGroup
exit_status
- Reference
cmdkit.cli
cmdkit.namespace
cmdkit.config
cmdkit.logging
- Reference
Logger
LogRecord
LogRecord.app_id
LogRecord.hostname
LogRecord.hostname_short
LogRecord.relative_name
LogRecord.ansi_level
LogRecord.ansi_reset
LogRecord.ansi_bold
LogRecord.ansi_faint
LogRecord.ansi_italic
LogRecord.ansi_underline
LogRecord.ansi_black
LogRecord.ansi_red
LogRecord.ansi_green
LogRecord.ansi_yellow
LogRecord.ansi_blue
LogRecord.ansi_magenta
LogRecord.ansi_cyan
LogRecord.ansi_white
LogRecord.elapsed
LogRecord.elapsed_ms
LogRecord.elapsed_delta
LogRecord.elapsed_hms
HOSTNAME
HOSTNAME_SHORT
INSTANCE
level_by_name
logging_styles
DEFAULT_LOGGING_STYLE
NOTSET
DEVEL
TRACE
DEBUG
INFO
NOTICE
WARNING
ERROR
CRITICAL
- Reference
cmdkit.ansi
cmdkit.platform
- Tutorial
- Blog
- Contributing
- License