From c983967d82be2f9a8ecc084c99751c83e435fc80 Mon Sep 17 00:00:00 2001 From: Junyan Qin Date: Tue, 24 Jun 2025 15:44:03 +0800 Subject: [PATCH] feat: combine plugin preferences apis --- api/controllers/console/workspace/plugin.py | 117 +++++++++++++------- api/models/account.py | 1 + 2 files changed, 77 insertions(+), 41 deletions(-) diff --git a/api/controllers/console/workspace/plugin.py b/api/controllers/console/workspace/plugin.py index 34f059e093..72bf4f6c5b 100644 --- a/api/controllers/console/workspace/plugin.py +++ b/api/controllers/console/workspace/plugin.py @@ -12,7 +12,7 @@ from controllers.console.wraps import account_initialization_required, setup_req from core.model_runtime.utils.encoders import jsonable_encoder from core.plugin.impl.exc import PluginDaemonClientSideError from libs.login import login_required -from models.account import TenantPluginPermission +from models.account import TenantPluginAutoUpgradeStrategy, TenantPluginPermission from services.plugin.plugin_auto_upgrade_service import PluginAutoUpgradeService from services.plugin.plugin_permission_service import PluginPermissionService from services.plugin.plugin_service import PluginService @@ -494,7 +494,7 @@ class PluginFetchPermissionApi(Resource): ) -class PluginChangeAutoUpgradeStrategyApi(Resource): +class PluginChangePreferencesApi(Resource): @setup_required @login_required @account_initialization_required @@ -504,55 +504,90 @@ class PluginChangeAutoUpgradeStrategyApi(Resource): raise Forbidden() req = reqparse.RequestParser() - req.add_argument("strategy_setting", type=str, required=True, location="json") - req.add_argument("upgrade_time_of_day", type=int, required=True, location="json") - req.add_argument("upgrade_mode", type=str, required=True, location="json") - req.add_argument("exclude_plugins", type=list, required=True, location="json") - req.add_argument("include_plugins", type=list, required=True, location="json") + req.add_argument("permission", type=dict, required=True, location="json") + req.add_argument("auto_upgrade", type=dict, required=True, location="json") args = req.parse_args() tenant_id = user.current_tenant_id - return { - "success": PluginAutoUpgradeService.change_strategy( - tenant_id, - args["strategy_setting"], - args["upgrade_time_of_day"], - args["upgrade_mode"], - args["exclude_plugins"], - args["include_plugins"], - ) - } + permission = args["permission"] + + install_permission = TenantPluginPermission.InstallPermission(permission.get("install_permission", "everyone")) + debug_permission = TenantPluginPermission.DebugPermission(permission.get("debug_permission", "everyone")) + + auto_upgrade = args["auto_upgrade"] + + strategy_setting = TenantPluginAutoUpgradeStrategy.StrategySetting( + auto_upgrade.get("strategy_setting", "fix_only") + ) + upgrade_time_of_day = auto_upgrade.get("upgrade_time_of_day", 0) + upgrade_mode = TenantPluginAutoUpgradeStrategy.UpgradeMode(auto_upgrade.get("upgrade_mode", "exclude")) + exclude_plugins = auto_upgrade.get("exclude_plugins", []) + include_plugins = auto_upgrade.get("include_plugins", []) + + # set permission + set_permission_result = PluginPermissionService.change_permission( + tenant_id, + install_permission, + debug_permission, + ) + if not set_permission_result: + return jsonable_encoder({"success": False, "message": "Failed to set permission"}) + + # set auto upgrade strategy + set_auto_upgrade_strategy_result = PluginAutoUpgradeService.change_strategy( + tenant_id, + strategy_setting, + upgrade_time_of_day, + upgrade_mode, + exclude_plugins, + include_plugins, + ) + if not set_auto_upgrade_strategy_result: + return jsonable_encoder({"success": False, "message": "Failed to set auto upgrade strategy"}) + + return jsonable_encoder({"success": True}) -class PluginFetchAutoUpgradeStrategyApi(Resource): +class PluginFetchPreferencesApi(Resource): @setup_required @login_required @account_initialization_required def get(self): tenant_id = current_user.current_tenant_id - strategy = PluginAutoUpgradeService.get_strategy(tenant_id) - if not strategy: - return jsonable_encoder( - { - "strategy_setting": "fix_only", - "upgrade_time_of_day": 0, - "upgrade_mode": "exclude", - "exclude_plugins": [], - "include_plugins": [], - } - ) + permission = PluginPermissionService.get_permission(tenant_id) - return jsonable_encoder( - { - "strategy_setting": strategy.strategy_setting, - "upgrade_time_of_day": strategy.upgrade_time_of_day, - "upgrade_mode": strategy.upgrade_mode, - "exclude_plugins": strategy.exclude_plugins, - "include_plugins": strategy.include_plugins, + if not permission: + permission = { + "install_permission": TenantPluginPermission.InstallPermission.EVERYONE, + "debug_permission": TenantPluginPermission.DebugPermission.EVERYONE, } - ) + else: + permission = { + "install_permission": permission.install_permission, + "debug_permission": permission.debug_permission, + } + + auto_upgrade = PluginAutoUpgradeService.get_strategy(tenant_id) + if not auto_upgrade: + auto_upgrade = { + "strategy_setting": TenantPluginAutoUpgradeStrategy.StrategySetting.FIX_ONLY, + "upgrade_time_of_day": 0, + "upgrade_mode": TenantPluginAutoUpgradeStrategy.UpgradeMode.EXCLUDE, + "exclude_plugins": [], + "include_plugins": [], + } + else: + auto_upgrade = { + "strategy_setting": auto_upgrade.strategy_setting, + "upgrade_time_of_day": auto_upgrade.upgrade_time_of_day, + "upgrade_mode": auto_upgrade.upgrade_mode, + "exclude_plugins": auto_upgrade.exclude_plugins, + "include_plugins": auto_upgrade.include_plugins, + } + + return jsonable_encoder({"permission": permission, "auto_upgrade": auto_upgrade}) api.add_resource(PluginDebuggingKeyApi, "/workspaces/current/plugin/debugging-key") @@ -577,8 +612,8 @@ api.add_resource(PluginDeleteInstallTaskItemApi, "/workspaces/current/plugin/tas api.add_resource(PluginUninstallApi, "/workspaces/current/plugin/uninstall") api.add_resource(PluginFetchMarketplacePkgApi, "/workspaces/current/plugin/marketplace/pkg") -api.add_resource(PluginChangePermissionApi, "/workspaces/current/plugin/permission/change") -api.add_resource(PluginFetchPermissionApi, "/workspaces/current/plugin/permission/fetch") +api.add_resource(PluginChangePermissionApi, "/workspaces/current/plugin/permission/change") # deprecated +api.add_resource(PluginFetchPermissionApi, "/workspaces/current/plugin/permission/fetch") # deprecated -api.add_resource(PluginFetchAutoUpgradeStrategyApi, "/workspaces/current/plugin/autoupgrade/fetch") -api.add_resource(PluginChangeAutoUpgradeStrategyApi, "/workspaces/current/plugin/autoupgrade/change") +api.add_resource(PluginFetchPreferencesApi, "/workspaces/current/plugin/preferences/fetch") +api.add_resource(PluginChangePreferencesApi, "/workspaces/current/plugin/preferences/change") diff --git a/api/models/account.py b/api/models/account.py index 3c4c96afbe..e110aa2000 100644 --- a/api/models/account.py +++ b/api/models/account.py @@ -305,6 +305,7 @@ class TenantPluginAutoUpgradeStrategy(Base): LATEST = "latest" class UpgradeMode(enum.StrEnum): + ALL = "all" PARTIAL = "partial" EXCLUDE = "exclude"