mirror of
https://github.com/langgenius/dify.git
synced 2026-02-13 06:24:44 +08:00
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.
This commit is contained in:
parent
6ba26cf7b5
commit
f20452622a
@ -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,
|
||||
|
||||
@ -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
|
||||
|
||||
Loading…
Reference in New Issue
Block a user