diff --git a/api/services/plugin/dependencies_analysis.py b/api/services/plugin/dependencies_analysis.py index 18517cc8f1..623fa2740f 100644 --- a/api/services/plugin/dependencies_analysis.py +++ b/api/services/plugin/dependencies_analysis.py @@ -6,6 +6,9 @@ from core.plugin.entities.plugin import PluginDependency, PluginInstallationSour from core.plugin.impl.plugin import PluginInstaller from models.provider_ids import ModelProviderID, ToolProviderID +# Compile regex pattern for version extraction at module level for better performance +_VERSION_REGEX = re.compile(r":(?P[0-9]+(?:\.[0-9]+){2}(?:[+-][0-9A-Za-z.-]+)?)(?:@|$)") + class DependenciesAnalysisService: @classmethod @@ -51,27 +54,20 @@ class DependenciesAnalysisService: for dependency in dependencies: unique_identifier = dependency.value.plugin_unique_identifier if unique_identifier in missing_plugin_unique_identifiers: + # Extract version for Marketplace dependencies if dependency.type == PluginDependency.Type.Marketplace: - version = re.search( - r":(?P[0-9]+(?:\.[0-9]+){2}(?:[+-][0-9A-Za-z.-]+)?)(?:@|$)", unique_identifier - ) - if version: - dependency.value.version = version.group("version") - leaked_dependencies.append( - PluginDependency( - type=dependency.type, - value=dependency.value, - current_identifier=missing_plugin_unique_identifiers[unique_identifier].current_identifier, - ) - ) - else: - leaked_dependencies.append( - PluginDependency( - type=dependency.type, - value=dependency.value, - current_identifier=missing_plugin_unique_identifiers[unique_identifier].current_identifier, - ) + version_match = _VERSION_REGEX.search(unique_identifier) + if version_match: + dependency.value.version = version_match.group("version") + + # Create and append the dependency (same for all types) + leaked_dependencies.append( + PluginDependency( + type=dependency.type, + value=dependency.value, + current_identifier=missing_plugin_unique_identifiers[unique_identifier].current_identifier, ) + ) return leaked_dependencies