从YAML OpenAPI规范中删除字段

时间:2019-04-26 14:28:04

标签: yaml openapi

我需要从我的OpenAPI规范中的每个方法中删除> Means <- colMeans(df)+10 > ind <- sapply(seq_along(Means), function(i) df[,i] > Means[i] ) > df[rowSums(ind*1) == ncol(df), ] cola colb colc 6 64.03106 83.72956 81.05986 字段。 规范必须采用YAML格式,因为转换为JSON会在以后发布时引起问题。

我找不到为此准备的工具,并且我的编程能力不足。我用ruamel.yaml尝试了Python,但是什么都做不到。

我乐于接受任何有关如何解决此问题的建议-在某个地方有一个现成的工具的回购,有关在Python中尝试使用什么的提示...我的想法不对。

也许是一个正则表达式可以捕获所有tags实例的所有情况,所以我可以进行搜索并用Python替换,而不用什么替换它们?空行似乎不会破坏发布引擎。

这是一个样例YAML(我知道这不是适当的规范,只想显示YAML tags的位置)

tags

我需要完全摆脱所有openapi: 3.0.0 info: title: "" description: "" paths: /endpoint get: tags: - tag1 - tag3 #rest of GET definition post: tags: - tag2 /anotherEndpoint post: tags: - tag1 数组(而不仅仅是使它们为空)

1 个答案:

答案 0 :(得分:0)

我不确定为什么使用Python + ruamel.yaml无法实现任何目标。保证您的规格 在文件input.yaml中:

import sys
from pathlib import Path
import ruamel.yaml

in_file = Path('input.yaml')
out_file = Path('output.yaml')

yaml = ruamel.yaml.YAML()
yaml.indent(mapping=4, sequence=4, offset=2)
yaml.preserve_quotes = True
data = yaml.load(in_file)

# if you only have the three instances of 'tags', you can hard-code them:
# del data['paths']['/endpoint']['get']['tags']
# del data['paths']['/endpoint']['post']['tags']
# del data['paths']['/anotherEndpoint']['post']['tags']

# generic recursive removal of any key names 'tags' in the datastructure:
def rm_tags(d):
    if isinstance(d, dict):
        if 'tags' in d:
            del d['tags']
        for k in d:
            rm_tags(d[k])
    elif isinstance(d, list):
        for item in d:
            rm_tags(item)

rm_tags(data)

yaml.dump(data, out_file)

其为output.yaml

openapi: 3.0.0
info:
    title: ""
    description: ""
paths:
    /endpoint:
        get: {}
        post: {}
    /anotherEndpoint:
        post: {}

如果需要,您可以将data写回input.yaml

请注意,通常会保留评论#rest of GET definition,但 现在不存在,因为它在加载期间与之前的密钥相关联,并且该密钥被删除了。