From 13ab647dc0f15ce2cbf267fd3085e61010cbf436 Mon Sep 17 00:00:00 2001 From: RockChinQ <1010553892@qq.com> Date: Mon, 29 Jan 2024 21:41:20 +0800 Subject: [PATCH] =?UTF-8?q?perf:=20=E5=AE=8C=E5=96=84=E6=8F=92=E4=BB=B6?= =?UTF-8?q?=E5=8A=A0=E8=BD=BD=E6=B5=81=E7=A8=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pkg/core/app.py | 1 + pkg/core/boot.py | 9 ++++----- pkg/plugin/manager.py | 8 +++++++- pkg/provider/tools/toolmgr.py | 29 +++++++++++++++++------------ 4 files changed, 29 insertions(+), 18 deletions(-) diff --git a/pkg/core/app.py b/pkg/core/app.py index a2783def..e74675c4 100644 --- a/pkg/core/app.py +++ b/pkg/core/app.py @@ -67,6 +67,7 @@ class Application: async def run(self): await self.plugin_mgr.load_plugins() + await self.plugin_mgr.initialize_plugins() tasks = [ asyncio.create_task(self.im_mgr.run()), diff --git a/pkg/core/boot.py b/pkg/core/boot.py index 1332e486..df7d2c51 100644 --- a/pkg/core/boot.py +++ b/pkg/core/boot.py @@ -92,6 +92,10 @@ async def make_app() -> app.Application: await ver_mgr.initialize() ap.ver_mgr = ver_mgr + plugin_mgr_inst = plugin_mgr.PluginManager(ap) + await plugin_mgr_inst.initialize() + ap.plugin_mgr = plugin_mgr_inst + center_v2_api = center_v2.V2CenterAPI( ap, basic_info={ @@ -137,11 +141,6 @@ async def make_app() -> app.Application: ctrl = controller.Controller(ap) ap.ctrl = ctrl - - # TODO make it async - plugin_mgr_inst = plugin_mgr.PluginManager(ap) - await plugin_mgr_inst.initialize() - ap.plugin_mgr = plugin_mgr_inst await ap.initialize() diff --git a/pkg/plugin/manager.py b/pkg/plugin/manager.py index 6591839d..488c6ca8 100644 --- a/pkg/plugin/manager.py +++ b/pkg/plugin/manager.py @@ -47,7 +47,13 @@ class PluginManager: self.plugins.sort(key=lambda x: x.priority, reverse=True) async def initialize_plugins(self): - pass + for plugin in self.plugins: + try: + plugin.plugin_inst = plugin.plugin_class(self.api_host) + except Exception as e: + self.ap.logger.error(f'插件 {plugin.plugin_name} 初始化失败: {e}') + self.ap.logger.exception(e) + continue async def install_plugin( self, diff --git a/pkg/provider/tools/toolmgr.py b/pkg/provider/tools/toolmgr.py index 56b1d17b..bbd210cc 100644 --- a/pkg/provider/tools/toolmgr.py +++ b/pkg/provider/tools/toolmgr.py @@ -1,6 +1,7 @@ from __future__ import annotations import typing +import traceback from ...core import app, entities as core_entities from . import entities @@ -65,17 +66,21 @@ class ToolManager: """执行函数调用 """ - # return "i'm not sure for the args "+str(parameters) + try: - function = await self.get_function(name) - if function is None: - return None - - parameters = parameters.copy() + function = await self.get_function(name) + if function is None: + return None + + parameters = parameters.copy() - parameters = { - "query": query, - **parameters - } - - return await function.func(**parameters) + parameters = { + "query": query, + **parameters + } + + return await function.func(**parameters) + except Exception as e: + self.ap.logger.error(f'执行函数 {name} 时发生错误: {e}') + traceback.print_exc() + return f'error occurred when executing function {name}: {e}'