From f20452622aaf8e56ec642b5412de0b52c3ea670a Mon Sep 17 00:00:00 2001 From: Harry Date: Fri, 17 Oct 2025 13:47:56 +0800 Subject: [PATCH] fix(trigger): improve event retrieval handling in PluginTriggerProviderController - Updated the `get_event` method to return `None` instead of raising a ValueError when an event is not found, enhancing error handling. - Adjusted the `get_event_parameters` method to handle cases where the event may be `None`, returning an empty dictionary instead of causing an error. - Improved type hinting for better clarity and type safety. --- api/core/trigger/provider.py | 12 +++++++----- api/tasks/trigger_processing_tasks.py | 6 ++++-- 2 files changed, 11 insertions(+), 7 deletions(-) diff --git a/api/core/trigger/provider.py b/api/core/trigger/provider.py index 7bd97303dd..24517f56e7 100644 --- a/api/core/trigger/provider.py +++ b/api/core/trigger/provider.py @@ -127,7 +127,7 @@ class PluginTriggerProviderController: """ return self.entity.events - def get_event(self, event_name: str) -> EventEntity: + def get_event(self, event_name: str) -> EventEntity | None: """ Get a specific event by name @@ -137,7 +137,7 @@ class PluginTriggerProviderController: for event in self.entity.events: if event.identity.name == event_name: return event - raise ValueError(f"Event {event_name} not found in provider {self.provider_id}") + return None def get_subscription_default_properties(self) -> Mapping[str, Any]: """ @@ -260,7 +260,10 @@ class PluginTriggerProviderController: """ Get event parameters for this provider """ - return {parameter.name: parameter for parameter in self.get_event(event_name).parameters} + event = self.get_event(event_name) + if not event: + return {} + return {parameter.name: parameter for parameter in event.parameters} def dispatch( self, @@ -317,13 +320,12 @@ class PluginTriggerProviderController: """ manager = PluginTriggerManager() provider_id: TriggerProviderID = self.get_provider_id() - event: EventEntity = self.get_event(event_name=event_name) return manager.invoke_trigger_event( tenant_id=self.tenant_id, user_id=user_id, provider=str(provider_id), - event_name=event.identity.name, + event_name=event_name, credentials=credentials, credential_type=credential_type, request=request, diff --git a/api/tasks/trigger_processing_tasks.py b/api/tasks/trigger_processing_tasks.py index 53f6a8769c..345a566b35 100644 --- a/api/tasks/trigger_processing_tasks.py +++ b/api/tasks/trigger_processing_tasks.py @@ -12,6 +12,7 @@ from sqlalchemy.orm import Session from core.trigger.debug.event_bus import TriggerDebugEventBus from core.trigger.debug.events import PluginTriggerDebugEvent +from core.trigger.entities.entities import EventEntity from core.trigger.provider import PluginTriggerProviderController from core.trigger.trigger_manager import TriggerManager from core.trigger.utils.encryption import ( @@ -112,7 +113,7 @@ def dispatch_triggered_workflows_async( dispatched_count = 0 for event_name in events: try: - event = controller.get_event(event_name) + event: EventEntity | None = controller.get_event(event_name) if event is None: logger.error( "Trigger '%s' not found in provider '%s'", @@ -129,9 +130,10 @@ def dispatch_triggered_workflows_async( except Exception: logger.exception( - "Failed to dispatch trigger '%s' for subscription %s", + "Failed to dispatch trigger '%s' for subscription %s and provider %s. Continuing...", event_name, subscription_id, + provider_id, ) # Continue processing other triggers even if one fails continue