swagger接口文档生成接口定义时,Model类的名称可以自定义吗; 以及嵌套schema时,用例数据不能自动识别为嵌套的Model类
- schema名称是带版本号的, 生成的Model类名中有版本号信息;如果版本号更新,下次生成的Model就是另外一个了, 导致用例中用到Model类的地方要修改(为什么会用到Model类,见2) —— 请问下,Model类的名称可以在哪自定义规则啊
- schema中嵌套schema的情况,比如body中有一个参数Products: List[ProductModel], Products用例数据不能直接用dict,需要用ProductModel来预处理, 不然unstructure_RequestBodyModel时,导致instance.ProductId 提示“AttributeError: 'dict' object has no attribute 'ProductId'”
1.Model类名不支持修改。 原则上不应该用schema名称去做迭代区分,可以放到元数据中或其他地方。 接口定义和依赖模型的迭代管理是下一个版本做的feat。
2.参数中有依赖模型的地方,都需要进行实例化,而不能直接用字典
-
Model类名自带版本号的,我最后直接改normalize_class_name进行处理了,这样下次生成的时候,model的名称不会变动。 —— 这种是不是可以考虑加一个自定义配置,允许用户进行一定程度的调整
-
实例化时,直接用cattrs的Converter可以成功,用aomaker中的Converter会失败,定位到是_register_union_structure_hooks()导致,原因未分析出来(这个也会影响response的结构化,目前我没有用到Union类型的字段,所以本地注释掉了这行代码)
- 实例化时,直接用cattrs的Converter可以成功,用aomaker中的Converter会失败,定位到是_register_union_structure_hooks()导致,原因未分析出来
升级到v3.0.2试试
- 实例化时,直接用cattrs的Converter可以成功,用aomaker中的Converter会失败,定位到是_register_union_structure_hooks()导致,原因未分析出来
升级到v3.0.2试试
升到v3.0.2了,list[dict]在hook中直接返回了本身,没有先剥离list,再对里面的dict模型化
示例如下:
request_body = {
"departmentId": "1",
"cooperationProducts": [
{
"promotionProductId": "2501061645230001",
"sellerId": "72",
}
],
}
@define(kw_only=True)
class Product:
promotionProductId: Optional[str] = field(default=None)
sellerId: Optional[str] = field(default=None)
@define(kw_only=True)
class RequestBodyModel:
departmentId: Optional[str] = field(default=None)
cooperationProducts: Optional[
List[Product]
] = field(default=None)
from aomaker.core.converters import cattrs_converter
data_converter = cattrs_converter
res = data_converter.structure(request_body, RequestBodyModel)
print(res)
-
不注释_register_union_structure_hooks(),转出来是RequestBodyModel(departmentId='1', cooperationProducts=[{'promotionProductId': '2501061645230001', 'sellerId': '72'}]);
-
注释了转出来是RequestBodyModel(departmentId='1', cooperationProducts=[Product(promotionProductId='2501061645230001', sellerId='72')])
已知问题,v3.0.3已修复