【问题标题】:Voluptuous: Validate dicts within dictsVoluptuous:在 dicts 中验证 dicts
【发布时间】:2018-07-10 20:24:36
【问题描述】:

我想验证以下 YAML 文件定义了一个 defaultdict,其中包含两个名为 devshadicts。

 !!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})

这成功验证了我有一个defaultdict,其中包含两个dicts。我想验证这两个字典中的shaurl 标签真的是str(以后可能会进行更多验证。)

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

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

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

【问题讨论】:

    标签: python validation dictionary voluptuous


    【解决方案1】:

    结果一个答案是将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})
    

    【讨论】:

      猜你喜欢
      • 2019-08-28
      • 2018-04-30
      • 2013-03-05
      • 2015-06-08
      • 1970-01-01
      • 2021-09-12
      • 1970-01-01
      • 2018-07-12
      • 2014-02-20
      相关资源
      最近更新 更多