handler#
Alfred workflow handler module.
- class afwf.handler.Handler(id)[source]#
[CN]
Handler 主要负责处理 Input Output 逻辑. 在 Alfred Workflow 的编程模型中, Input 是 搜索框的字符串. Output 则是 Drop Down menu 所需的 Item, 以及一些 Variables, Rerun Setting. 这些信息被放在
ScriptFilter
这个 Data Container 类中.你在 Script Filter 中的 Script 一栏中填写如下信息的时:
${path_to_python} main.py '${handler_id} ${query}'
其行为等效于使用
${path_to_python}
的 Python 解释器, 调用跟${handler_id}
所对应的Handler
类中的handler(query)
方法.Handler 必须实现下面这些抽象方法.
- main(**kwargs) ScriptFilter [source]#
[CN]
用来处理 Script Filter 的具体业务逻辑的主方法. 是一个抽象方法. 你需要 override 这个方法 并给予具体的实现.
该方法可以接收任何自定义的参数, 并必须返回一个
ScriptFilter
对象, 里面包含了Alfred 对话框里的 Drop Down Menu 中的Item
对象.在设计上, 这个方法应该着眼于核心业务逻辑, 并且可以被单元测试充分覆盖. 在单元测试中, 你可以调用这个方法传入各种可能得参数组合, 并返回一个
ScriptFilter
, 然后检查里面的 items 是否符合预期.
- parse_query(query: str) Dict[str, Any] [source]#
[CN]
一个抽象方法. 用来解析 Script Filter 传入的 query 字符串. 返回的字典要和
main()
中的参数一一对应. 注意, 即使是空字符串, 返回的字典也必须包含所有的参数.- Parameters:
query – 你在 Alfred Workflow UI 中跟在 keyword 之后的 query 字符串.
- Returns:
一个字典, 它和
main()
中的参数一一对应.
- handler(query: str) ScriptFilter [source]#
[CN]
该方法对
main()
进行的一层封装. 只不过接收的参数是一个 query string, 也就是你在 Script Filter Widget 里面定义的/usr/bin/python3 main.py '{handler_id} {query}'
中的 query 部分.该方法的主要工作是调用
parse_query()
, 将 query 解析成结构化的参数, 然后传给main()
进行处理.- Parameters:
query – 你在 Alfred Workflow UI 中跟在 keyword 之后的 query 字符串.
- Returns:
ScriptFilter
对象.
- encode_run_script_command(bin_python: Union[str, Path, Any], **kwargs) str [source]#
将
main()
中的参数编码为 Alfred Workflow 中的 Run Script 的 bash command. 当你定义按下 Enter 后所对应的行为是执行某个复杂的 Python 函数的时候, 该方法就可以将 bash command 编码为 arg, 并传给 “Run Script” action.- Parameters:
bin_python – 运行 Alfred Workflow 所用的 Python 解释器的绝对路径.
- Returns:
Alfred Workflow 中的 Script Filter 底层实际执行的 bash command 命令.
- run_script_command(bin_python: Union[str, Path, Any], dir_workflow: Union[str, Path, Any], query: str, verbose: bool = False) Optional[str] [source]#
模拟 Alfred Workflow UI 中的行为. 执行 UI 界面底层对应的
Script
. 当 UI 工作不符合预期时, 可以用这个方法 debug, 执行底层的 Python 代码.- Parameters:
bin_python – 运行 Alfred Workflow 所用的 Python 解释器的绝对路径.
dir_workflow – Alfred Workflow 中
/path/to/Alfred.alfredpreferences/workflows/user.workflow.ABCD1234-A1B2-C3D4-E5F6-A1B2C3D4E5F6
这个目录的绝对路径.query – 你在 Alfred UI 中输入的 query 内容.
verbose – 是否打印出执行的 bash command.
- Returns:
Alfred Workflow 中的 Script Filter 底层实际执行的 bash command 命令 所返回的 JSON 字符串. 如果是 None 则表示该命令没有返回值.