人性化的CLI构建器
项目描述
人性化的CLI构建器。
安装
pip安装manage.py
快速入门
cat manage.py
from manager import Manager
manager = Manager()
@manager.command
def echo(text, capitalyze=False):
"""print the given <name>"""
if capitalyze:
text = text.upper()
return text
if __name__ == '__main__':
manager.main()
manage --help:
usage: manage [<namespace>.]<command> [<args>] positional arguments: command the command to run optional arguments: -h, --help show this help message and exit available commands: echo print the given <name>
manage echo --help:
$ manage echo --help usage: manage [-h] [--capitalyze] text print the given <name> positional arguments: text no description optional arguments: -h, --help show this help message and exit --capitalyze no description
管理器
管理器可以通过合并来一起使用
from third_party import manager
my_app_manager.merge(manager)
# Merge within a new namespace:
my_app_manager.merge(manager, namespace='third_party')
命令
命令可以在命名空间内组织
@manager.command(namespace='config')
def set(key, value):
# ...
参数
目前,该框架将假设具有默认值的参数是键值参数(--arg value),而必需参数是位置参数。
换句话说,这个定义
@manager.command
def create(user):
pass
将期望以下类型的调用
$ manage create foobar
和 user 在 create() 中将取 'foobar' 的值。
另一方面,这是
@manager.command
def create(user=''):
pass
将期望以下类型的调用
$ manage create --user foobar
缺点很明显,目前无法有必需的非位置参数。
参数定义可以被覆盖
@manager.arg('first_arg', help='this is help for first arg')
@manager.command
def my_command(first_arg):
# ...
参数可以被提示
@manager.prompt('password', hidden=True, confirm=True)
@manager.command
def connect(username, password):
# ...
环境
环境变量可以从 .env 文件中以 key=value 对的形式获取。
可以使用 Manager.env 装饰器强制使用环境变量
@manager.env('MY_ENV_VAR')
@manager.command
def my_command():
return os.environ['MY_ENV_VAR']