Skip to content

v3.0.2

Choose a tag to compare

@ae86sen ae86sen released this 22 Aug 07:50
· 6 commits to master since this release
  • 新增
    • multipart/form-data 文件上传支持
      • 在接口类中新增 files 字段,框架在构建请求时自动透传至 multipart 文件构建器,支持 Dict[str, Tuple]List[Tuple[str, Tuple]] 两种形态。
      • 生成的接口类在需要时会内置 files: Union[Dict[str, Any], List[Tuple[str, Any]]] 字段(含描述元数据)。
      • Mock 服务新增上传接口:/api/files/upload/api/files/batch-upload
      • 示例:
@define(kw_only=True)
@router.post("/api/files/upload")
class UploadFileApiFilesUploadPostAPI(BaseAPI[FileUploadDataResponse]):
    """真实的文件上传接口,支持multipart/form-data格式,可以上传实际文件"""

    @define
    class RequestBodyModel:
        description: Optional[str] = field(
            default=None, metadata={"description": "文件描述"}
        )
        category: Optional[str] = field(
            default="general", metadata={"description": "文件分类"}
        )

    request_body: RequestBodyModel
    
    # 新增files字段
    files: Union[Dict[str, Any], List[Tuple[str, Any]]] = field(
        metadata={"description": "file: 要上传的文件"}
    )
    response: Optional[FileUploadDataResponse] = field(default=FileUploadDataResponse)
    endpoint_id: Optional[str] = field(default="upload_file_api_files_upload_post")

# 单文件上传(键为 "file")
res = sys_apis.UploadFileApiFilesUploadPostAPI(
    request_body=sys_apis.UploadFileApiFilesUploadPostAPI.RequestBodyModel(
        description="test", category="test"
    ),
    content_type=ContentType.MULTIPART,
    files={"file": ("test.txt", b"test content", "text/plain")},
).send()

# 批量上传(同键多文件)
res = sys_apis.BatchUploadFilesApiFilesBatchUploadPostAPI(
    request_body=sys_apis.BatchUploadFilesApiFilesBatchUploadPostAPI.RequestBodyModel(
        project="test", version="test"
    ),
    content_type=ContentType.MULTIPART,
    files=[
        ("files", ("test.txt", b"test content", "text/plain")),
        ("files", ("test2.txt", b"test content2", "text/plain")),
    ],
).send()
  • 问题修复

    • 修复 anyOf/oneOf 依赖模型遗漏:穿透 Union/List/Dict 的子类型执行 tag 递归传播,解决如部分接口中部分依赖模型未在models.py中生成的问题。
    • 分组模型收集补强(依赖闭包):按 tag 收集后追加依赖闭包,防止极端情况下的依赖遗漏。
    • 内联请求体 required 正确化:为内联的 RequestBodyModel 正确填充 required 集合,保持与组件 schema 一致。
    • 修复请求体是List[attr_instance]时,无法反序列化的问题,放宽request_body字段限制
    • 修复接生成定义时对于anyOf字段有null时未添加Optional类型的问题
    • 修复Union结构化钩子处理typing泛型失败的问题
  • 内部优化

    • 优化动态导入登录模块方式
  • 迁移建议

    • 如遇models.py中依赖模型缺失,升级至本版本后会自动生成;无需手动干预。
  • 测试与稳定性

    • 新增/调整了 tag 传播与 requestBody 行为的单测,整体用例通过率保持稳定。
  • 关键变更

    • 上传接口支持
    • anyOf/oneOf 依赖生成修复与分组闭包补强
    • 内联 required 正确化
  • 升级方式

pip install -U aomaker
# 或
pip install aomaker==3.0.2

Full Changelog: v3.0.1...v3.0.2