From 706ca20653bd27ef1be8848637e4d84209ffc229 Mon Sep 17 00:00:00 2001 From: Yeuoly Date: Tue, 24 Jun 2025 17:51:55 +0800 Subject: [PATCH] feat: add PluginParameterService for dynamic select options retrieval --- api/controllers/console/workspace/plugin.py | 30 ++++++++++--------- .../plugin/plugin_parameter_service.py | 18 +++++++++++ 2 files changed, 34 insertions(+), 14 deletions(-) create mode 100644 api/services/plugin/plugin_parameter_service.py diff --git a/api/controllers/console/workspace/plugin.py b/api/controllers/console/workspace/plugin.py index e0e3006437..fd3b2d3eb6 100644 --- a/api/controllers/console/workspace/plugin.py +++ b/api/controllers/console/workspace/plugin.py @@ -10,11 +10,10 @@ from controllers.console import api from controllers.console.workspace import plugin_permission_required from controllers.console.wraps import account_initialization_required, setup_required from core.model_runtime.utils.encoders import jsonable_encoder -from core.plugin.entities.parameters import PluginParameterOption from core.plugin.impl.exc import PluginDaemonClientSideError -from core.tools.entities.common_entities import I18nObject from libs.login import login_required from models.account import TenantPluginPermission +from services.plugin.plugin_parameter_service import PluginParameterService from services.plugin.plugin_permission_service import PluginPermissionService from services.plugin.plugin_service import PluginService @@ -506,20 +505,23 @@ class PluginFetchDynamicSelectOptionsApi(Resource): def get(self): tenant_id = current_user.current_tenant_id - return jsonable_encoder( - { - "options": [ - PluginParameterOption( - label=I18nObject( - en_US="test", - zh_Hans="测试", - ), - value="test", - ) - ] - } + # check if the user is admin or owner + if not current_user.is_admin_or_owner: + raise Forbidden() + + parser = reqparse.RequestParser() + parser.add_argument("plugin_id", type=str, required=True, location="args") + parser.add_argument("provider", type=str, required=True, location="args") + parser.add_argument("action", type=str, required=True, location="args") + parser.add_argument("parameter", type=str, required=True, location="args") + args = parser.parse_args() + + options = PluginParameterService.get_dynamic_select_options( + tenant_id, args["plugin_id"], args["provider"], args["action"], args["parameter"] ) + return jsonable_encoder({"options": options}) + api.add_resource(PluginDebuggingKeyApi, "/workspaces/current/plugin/debugging-key") api.add_resource(PluginListApi, "/workspaces/current/plugin/list") diff --git a/api/services/plugin/plugin_parameter_service.py b/api/services/plugin/plugin_parameter_service.py new file mode 100644 index 0000000000..3db75e1fd3 --- /dev/null +++ b/api/services/plugin/plugin_parameter_service.py @@ -0,0 +1,18 @@ +from core.plugin.entities.parameters import PluginParameterOption + + +class PluginParameterService: + @staticmethod + def get_dynamic_select_options( + tenant_id: str, plugin_id: str, provider: str, action: str, parameter: str + ) -> list[PluginParameterOption]: + """ + Get dynamic select options for a plugin parameter. + + Args: + tenant_id: The tenant ID. + plugin_id: The plugin ID. + provider: The provider name. + action: The action name. + """ + return []