性感:验证字典中的字典



>我想验证以下 YAML 文件定义了一个包含两个dict defaultdict,分别名为 devsha

 !!python/object/apply:collections.defaultdict
 args:
 - !!python/name:builtins.dict ''
 dictitems:
   dev:
     sha: 5b7
     url: /path/to/here
   shared:
     sha: 58a
     url: /path/to/there

使用 yaml.load() ( safe_load() 会导致一个完全不同的创建构造函数的问题,所以让我们把它放在一边。 给了我这个数据结构:

 defaultdict(<class 'dict'>, {'dev': {'sha': '5b7', 'url': '/path/to/here'}, 
                             'shared': {'sha': '58a', 'url': '/path/to/there'}})

我想验证此数据结构,因此我创建了以下内容:

 snapshot_schema = val.Schema({"dictitems":dict,"dev":dict,"shared":dict})

这成功地验证了我有一个包含两个dictsdefaultdict。 我想验证这两个词典中的shaurl标签是否真的str(稍后可能会进行更多验证(。

我可以创建一个额外的架构

 new_schema = Schema({'sha':str, 'url':str})
 new_schema(my_data['dev'])
 new_schema(my_data['shared'])

但是有没有更优雅的方法呢?

事实证明,一个答案是将new_schema放入snapshot_schema

   repo_schema = Schema({"sha":str,"url":str})
   snapshot_schema = Schema({"dictitems":dict,"dev":repo_schema,
                                                  "shared":repo_schema})

我也猜你可以做:

snapshot_schema=Schema({"dictitems":dict,   "dev":{"sha":str,"url":str},
                                         "shared":{"sha":str,"url":str})

最新更新