From 397c786b859eed7c4a2d605763dcac6469636e87 Mon Sep 17 00:00:00 2001 From: molanp <104612722+molanp@users.noreply.github.com> Date: Wed, 2 Oct 2024 15:39:41 +0800 Subject: [PATCH] =?UTF-8?q?=E9=87=8D=E6=9E=84=E6=8F=92=E4=BB=B6=E7=AE=A1?= =?UTF-8?q?=E7=90=86=E5=99=A8=E7=9A=84=E6=95=B0=E6=8D=AE=E6=BA=90=E8=A7=A3?= =?UTF-8?q?=E6=9E=90=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 将插件ID和模块名的检查逻辑移至单独的私有方法 _resolve_plugin_key - 简化了 get_info 和 update_plugin 方法中的逻辑 - 提高了代码的可读性和可维护性 --- .../plugin_store/data_source.py | 41 +++++++++---------- 1 file changed, 19 insertions(+), 22 deletions(-) diff --git a/zhenxun/builtin_plugins/plugin_store/data_source.py b/zhenxun/builtin_plugins/plugin_store/data_source.py index 27053ad4..50a5d133 100644 --- a/zhenxun/builtin_plugins/plugin_store/data_source.py +++ b/zhenxun/builtin_plugins/plugin_store/data_source.py @@ -283,17 +283,10 @@ class ShopManage: str: 返回消息 """ data: dict[str, StorePluginInfo] = await cls.get_data() - if isinstance(plugin_id, int) and (plugin_id < 0 or plugin_id >= len(data)): - return "插件ID不存在..." - elif isinstance(plugin_id, str) and plugin_id not in [ - v.module for k, v in data.items() - ]: - return "插件Module不存在..." - plugin_key = ( - list(data.keys())[plugin_id] - if isinstance(plugin_id, int) - else {v.module: k for k, v in data.items()}[plugin_id] - ) + try: + plugin_key = await cls._resolve_plugin_key(plugin_id) + except ValueError as e: + return str(e) plugin_info = data[plugin_key] path = BASE_PATH if plugin_info.github_url: @@ -366,17 +359,10 @@ class ShopManage: str: 返回消息 """ data: dict[str, StorePluginInfo] = await cls.get_data() - if isinstance(plugin_id, int) and (plugin_id < 0 or plugin_id >= len(data)): - return "插件ID不存在..." - elif isinstance(plugin_id, str) and plugin_id not in [ - v.module for k, v in data.items() - ]: - return "插件Module不存在..." - plugin_key = ( - list(data.keys())[plugin_id] - if isinstance(plugin_id, int) - else {v.module: k for k, v in data.items()}[plugin_id] - ) + try: + plugin_key = await cls._resolve_plugin_key(plugin_id) + except ValueError as e: + return str(e) logger.info(f"尝试更新插件 {plugin_key}", "插件管理") plugin_info = data[plugin_key] plugin_list = await cls.get_loaded_plugins("module", "version") @@ -439,3 +425,14 @@ class ShopManage: return "已更新插件 {}\n共计{}个插件! 重启后生效".format( "\n- ".join(update_list), len(update_list) ) + @classmethod + async def _resolve_plugin_key(cls, plugin_id: int | str) -> str: + data: dict[str, StorePluginInfo] = await cls.get_data() + if isinstance(plugin_id, int): + if plugin_id < 0 or plugin_id >= len(data): + raise ValueError("插件ID不存在...") + return list(data.keys())[plugin_id] + elif isinstance(plugin_id, str): + if plugin_id not in [v.module for k, v in data.items()]: + raise ValueError("插件Module不存在...") + return {v.module: k for k, v in data.items()}[plugin_id]