diff --git a/src/plugins/publish/validation.py b/src/plugins/publish/validation.py index 96b23a02..c1e797a2 100644 --- a/src/plugins/publish/validation.py +++ b/src/plugins/publish/validation.py @@ -47,11 +47,10 @@ def strip_ansi(text: str | None) -> str: async def validate_plugin_info_from_issue(issue: "Issue") -> ValidationDict: """从议题中提取插件信息""" - body: str = issue.body if issue.body else "" - author: str | None = issue.user.login if issue.user else "" + body = issue.body if issue.body else "" + author = issue.user.id if issue.user else "" + author_id = issue.user.id if issue.user else None - if issue.user: - logger.info("Issue用户信息:" + str(issue.user.model_dump())) raw_data: dict[str, Any] = extract_publish_info_from_issue( { "module_name": PLUGIN_MODULE_NAME_PATTERN, @@ -84,6 +83,7 @@ async def validate_plugin_info_from_issue(issue: "Issue") -> ValidationDict: "metadata": plugin_test_metadata, "previous_data": previous_data, "author": author, + "author_id": author_id, } ) # 如果插件测试被跳过,则从议题中获取信息 @@ -139,8 +139,8 @@ async def validate_plugin_info_from_issue(issue: "Issue") -> ValidationDict: async def validate_bot_info_from_issue(issue: "Issue") -> ValidationDict: body = issue.body if issue.body else "" author = issue.user.login if issue.user else "" - - raw_data: dict[str, str] = extract_publish_info_from_issue( + author_id = issue.user.id if issue.user else None + raw_data: dict[str, Any] = extract_publish_info_from_issue( { "name": BOT_NAME_PATTERN, "desc": BOT_DESC_PATTERN, @@ -150,6 +150,7 @@ async def validate_bot_info_from_issue(issue: "Issue") -> ValidationDict: body, ) raw_data["author"] = author + raw_data["author_id"] = author_id return validate_info(PublishType.BOT, raw_data) @@ -157,6 +158,7 @@ async def validate_bot_info_from_issue(issue: "Issue") -> ValidationDict: async def validate_adapter_info_from_issue(issue: "Issue") -> ValidationDict: body = issue.body if issue.body else "" author = issue.user.login if issue.user else "" + author_id = issue.user.id if issue.user else None raw_data: dict[str, Any] = extract_publish_info_from_issue( { "module_name": ADAPTER_MODULE_NAME_PATTERN, @@ -171,6 +173,7 @@ async def validate_adapter_info_from_issue(issue: "Issue") -> ValidationDict: with plugin_config.input_config.adapter_path.open("r", encoding="utf-8") as f: previous_data: list[dict[str, str]] = json.load(f) raw_data["author"] = author + raw_data["author_id"] = author_id raw_data["previous_data"] = previous_data return validate_info(PublishType.ADAPTER, raw_data) diff --git a/src/utils/store_test/models.py b/src/utils/store_test/models.py index 567ed234..7b09c52b 100644 --- a/src/utils/store_test/models.py +++ b/src/utils/store_test/models.py @@ -67,6 +67,7 @@ class Plugin(TagModel): name: str desc: str author: str + author_id: int | None = None homepage: str tags: list[Tag] is_official: bool diff --git a/src/utils/store_test/store.py b/src/utils/store_test/store.py index 289ca9b4..9e016011 100644 --- a/src/utils/store_test/store.py +++ b/src/utils/store_test/store.py @@ -14,6 +14,7 @@ ADAPTERS_PATH, BOTS_PATH, DRIVERS_PATH, + PLUGIN_CONFIG_PATH, PLUGIN_KEY_TEMPLATE, PLUGINS_PATH, RESULTS_PATH, @@ -113,7 +114,11 @@ async def test_plugin( plugin_data (str | None): 插件数据,不为 None 时,直接使用该数据且跳过测试 """ plugin = self._store_plugins[key] - config = config or self.read_plugin_config(key) + + # 假设传入了 config, 则需要更新 plugin_config 文件 + if config: + self._plugin_configs[key] = config + config = self.read_plugin_config(key) new_result, new_plugin = await validate_plugin( plugin=plugin, @@ -173,7 +178,6 @@ async def merge_data( """ results: dict[str, TestResult] = {} plugins: dict[str, Plugin] = {} - for key in self._store_plugins: if key in new_results: results[key] = new_results[key] @@ -209,7 +213,7 @@ async def run_single_plugin( config: str | None = None, ): """ - 运行单次插件测试 + 运行单次插件测试,来自 trigger_registry_update Args: key (str): 插件标识符 diff --git a/src/utils/store_test/utils.py b/src/utils/store_test/utils.py index 905d81a4..92ab0167 100644 --- a/src/utils/store_test/utils.py +++ b/src/utils/store_test/utils.py @@ -3,10 +3,8 @@ from functools import cache from pathlib import Path from typing import Any -from collections.abc import Mapping import httpx -from pydantic import BaseModel from pydantic_core import to_jsonable_python @@ -18,7 +16,7 @@ def load_json(url: str) -> Any: return r.json() -def dump_json(path: Path, data: Mapping[str, BaseModel] | list[BaseModel]): +def dump_json(path: Path, data: Any): """保存 JSON 文件 为减少文件大小,还需手动设置 separators diff --git a/src/utils/validation/models.py b/src/utils/validation/models.py index b233b05d..45099cdc 100644 --- a/src/utils/validation/models.py +++ b/src/utils/validation/models.py @@ -118,6 +118,7 @@ class PublishInfo(abc.ABC, BaseModel): name: str = Field(max_length=NAME_MAX_LENGTH) desc: str author: str + author_id: int homepage: str tags: list[Tag] = Field(max_length=3) is_official: bool = Field(default=False)