跳转到主要内容

实现DevAssistant PingPong协议的库

项目描述

实现用于DevAssistant和PingPong脚本(即可执行助手)之间通信的协议的库。协议规范可在 TODO:link 找到。

请注意,此库实现了“服务器”和“客户端”两方。只有DevAssistant本身使用“服务器”方。如果您正在考虑为另一种语言实现DevAssistant PingPong库,您只需要实现“客户端”。

用法

要编写一个简单的PingPong脚本,您需要创建一个最小的Yaml助手,该助手指定了元数据,运行PingPong脚本(在这种情况下是一个Python 3脚本)所需的依赖项

fullname: PingPong script example
description: A simple PingPong script using DevAssistant PingPong protocol

dependencies:
# TODO: once dapp library is on PyPI/packaged in Fedora, it should also be added to list of deps
- rpm: [python3]

args:
  name:
    flags: [-n, --name]
    help: Please provide your name.

files:
  script: &script
    source: script.py

run:
- pingpong: python3 *script

假设上述助手是 ~/.devassistant/assistants/crt/test.yaml。相应的PingPong脚本必须是 ~/.devassistant/files/crt/test/script.py,可以看起来像这样

#!/usr/bin/python3
import dapp

class MyScript(dapp.DAPPClient):
    def run(self, ctxt):
        if 'name' in ctxt:
            name = ctxt['name'].capitalize()
        else:
            name = 'Stranger'
        self.call_command(ctxt, 'log_i', 'Hello {n}!'.format(n=name))
        return (True, 'I greeted him!')

if __name__ == '__main__':
    MyScript().pingpong()

注意事项

  • PingPong脚本类必须继承 dapp.DAPPClient

  • run 方法必须接受两个参数,self(指向对象的Python特定参数)和ctxt。ctxt是一个字典(Python映射类型),它包含Yaml DSL的全局上下文(例如,如果用户在命令行/ GUI中指定了name参数,它包含该参数)。

  • 您可以通过调用 call_command 方法利用DevAssistant命令[1]。这需要三个参数 - 全局上下文,命令类型命令输入。第一个是(可能已修改的)传递给run方法的上下文,其他两个与[1]中解释的相同。

  • 在运行命令时,ctxt 字典可能会被修改,请检查每个特定命令的文档,以了解其功能以及是否会在全局范围内修改任何内容。

  • call_command 方法返回一个 2-元组 - 逻辑结果命令结果。同样,所有命令都已在 [1] 中进行文档记录。

  • run 方法必须返回一个 2-元组 - 一个 逻辑结果(例如 True/False)和一个 结果,就像任何其他命令一样。

  • 如果您想使助手修改全局上下文,只需修改 ctxt 变量。然后,在 Yaml 文件中运行 pingpong 后的所有命令都将看到您所做的所有修改。

  • 注意,要实际启动 PingPong 脚本,您必须调用脚本类的 pingpong() 方法,而不是 run() 方法。

[1] http://docs.devassistant.org/en/latest/developer_documentation/command_reference.html

项目详情


下载文件

下载您平台上的文件。如果您不确定选择哪个,请了解有关 安装包 的更多信息。

源分布

dapp-0.3.0.tar.gz (17.7 kB 查看散列

上传时间

支持