fix: robust payload cleaning for plugin updates to resolve 422 error
This commit is contained in:
@@ -293,33 +293,39 @@ class OpenWebUICommunityClient:
|
|||||||
if not post_data:
|
if not post_data:
|
||||||
return False
|
return False
|
||||||
|
|
||||||
# 确保结构存在
|
# 严格重建 data 结构,避免包含只读字段(如 data.function.id)
|
||||||
if "data" not in post_data:
|
current_function = post_data.get("data", {}).get("function", {})
|
||||||
post_data["data"] = {}
|
|
||||||
if "function" not in post_data["data"]:
|
|
||||||
post_data["data"]["function"] = {}
|
|
||||||
if "meta" not in post_data["data"]["function"]:
|
|
||||||
post_data["data"]["function"]["meta"] = {}
|
|
||||||
if "manifest" not in post_data["data"]["function"]["meta"]:
|
|
||||||
post_data["data"]["function"]["meta"]["manifest"] = {}
|
|
||||||
|
|
||||||
# 更新源代码
|
# 过滤 metadata,移除 openwebui_id 等系统字段
|
||||||
post_data["data"]["function"]["content"] = source_code
|
clean_metadata = {
|
||||||
|
k: v
|
||||||
|
for k, v in (metadata or {}).items()
|
||||||
|
if k not in ["openwebui_id", "post_id"]
|
||||||
|
}
|
||||||
|
|
||||||
|
function_data = {
|
||||||
|
"name": metadata.get("title", current_function.get("name", "Plugin")),
|
||||||
|
"type": current_function.get("type", "action"),
|
||||||
|
"content": source_code,
|
||||||
|
"meta": {
|
||||||
|
"description": metadata.get(
|
||||||
|
"description",
|
||||||
|
current_function.get("meta", {}).get("description", ""),
|
||||||
|
),
|
||||||
|
"manifest": clean_metadata,
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
post_data["data"] = {"function": function_data}
|
||||||
|
post_data["type"] = "function"
|
||||||
|
|
||||||
# 更新 README(社区页面展示内容)
|
# 更新 README(社区页面展示内容)
|
||||||
if readme_content:
|
if readme_content:
|
||||||
post_data["content"] = readme_content
|
post_data["content"] = readme_content
|
||||||
|
|
||||||
# 更新元数据
|
# 更新标题
|
||||||
if metadata:
|
if metadata and "title" in metadata:
|
||||||
post_data["data"]["function"]["meta"]["manifest"].update(metadata)
|
post_data["title"] = metadata["title"]
|
||||||
if "title" in metadata:
|
|
||||||
post_data["title"] = metadata["title"]
|
|
||||||
post_data["data"]["function"]["name"] = metadata["title"]
|
|
||||||
if "description" in metadata:
|
|
||||||
post_data["data"]["function"]["meta"]["description"] = metadata[
|
|
||||||
"description"
|
|
||||||
]
|
|
||||||
|
|
||||||
# 更新图片
|
# 更新图片
|
||||||
if media_urls:
|
if media_urls:
|
||||||
@@ -331,6 +337,9 @@ class OpenWebUICommunityClient:
|
|||||||
elif isinstance(item, dict):
|
elif isinstance(item, dict):
|
||||||
media_list.append(item)
|
media_list.append(item)
|
||||||
post_data["media"] = media_list
|
post_data["media"] = media_list
|
||||||
|
else:
|
||||||
|
# 如果没有新图片,保留原有的(如果有)
|
||||||
|
pass
|
||||||
|
|
||||||
return self.update_post(post_id, post_data)
|
return self.update_post(post_id, post_data)
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user