除了框架自带的命令之外,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'