From 4908378e597eb200e255c71df92d16e272b4b12e Mon Sep 17 00:00:00 2001 From: chakcy <947105045@qq.com> Date: Fri, 14 Aug 2026 17:38:25 +0800 Subject: [PATCH] =?UTF-8?q?modify:=20auto=5Fbind=5Fmodels=20/=20global=5Fv?= =?UTF-8?q?ar=20=E6=94=AF=E6=8C=81=20workers/=20=E8=BF=9B=E7=A8=8B?= =?UTF-8?q?=E6=8F=92=E4=BB=B6=E8=B7=AF=E5=BE=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/chongming_worker/decorators.py | 31 ++++++++++++++++++++---------- src/chongming_worker/plugin.py | 1 + 2 files changed, 22 insertions(+), 10 deletions(-) diff --git a/src/chongming_worker/decorators.py b/src/chongming_worker/decorators.py index 1b73f27..c096fa0 100644 --- a/src/chongming_worker/decorators.py +++ b/src/chongming_worker/decorators.py @@ -430,7 +430,12 @@ def auto_bind_models(plugin_name: str): """ 自动从插件 models 目录发现并绑定 Pydantic 模型 - 扫描 src/plugins//models/pydantic.py 中定义的所有模型, + 按序尝试以下模块路径(inline 插件位于 src/plugins//, + 进程插件位于 workers//): + plugins..models.pydantic + src.plugins..models.pydantic + workers..models.pydantic + 尝试按命名约定匹配已注册的 RPC 端点。 命名约定: @@ -442,17 +447,23 @@ def auto_bind_models(plugin_name: str): from ...decorators import auto_bind_models auto_bind_models("example") """ - try: - models_module = importlib.import_module(f"plugins.{plugin_name}.models.pydantic") - except ImportError: + for mod_name in ( + f"plugins.{plugin_name}.models.pydantic", + f"src.plugins.{plugin_name}.models.pydantic", + f"workers.{plugin_name}.models.pydantic", + ): try: - models_module = importlib.import_module(f"src.plugins.{plugin_name}.models.pydantic") + models_module = importlib.import_module(mod_name) + break except ImportError: - logger.warning( - "auto_bind_models: 未找到 models 模块 (plugins.%s.models.pydantic)", - plugin_name, - ) - return + models_module = None + if models_module is None: + logger.warning( + "auto_bind_models: 未找到 models 模块 " + "(plugins/src.plugins/workers 的 %s.models.pydantic)", + plugin_name, + ) + return # 获取模块中所有 BaseModel 子类 model_classes = {} diff --git a/src/chongming_worker/plugin.py b/src/chongming_worker/plugin.py index d5e8b3c..3f026cd 100644 --- a/src/chongming_worker/plugin.py +++ b/src/chongming_worker/plugin.py @@ -259,6 +259,7 @@ class Plugin: for mod in ( f"plugins.{self.type}.global_var", f"src.plugins.{self.type}.global_var", + f"workers.{self.type}.global_var", ): try: self._gv_module = importlib.import_module(mod)