OpenAPI Python 生成器 - 从字典转换为模型

OpenAPI Python Generator - convert from dict to model

使用 python 的 openapi 生成器,我得到了一堆生成的模型,我可以像这样实例化它们:

> yoda = Jedi(name="Yoda", light_saber=LightSaber(colour="green"))

我可以使用 .to_dict() 方法轻松地将它们转换为字典:

> yoda.to_dict()
{"name": "Yoda", "light_saber": {"colour": "green"}}

但是我不确定如何从 dict 反序列化回适当的模型。

我尝试了以下方法并遇到类型错误:

> Jedi(**yoda_dict)
...
my_client.exceptions.ApiTypeError: Invalid type for variable 'light_saber'.
Required value type is LightSaber and passed type was dict at ['light_saber']

我也遇到了与 Jedi._from_openapi_data(**yoda_dict)

相同的错误

有没有办法将字典转换为类型化的 openapi 生成模型?

你需要先re-serialize字典里的光剑,然后你可以把它传回给Jedi:

yoda_dict['light_saber'] = LightSaber(**yoda_dict['light_saber'])

Jedi(**yoda_dict)

事实证明,如果您传入 _configuration 属性,openapi 只会尝试转换类型。我能够使用

成功反序列化
from my_client.configuration import Configuration

Jedi(**yoda_dict, _configuration=Configuration())

请注意,我还点击了 this bug,因为我在我的架构中使用了 allOf。所以也不得不降级到openapi generator 5.1.1.