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}'