diff --git a/src/plugins/publish/templates/render_error.md.jinja b/src/plugins/publish/templates/render_error.md.jinja
index 581572d4..0c4f6433 100644
--- a/src/plugins/publish/templates/render_error.md.jinja
+++ b/src/plugins/publish/templates/render_error.md.jinja
@@ -40,7 +40,7 @@
{{ error.msg }}
请确保没有重复发布。
{% elif type == "plugin.test" %}
插件加载测试未通过。{{ detail_message("测试输出", ctx.output) }}
-{% elif type == "metadata" %}
+{% elif type == "plugin.metadata" %}
无法获取到插件元数据。{{ "请填写插件元数据" if ctx.plugin_test_result else "请确保插件正常加载" }}。
{% elif type == "plugin.type" %}
插件类型 {{ input }} 不符合规范。请确保插件类型正确,当前仅支持 application 与 library。
diff --git a/src/utils/validation/models.py b/src/utils/validation/models.py
index 3d10f142..ff745db1 100644
--- a/src/utils/validation/models.py
+++ b/src/utils/validation/models.py
@@ -133,6 +133,8 @@ def collect_valid_values(
raise PydanticCustomError("validation_context", "未获取到验证上下文")
result = handler(v)
+ if isinstance(result, BaseModel):
+ result = result.model_dump()
context["valid_data"][info.field_name] = result
return result
@@ -168,7 +170,7 @@ class PluginPublishInfo(PublishInfo, PyPIMixin):
"""插件支持的适配器"""
load: bool
""""插件测试结果"""
- metadata: Metadata | None
+ metadata: Metadata
"""插件测试元数据"""
@field_validator("type", mode="before")
@@ -236,15 +238,13 @@ def plugin_test_load_validator(cls, v: bool, info: ValidationInfo) -> bool:
@field_validator("metadata", mode="before")
@classmethod
def plugin_test_metadata_validator(
- cls, v: Metadata | None, info: ValidationInfo
- ) -> Metadata | None:
+ cls, v: Metadata, info: ValidationInfo
+ ) -> Metadata:
context = info.context
if context is None:
raise PydanticCustomError("validation_context", "未获取到验证上下文")
if v is None:
raise PydanticCustomError("plugin.metadata", "插件缺少元数据")
- if context.get("skip_plugin_test"):
- return None
return v