From 54e974824089c90c067c15ea991abbbb495c5041 Mon Sep 17 00:00:00 2001 From: Yeuoly Date: Sat, 8 Feb 2025 16:02:10 +0800 Subject: [PATCH] fix: supporting return current identifier --- api/core/plugin/entities/plugin.py | 6 ++++++ api/core/plugin/manager/plugin.py | 7 +++++-- api/fields/app_fields.py | 2 +- api/services/plugin/dependencies_analysis.py | 15 +++++++++++---- 4 files changed, 23 insertions(+), 7 deletions(-) diff --git a/api/core/plugin/entities/plugin.py b/api/core/plugin/entities/plugin.py index ee65e86826..f303dc03a3 100644 --- a/api/core/plugin/entities/plugin.py +++ b/api/core/plugin/entities/plugin.py @@ -197,3 +197,9 @@ class PluginDependency(BaseModel): type: Type value: Github | Marketplace | Package + current_identifier: Optional[str] = None + + +class MissingPluginDependency(BaseModel): + plugin_unique_identifier: str + current_identifier: Optional[str] = None diff --git a/api/core/plugin/manager/plugin.py b/api/core/plugin/manager/plugin.py index 4f5970d3b9..15dcd6cb34 100644 --- a/api/core/plugin/manager/plugin.py +++ b/api/core/plugin/manager/plugin.py @@ -3,6 +3,7 @@ from collections.abc import Sequence from core.plugin.entities.bundle import PluginBundleDependency from core.plugin.entities.plugin import ( GenericProviderID, + MissingPluginDependency, PluginDeclaration, PluginEntity, PluginInstallation, @@ -175,14 +176,16 @@ class PluginInstallationManager(BasePluginManager): headers={"Content-Type": "application/json"}, ) - def fetch_missing_dependencies(self, tenant_id: str, plugin_unique_identifiers: list[str]) -> list[str]: + def fetch_missing_dependencies( + self, tenant_id: str, plugin_unique_identifiers: list[str] + ) -> list[MissingPluginDependency]: """ Fetch missing dependencies """ return self._request_with_plugin_daemon_response( "POST", f"plugin/{tenant_id}/management/installation/missing", - list[str], + list[MissingPluginDependency], data={"plugin_unique_identifiers": plugin_unique_identifiers}, headers={"Content-Type": "application/json"}, ) diff --git a/api/fields/app_fields.py b/api/fields/app_fields.py index b14f8d0e73..eaf684f16a 100644 --- a/api/fields/app_fields.py +++ b/api/fields/app_fields.py @@ -198,7 +198,7 @@ app_site_fields = { "use_icon_as_answer_icon": fields.Boolean, } -leaked_dependency_fields = {"type": fields.String, "value": fields.Raw} +leaked_dependency_fields = {"type": fields.String, "value": fields.Raw, "current_identifier": fields.String} app_import_fields = { "id": fields.String, diff --git a/api/services/plugin/dependencies_analysis.py b/api/services/plugin/dependencies_analysis.py index 237ca3b629..77da3d09ea 100644 --- a/api/services/plugin/dependencies_analysis.py +++ b/api/services/plugin/dependencies_analysis.py @@ -45,15 +45,22 @@ class DependenciesAnalysisService: required_plugin_unique_identifiers.append(dependency.value.plugin_unique_identifier) manager = PluginInstallationManager() - missing_plugin_unique_identifiers = manager.fetch_missing_dependencies( - tenant_id, required_plugin_unique_identifiers - ) + + # get leaked dependencies + missing_plugins = manager.fetch_missing_dependencies(tenant_id, required_plugin_unique_identifiers) + missing_plugin_unique_identifiers = {plugin.plugin_unique_identifier: plugin for plugin in missing_plugins} leaked_dependencies = [] for dependency in dependencies: unique_identifier = dependency.value.plugin_unique_identifier if unique_identifier in missing_plugin_unique_identifiers: - leaked_dependencies.append(dependency) + leaked_dependencies.append( + PluginDependency( + type=dependency.type, + value=dependency.value, + current_identifier=missing_plugin_unique_identifiers[unique_identifier].current_identifier, + ) + ) return leaked_dependencies