实现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第三方库


热门话题
手机上的html调试Java web应用程序   Java当前日期和过去日期之间的差值,以年、月、日、小时、分、秒为单位   如果方法名称相同,java如何使扩展类不从上面的类触发方法?   即使在提供了准确的firebase引用之后,java仍出现“无法跳转到类型”异常。请看详情   jar文件中的java图像   java如何避免从缓存读取时修改相同的对象实例?   Android中java完全控制的线程队列   JTextArea中的java计算   java如何独立运行。jar作为64位mashine上的32位   java在尝试实例化自引用泛型类的实例时,如何处理自引用类型参数   java如何安装着色jar而不是原来的jar   java在resultSet之后使用If-Else   多线程是java。朗,反思一下。方法调用线程安全   java 7语言向后兼容性   Objective C中的Category和Java 8中的Default方法是否等效?