为什么这不是Rx的有效架构?

imi*_*ric 6 python schema yaml

我正在使用YAML作为Python项目的配置文件格式.

最近我发现Rx是唯一可用于Python和YAML的模式验证器.: - /Kwalify与YAML一起使用,但它仅适用于Ruby和Java.:(

我一整天都在阅读他们缺乏的文档,似乎无法编写有效的模式来表示我的文件结构.救命?

我有以下YAML配置文件:

cmd:
  exec: mycmd
  aliases: [my, cmd]
  filter:
    sms: 'regex .*'

load:
  exec: load
  filter:
    sms: 'load: .*$'

echo:
  exec: echo %
Run Code Online (Sandbox Code Playgroud)

我没有代表嵌套结构.我想要的是最外面的项目(在这种情况下为cmd,load和echo)是一个任意字符串,而后者又包含其他项目.'exec'是一个固定的字符串和必填项; 'aliases'和'filter'也是固定的,但应该是可选的.过滤器又有另一组必需和可选项.我应该如何用Rx表示这个?

到目前为止,我有以下模式(在YAML中),Rx无法编译:

type: //rec
required:
  type: //rec
  required:
    exec: //str
  optional:
    aliases:
      type: //arr
      contents: //str
      length: {min: 1, max: 10}
    filter:
      type: //rec
      optional:
        sms: //str
        email: //str
        all: //str
Run Code Online (Sandbox Code Playgroud)

在IPython中测试这个给了我:

/Rx.py in make_schema(self, schema)
     68       raise Error('invalid schema argument to make_schema')
     69
---> 70     uri = self.expand_uri(schema["type"])
     71
     72     if not self.type_registry.get(uri): raise "unknown type %s" % uri

KeyError: 'type'
Run Code Online (Sandbox Code Playgroud)

这让我相信我并没有在某处指定"类型".:-S

有任何想法吗?

我很厌倦与这件事打架......还有其他方法我可以编写架构并使用它来验证我的配置文件吗?

提前致谢,

伊万

Dan*_*aft 4

尝试这个:

type: //map
values:
  type: //rec
  required:
    exec: //str
  optional:
    aliases:
      type: //arr
      contents: //str
      length: {min: 1, max: 10}
    filter:
      type: //rec
      optional:
        sms: //str
        email: //str
        all: //str
Run Code Online (Sandbox Code Playgroud)

映射可以包含任何字符串作为键,而记录只能包含“必需”和“可选”中指定的键。