基准 – 扩展命令行界面

除了框架自带的命令之外,Frappe 的 bench_manager 模块还会搜索
你的自定义应用中的任何命令。因此,bench 会与
对应 bench 的 Frappe 进行通信,而 Frappe 又会检查
所有应用中可用的命令。

要让你的自定义命令对 bench 可用,只需在你的父模块下创建一个 commands 模块,
并使用 click 包装器编写命令,同时定义一个
名为 commands 的变量,其中包含一组 click 函数,也就是你自己的
命令。

带有 Frappe 应用 flags 的目录结构可以这样理解:

frappe-bench
|──apps
 |── frappe
 ├── flags
 │ ├── README.md
 │ ├── flags
 │ │ ├── commands <------ commands module
 │ ├── license.txt
 │ ├── requirements.txt
 │ └── setup.py

commands 模块可以是一个单独的文件,比如 commands.py,也可以是一个
包含 __init__.py 文件的目录。对于一个名为 ‘flags’ 的自定义应用,
可以举例如下

# file_path: frappe-bench/apps/flags/flags/commands.py
import click

@click.command('set-flags')
@click.argument('state', type=click.Choice(['on', 'off']))
def set_flags(state):
 from flags.utils import set_flags
 set_flags(state=state)

commands = [
 set_flags
]

并且在当前 bench 的上下文中,这个命令可以简单地这样执行

➜ bench set-flags
Flags are set to state: 'on'