openapi-generators / openapi-generators/openapi-python-client

String enum values containing ³ character do not get properly sanitized

未關閉
#1,327 0 則留言 0 個 reaction 已指派 0 人 在 GitHub 檢視

還沒有人認領這個 Issue。

主要語言
Python
星號
2k
分支
293
平均合併
34 分鐘
30 天內合併 PR
1

描述

Describe the bug
The ³ character in string enum values does not get sanitized out before creating enum names, resulting in invalid generated code.

OpenAPI Spec File

openapi: 3.0.0
info:
  title: Test API for Nm³ Enum Issue
  version: 1.0.0
  description: Minimal API to reproduce enum generation issue with Unicode characters

servers:
  - url: https://api.example.com

paths:
  /volume:
    get:
      summary: Get volume measurements
      responses:
        '200':
          description: Volume measurement response
          content:
            application/json:
              schema:
                type: object
                properties:
                  unit:
                    $ref: '#/components/schemas/VolumeUnit'
                  value:
                    type: number

components:
  schemas:
    VolumeUnit:
      type: string
      enum:
        - "Nm³"
        - "m³"
        - "ft³"
        - "normal_value"
      description: Volume unit with problematic Unicode superscript characters

On WSL, I checked out the latest version of the generator and ran

pip3 install -e .
python3 -m openapi_python_client generate --path repro.yaml --output-path test_output

Which resulted in the following ./test_output/test_api_for_nm_³_enum_issue_client/models/volume_unit.py (along with a pile of ruff errors)

from enum import Enum

class VolumeUnit(str, Enum):
    FT³ = "ft³"
    M³ = "m³"
    NM³ = "Nm³"
    NORMAL_VALUE = "normal_value"

    def __str__(self) -> str:
        return str(self.value)

Which is not legal python.

Desktop (please complete the following information):

  • OS: Microsoft Windows Server 2022, WSL 2.1.5.0, Ubuntu 22.04.5
  • Python Version: Python 3.10.12
  • openapi-python-client version 0.26.1

Additional context
Add any other context about the problem here.

貢獻指南

開啟貢獻指南

從這裡開始

  1. 先讀完整個 Issue,再讀專案的貢獻指南。
  2. 在 Issue 下留言說明你要接手 —— 這能避免兩個人做同樣的事。
  3. Fork 儲存庫,在一個分支上完成修改。
  4. 送出 Pull Request,並在描述裡引用這個 Issue 編號。

研究方向

從 repro.yaml 規格開始,使用指定的輸出路徑執行文件中記載的 python3 -m openapi_python_client generate 命令。檢查產生的 volume_unit.py 以及相關的 ruff 輸出;當從 Nm³ft³ 衍生的 enum 名稱是有效的 Python 識別碼,且產生過程不再產生這些錯誤時,即表示完成。

由索引模型根據 Issue 內容生成。

評估

技術堆疊
python
領域
tooling
Issue 類型
缺陷
難度
3/5
預估耗時
1-2 天
活躍度
停滯
描述清晰度
描述清楚
新手友好度
48/100

把新 issue 寄到你的電子郵件信箱

精選適合新手參與的 GitHub issue 摘要。