用于crowsnest api和插件系统的高级语言

crowsnest-capabilities的Python项目详细描述


#crowsnest功能

*我遇到了99个问题,而命名就是全部问题。*


这个存储库是crowsnest api和
插件系统的高级语言的定义所在。这提供了对所有操作和事件的定义,所有这些操作和事件都是在yaml中完成的(可以在下面解释的`/crowsnest_capabilities/definitions/`;架构中找到)。


这里提供的定义不是设备本身,而是设备的构建块。
设备是一个集合。在这里定义的操作和事件中。



每个条目都包含用于在数据流经
系统时对其进行清理和验证的清理帮助器函数。

作为示例,让我们检查打开设备的通用操作,
`action.generic.power.set`:

``python
>;从Crowsnest_能力导入能力
>;>;power-set=capabilities['action.generic.power.set']
````


此操作的架构为

``yaml
action.generic.power.set:
输入:
值:
-开
-关
输出:{}
异步生成的事件:event.generic.power.changed
```

因此,我们知道输入的有效值是"on"和"off"("python"中的"true"和"false")。
输入用"clean_input()"进行验证和清理:

``python
>;电源设置。清除输入({'value':true})
{'value':true}
>;
>;删除无关项
>;>电源设置。清除输入({'value':false,'foo':'bar})
{'value':false}
>;
>;错误值引发验证错误
>;power_set.clean_input({'value':10})
validationerror:`value`必须是[true,false]
````

`.clean_output()`中的一个,`action`和`event`工作方式相同。

capabilities.group('event.generic.power')
[<;event:event.generic.power.changed>;,<;event:event.generic.power.restarted>;]
>;>;允许任意点数
>;>;capabilities.group('event.generic')\6个events
>;>;capabilities.group('event')。#所有事件
>;>;capabilities.group();所有条目
>;>;>;伪前缀返回空列表
>;>;capabilities.group('asdf')
[]
````


键入>;<;类>;<;属性>;<;交互>;`)对于实现它的每个设备,在语义上应该是相同的。
-示例:
-`action.camera.still.capture`-从相机中捕获静止图像
-`action.microwave.power\u level.set`-设置磁控管的功率级别
-` action.generic.power.set`-打开和关闭设备的主电源`-当磁传感器的值改变时触发(当触发时,设备插件可以使用阈值进行配置)
-`event.generic.boolean.changed`-当两级开关改变状态时触发
-应执行操作和事件(或最终调用的任何操作和事件)明显不同的
-但是,它们应该是相关的,并且能够彼此交互(例如,请求设备的某个操作,导致异步处理成为"事件")
-它们应该很容易在语义上相互关联
-动作和事件应该是规范的它足够简单,不会使它们的使用复杂化,但也足够简单,可以重用。"当我们看到它的时候,我们就会知道它了。"
-输入和输出应该定义得很好,而不是过于复杂的对象。



改编自`/crowsnest_capabilities/definitions/generic.yml`.

``yaml
action.generic.power.get:;定义是type.class.attribute.action
输入:{}此操作没有输入
输出:
值:{output dict有一个名为"value"的条目
有效值:
-on;"value"的有效值为"on"和"off"
-off
异步生成的事件:event.generic.power.changed
这将生成名为event.generic.power.changed的事件#无输出异步生成的事件:event.generic.power.changed


event.generic.power.changed:
输出:与链接到此值的"action.generic.power.get"具有相同的输出-on"value"字段使用有效的"u"值,简写为
-off
```

级别项必须是格式"<;type>;<;class>;<;attribute>;<;interaction>;"的唯一4点分隔名称,例如"action.generic.power.set`
-`action`项必须是具有以下键的字典:
-`inputs`:发送到描述要执行的操作的设备
-`outputs`:数据通过架构(见下文)作为响应发送
-`async_generated_event`:如果异步处理,此操作将转换为事件的完全限定名,例如"event.generic.power.changed`
-`event`实体必须是具有以下键的字典:
-`outputs`:data pass through schema(见下文)由描述发生了什么的设备发送
-"data pass through schema"(用于通过crowsnest)是一个
键字典,其中每个键都是数据项的名称。例如,如果要发送
`{value:10}`,则"value"是定义为整数字段的项的名称。
-每个数据项都是一个字典,可以定义以下任何一种:
-`type`:数据字段类型之一:`//str`,`//num`,`//int`,`//bool`,或`//bytes`
-`valid\u values`:允许值的列表
-`required`:布尔值,指定字段是否需要有效;默认值为'yes`
-`default`:默认值(如果未提供);表示'required:no`
-虽然不严格必修的,强烈建议您提供"type"或"valid\u values"
,除非您能够充分说明为什么需要完整的泛型。
-对于简单的情况,有几个快捷方式:
-您可以直接提供"type"值作为数据的值条目。

这意味着

条目:
type://str



entry://str
是等价的。
-您可以直接提供一个"有效值"列表作为数据条目的值。

这意味着

条目:
有效的_值:
-红色
-绿色
-蓝色


条目:
-红色
-绿色
-蓝色
等同。
-`有效的'u值'必须与类型完全匹配,而'type'条目通常会尝试将
强制为正确的类型。例如,
-`//bool`将把`"foo"`和`1`强制为` true`;``,`0`和`null`强制为` false`
-`yes`和`no`的有效值将要求布尔值(无协同)



分叉并创建一个请求。请务必遵守
指南,因为我们要求严格遵守"拉"请求。所有新提交的
将在接受之前接受审查;这些定义旨在为所有CrowsNet设备提供一致的体验。


欢迎提出意见、评论和建议!

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

推荐PyPI第三方库


热门话题
java变量始终存储0值。为什么?   如何使用Java/REST将Azure blob从一个存储容器移动到另一个存储容器?   java将commons DBCP从1.2升级到1.4,我应该害怕吗?   java如何使用分隔符拆分字符串?   java使用数组读取json对象   java在groovy中切片字符串   交换数组java的两个邻域元素   java移动用于确定字符串是否为回文的逻辑   java Android应用程序在一个活动中崩溃   java Sparkjava将webapp文件夹设置为静态资源/模板的文件夹   java复杂条件表达式,用户易用。   java如何仅在表存在时从表中选择值   java I无法将数据从Recyclerview传递到其他活动   java数据结构最佳设计(大数据)   java Android从DatePickerDialogFragment中删除日历视图   java将数据从Firebase获取到片段   数组。sort()在java中运行不正常