实现devassistant乒乓协议的库

dapp的Python项目详细描述


用于devassistant与pingpong通信的库实现协议 脚本(也称为可执行助手)。协议规范可以在todo:link中找到。

注意,这个库同时实现了“服务器”和“客户端”。“服务器”端 只供贬值者自己使用。如果您正在考虑实现一个devassistant 对于另一种语言的乒乓库,只需要实现“客户端”。

用法

要编写一个简单的乒乓球脚本,您需要创建一个最小的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。这个 对应的乒乓球脚本必须是~/.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(指向 对象)和ctxtctxt是一个dict(python映射类型),它保存全局 yaml dsl的上下文(例如,如果是由用户指定的,它包含name参数 在命令行/在gui中)。
  • 您可以通过调用call_command方法来利用devassistant命令[1]。这需要三个 参数-全局上下文,命令类型命令输入。第一个是(可能修改) 传递给run方法和其他两个方法的上下文与[1]中解释的相同。
  • 可以通过运行命令修改ctxtdict,检查 查看它在全局上下文中做什么以及是否修改任何内容的特定命令。
  • 方法call_command返回命令的2元组-逻辑结果结果。 同样,在[1]中记录了所有命令。
  • run方法必须返回一个2元组-a逻辑结果(例如True/False)和一个 result,就像任何其他命令一样。
  • 如果希望助手修改全局上下文,只需修改ctxt变量。 所有可能在yaml文件中的pingpong之后运行的命令都将看到 你所做的修改。
  • 注意,要真正启动pingpong脚本,必须调用pingpong()方法 脚本类的不是方法run()

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

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
javascript如何从Java中的seleniun访问Chrome上的PDF查看器DOM?   如何打印字符串中的大写字母数   java使用htmlUnit处理动态html表单   java等待事件分派线程创建的GUI   java如何在屏幕上移动/动画单个子类对象而不移动其他子类?   java拟合是从PRNG到最大-最小范围的结果   java如何隐藏所有其他片段   java OpenGL ES纹理图谱失真   java排队/退队或报价/投票   java step/stp文件在另外两个点之间的距离   java如何设置水平仪栏的动画?   在Flex和Java中压缩和解压缩XML   java如何使用AutoIt安装JRE   java我想删除NavigationView布局上的一个栏   java Android Studio按钮小部件OnClick。找不到函数   java ImageView隐藏和显示   java类型的方法和构造函数未定义   swing Java UDP数据包未从客户端程序到达服务器程序   java如何在我自己的服务器上配置推送通知?