JSON schema arrays with uniqueItems=True creates a model using Python sets which are not serializable by default
還沒有人認領這個 Issue。
評估
研究方向
從產生的 AccessControl 模型開始,追蹤模型如何透過 Python 的 JSON 序列化在 ProgressEvent 中傳回。使用所示的 uniqueItems schema 重現失敗,然後驗證傳回包含 AbstractSet 值的模型時,無需手動將 set 轉換為 list 即可成功序列化。
由索引模型根據 Issue 內容生成。
描述
When an definition in the JSON schema is an array with uniqueItems set to True, CFN generates a model with that attribute typed as an AbstractSet (or Python set in real terms) to guarantee that the items are unique. However the JSON module by default does not serialize sets and when the model is returned from the handler it raises an exception when trying to do so.
In order for the model to be returned I need to convert every set to a list in the model so it can be serialized back into JSON.
For example JSON Schema with the following definition:
"AccessControl": {
"type": "object",
"properties": {
"Producers": {
"type": "array",
"uniqueItems": true,
"insertionOrder": false,
"items": { "type": "string" }
},
"Consumers": {
"type": "array",
"uniqueItems": true,
"insertionOrder": false,
"items": { "type": "string" }
}
},
"required": [ "Producers", "Consumers" ],
"additionalProperties": false
}
Generates a model with the following class
@dataclass
class AccessControl(BaseModel):
Producers: Optional[AbstractSet[str]]
Consumers: Optional[AbstractSet[str]]
@classmethod
def _deserialize(
cls: Type["_AccessControl"],
json_data: Optional[Mapping[str, Any]],
) -> Optional["_AccessControl"]:
if not json_data:
return None
return cls(
Producers=set_or_none(json_data.get("Producers")),
Consumers=set_or_none(json_data.get("Consumers")),
)
If the incoming model to the handler is populated and returned in a ProgressEvent the handler fails with an exception trying to serialize a set which it cant do by default. In order to return the model I have to convert every set to a list ie model.AccessControl.Producers = list(model.AccessControl.Producers). This can be tedious if there are multiple exit points in the handler and so should be handled by the model or by adding a set serializer to JSON.
- 主要語言
- Python
- 星號
- 107
- 分支
- 46
- PR 合併指標
- 30 天內沒有已合併 PR
環境準備
- 沒有 Dockerfile 或 Docker Compose 檔案
- 有 Pull Request 範本
- 閱讀貢獻指南
從這裡開始
- 先讀完整個 Issue,再讀專案的貢獻指南。
- 在 Issue 下留言說明你要接手 —— 這能避免兩個人做同樣的事。
- Fork 儲存庫,在一個分支上完成修改。
- 送出 Pull Request,並在描述裡引用這個 Issue 編號。
aws-cloudformation/cloudformation-cli-python-plugin 的其他 Issue
-
Support UV未關閉
難度 2/5 1-3 小時 新手友好度 78/100
-
Repo alive?未關閉
難度 5/5 一週以上 新手友好度 20/100
aws-cloudformation/cloudformation-cli-python-plugin#270 · 1 則留言 · 1 個 reaction ·
-
難度 3/5 1-2 天 新手友好度 45/100
-
難度 3/5 1-2 天 新手友好度 35/100
aws-cloudformation/cloudformation-cli-python-plugin#268 · 1 則留言 · 2 個 reaction ·
-
難度 3/5 1-2 天 新手友好度 35/100
aws-cloudformation/cloudformation-cli-python-plugin#264 · 1 則留言 ·
查看 aws-cloudformation/cloudformation-cli-python-plugin 的全部 Issue
相似的 Issue
-
難度 2/5 1-3 小時 新手友好度 78/100
NousResearch/hermes-plugin-claude-subscription-directsdk#94 ·
維護者通常 1 天內回覆
-
namespace operations
難度 2/5 1-3 小時 新手友好度 72/100
EclipseFdn/open-vsx.org#13702 ·
維護者通常 1 天內回覆
-
難度 2/5 1-3 小時 新手友好度 82/100
維護者通常 1 天內回覆
-
bug
難度 2/5 1-3 小時 新手友好度 76/100
modelscope/ms-swift#10287 ·
維護者通常 1 天內回覆
-
難度 2/5 1-3 小時 新手友好度 85/100
modelscope/FunASR#3757 ·
維護者通常 1 天內回覆