【发布时间】:2018-02-04 02:20:41
【问题描述】:
我已经定义了一个 swagger 2.0 模型。我现在想针对 swagger 模型验证一些 json 文件。这可以毫无问题地完成:
from bravado_core.spec import Spec
from bravado_core.validate import validate_object
...
dir_path = os.path.dirname(os.path.abspath(__file__))
spec_path = os.path.join(dir_path, "schema_3.yaml")
spec_dict = get_swagger_spec()
spec = Spec.from_dict(spec_dict, config=bravado_config)
...
ConfigObjDict = spec_dict['definitions']['Configuration']
...
def validate(configuration):
validate_object(spec, ConfigObjDict, configuration)
...
with open('sample_3.json') as f:
configuration = json.loads(f.read())
validate(configuration)
我遇到的问题是,在 swagger 文件中,我定义了一些与定义或项目关联的默认值,如果 json 文件根本不包含该项目,我想设置相对默认值,我该怎么办?
我尝试使用 unmarshal 或挖掘 bravado-core 模块 (handle_null_value),但目前没有运气。
我最终尝试循环进入 json 对象及其相关定义,例如:
def set_defaults(in_spec, out_dict):
in_spec = spec.deref(in_spec)
pprint.pprint(in_spec)
pprint.pprint(out_dict)
for k_spec in in_spec:
print k_spec
if k_spec not in out_dict:
try:
d_value = in_spec[k_spec]['default']
out_dict[k_spec] = d_value
except:
pass
但我被卡住了,因为我不知道如何取消引用......(当然这样的解决方案应该是递归的)
任何帮助或建议将不胜感激
非常感谢。
【问题讨论】: