【问题标题】:Validate object values against yaml configuration根据 yaml 配置验证对象值
【发布时间】:2018-01-12 08:50:38
【问题描述】:

我有一个应用程序,其中嵌套 Python 字典是基于我从 API 获得的 JSON 文档创建的。示例:

colleagues = [
{  "name": "John",
   "skills": ["python", "java", "scala"],
   "job": "developer"
},
{  "name": "George",
   "skills": ["c", "go", "nodejs"],
   "job": "developer"
}]

这个字典可以有更多的嵌套级别。 我想要做的是让用户在 YAML 配置文件中定义他们自己的任意条件(例如,为了找到他们的技能中有“python”或名字是“John”的同事),我将使用它来检查针对 Python 字典。

我曾考虑让他们在 YAML 文件中以以下方式配置它,但这需要使用 exec(),出于安全原因,我想避免这样做:

constraints:
    - "python" in colleagues[x]["skills"]
    - colleagues[x]["name"] == "John"

对于此类问题还有哪些其他选项,以便用户可以为字典值指定自己的约束?同样,上面的字典只是一个例子。实际的尺寸和嵌套级别要大得多。

【问题讨论】:

    标签: python configuration yaml


    【解决方案1】:

    您可以使用 Lucene 查询解析器将 "skill:python""name:John" 等查询转换为可执行的谓词函数,然后使用这些谓词过滤您的同事列表。谷歌搜索“python lucene parser”会出现几个解析选项。

    【讨论】:

    • 是否可以使用获取的 JSON 基于它创建树,然后使用 "skill:python""name:John" 之类的查询来查询树?我只是想确保手动创建树不会有任何开销。
    • 是的,使用 Python 的 json 模块将您的树转换为字典列表,然后使用您从查询中创建的谓词函数过滤掉您想要的字典。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-01-17
    • 1970-01-01
    • 2021-09-28
    • 2016-03-13
    • 2020-03-14
    • 1970-01-01
    • 2020-12-02
    相关资源
    最近更新 更多