Upload file logic seems to be wrong on 3.1 schema
還沒有人認領這個 Issue。
評估
研究方向
首先重現根據所提供的 OpenAPI 3.1 schema 產生的 body 類別,並使用 format: binary 將其與 3.0 schema 進行比較。追蹤 contentMediaType: application/octet-stream 在產生過程中的解讀方式;完成的條件是產生的欄位使用 File,且 multipart 序列化如同舊輸出一樣呼叫 to_tuple()。
由索引模型根據 Issue 內容生成。
描述
Describe the bug
I just upgraded my API, and the schema changed from 3.0 to 3.1. The uploads suddenly broke. It seems that the code generated for the body class now looks like this:
file: str
...
def to_multipart(self) -> types.RequestFiles:
files: types.RequestFiles = []
files.append(("file", (None, str(self.file).encode(), "text/plain")))
for prop_name, prop in self.additional_properties.items():
files.append((prop_name, (None, str(prop).encode(), "text/plain")))
return files
While the old looked like this:
file: File
python
def to_multipart(self) -> types.RequestFiles:
files: types.RequestFiles = []
files.append(("file", self.file.to_tuple()))
for prop_name, prop in self.additional_properties.items():
files.append((prop_name, (None, str(prop).encode(), "text/plain")))
return files
Where the File object is this:
@define
class File:
"""Contains information for file uploads"""
payload: BinaryIO
file_name: str | None = None
mime_type: str | None = None
def to_tuple(self) -> FileTypes:
"""Return a tuple representation that httpx will accept for multipart/form-data"""
return self.file_name, self.payload, self.mime_type
OpenAPI Spec File
A link to an OpenAPI document which produces this issue. Ideally, write a minimal reproduction only containing the problematic pieces.
The API spec for the body (new 3.1):
"file": {
"type": "string",
"contentMediaType": "application/octet-stream",
"title": "File"
}
Old (3.0) schema:
"file": {
"type": "string",
"format": "binary",
"title": "File"
}
Desktop:
- OS: [e.g. macOS 10.15.1]: MacOS (M4) 26.3.1
- Python Version: [e.g. 3.8.0]: 3.11.14
- openapi-python-client version [e.g. 0.1.0]: 0.28.3
Additional context
I have some code pre-massaging around a different name-related issue and adding this to the pre-processing before this tool is called fixed it, but it's definitely more of a temporary workaround type of thing:
for prop in props.values():
if prop.get("contentMediaType") == "application/octet-stream":
prop["format"] = "binary"
- 主要語言
- Python
- 星號
- 2k
- 分支
- 296
- PR 合併指標
- 30 天內沒有已合併 PR
環境準備
- 沒有 Dockerfile 或 Docker Compose 檔案
- 沒有 Pull Request 範本
- 閱讀貢獻指南
從這裡開始
- 先讀完整個 Issue,再讀專案的貢獻指南。
- 在 Issue 下留言說明你要接手 —— 這能避免兩個人做同樣的事。
- Fork 儲存庫,在一個分支上完成修改。
- 送出 Pull Request,並在描述裡引用這個 Issue 編號。
openapi-generators/openapi-python-client 的其他 Issue
-
難度 2/5 1-3 小時 新手友好度 68/100
-
難度 2/5 1-3 小時 新手友好度 65/100
-
Multi-body endpoints with required requestBody emit `| Unset` without importing `Unset`可能已有人在做 關聯的 PR 仍在進行中或已合併。 未關閉
難度 3/5 1-2 天 新手友好度 72/100
openapi-generators/openapi-python-client#1451 · 3 則留言 ·
-
_build_response crashes with ValueError on non-IANA HTTP status codes (520, 561, etc.)可能已有人在做 關聯的 PR 仍在進行中或已合併。 未關閉
難度 3/5 1-2 天 新手友好度 52/100
-
Generator fails on type: array without items even though it's valid in JSON Schema 2020-12 / OpenAPI 3.1可能已有人在做 關聯的 PR 仍在進行中或已合併。 未關閉
難度 3/5 1-2 天 新手友好度 64/100
openapi-generators/openapi-python-client#1435 · 1 則留言 ·
查看 openapi-generators/openapi-python-client 的全部 Issue
相似的 Issue
-
Device Details tables: FS/SF columns contradict each other (nfet_01v8 Vt row, pfet_01v8 Idsat row)未關閉
難度 2/5 1-3 小時 新手友好度 75/100
google/skywater-pdk#450 ·
-
Drained trajectory arrays are overwritten when the sequence buffer is reused可能已有人在做 @sylvesterkaczmarek 今天認領。 未關閉
難度 2/5 1-3 小時 新手友好度 78/100
google-deepmind/bsuite#56 ·
-
難度 2/5 1-3 小時 新手友好度 82/100
LearningCircuit/local-deep-research#7206 ·
維護者通常 1 天內回覆
-
難度 2/5 1-3 小時 新手友好度 68/100
chingu-voyages/V62-tier3-team-33#285 ·
維護者通常 1 天內回覆
-
Proxy drops log notifications from backends that don't send FastMCP's msg/extra dict可能已有人在做 @asasemahmed 今天認領。 未關閉bug server
難度 2/5 1-3 小時 新手友好度 78/100
維護者通常 1 天內回覆