feat: introduce payload field to plugin trigger processing

This commit is contained in:
Yeuoly
2025-10-18 19:15:46 +08:00
parent 11c9219848
commit dd0da3218c
4 changed files with 40 additions and 26 deletions

View File

@ -26,7 +26,7 @@ from core.trigger.entities.entities import (
TriggerCreationMethod,
TriggerProviderEntity,
TriggerProviderIdentity,
Unsubscription,
UnsubscribeResult,
)
from core.trigger.errors import TriggerProviderCredentialValidationError
from models.provider_ids import TriggerProviderID
@ -190,7 +190,7 @@ class PluginTriggerProviderController:
:return: List of supported credential types
"""
types = []
types: list[CredentialType] = []
subscription_constructor = self.entity.subscription_constructor
if subscription_constructor and subscription_constructor.oauth_schema:
types.append(CredentialType.OAUTH2)
@ -208,7 +208,7 @@ class PluginTriggerProviderController:
subscription_constructor = self.entity.subscription_constructor
if not subscription_constructor:
return []
credential_type = CredentialType.of(credential_type) if isinstance(credential_type, str) else credential_type
credential_type = CredentialType.of(credential_type)
if credential_type == CredentialType.OAUTH2:
return (
subscription_constructor.oauth_schema.credentials_schema.copy()
@ -304,6 +304,7 @@ class PluginTriggerProviderController:
credential_type: CredentialType,
subscription: Subscription,
request: Request,
payload: Mapping[str, Any],
) -> TriggerInvokeEventResponse:
"""
Execute a trigger through plugin runtime
@ -314,6 +315,7 @@ class PluginTriggerProviderController:
:param credentials: Provider credentials
:param credential_type: Credential type
:param request: Request
:param payload: Payload
:return: Trigger execution result
"""
manager = PluginTriggerManager()
@ -329,6 +331,7 @@ class PluginTriggerProviderController:
request=request,
parameters=parameters,
subscription=subscription,
payload=payload,
)
def subscribe_trigger(
@ -366,7 +369,7 @@ class PluginTriggerProviderController:
def unsubscribe_trigger(
self, user_id: str, subscription: Subscription, credentials: Mapping[str, str], credential_type: CredentialType
) -> Unsubscription:
) -> UnsubscribeResult:
"""
Unsubscribe from a trigger through plugin runtime
@ -374,7 +377,7 @@ class PluginTriggerProviderController:
:param subscription: Subscription metadata
:param credentials: Provider credentials
:param credential_type: Credential type
:return: Unsubscription result
:return: Unsubscribe result
"""
manager = PluginTriggerManager()
provider_id: TriggerProviderID = self.get_provider_id()
@ -388,7 +391,7 @@ class PluginTriggerProviderController:
credential_type=credential_type,
)
return Unsubscription.model_validate(response.subscription)
return UnsubscribeResult.model_validate(response.subscription)
def refresh_trigger(
self, subscription: Subscription, credentials: Mapping[str, str], credential_type: CredentialType

View File

@ -18,9 +18,9 @@ from core.plugin.impl.trigger import PluginTriggerManager
from core.trigger.entities.entities import (
EventEntity,
Subscription,
Unsubscription,
UnsubscribeResult,
)
from core.trigger.errors import TriggerPluginInvokeError
from core.trigger.errors import EventIgnoreError, TriggerPluginInvokeError
from core.trigger.provider import PluginTriggerProviderController
from models.provider_ids import TriggerProviderID
@ -56,7 +56,7 @@ class TriggerManager:
manager = PluginTriggerManager()
provider_entities = manager.fetch_trigger_providers(tenant_id)
controllers = []
controllers: list[PluginTriggerProviderController] = []
for provider in provider_entities:
try:
controller = PluginTriggerProviderController(
@ -158,6 +158,7 @@ class TriggerManager:
credential_type: CredentialType,
subscription: Subscription,
request: Request,
payload: Mapping[str, Any],
) -> TriggerInvokeEventResponse:
"""
Execute a trigger
@ -171,6 +172,7 @@ class TriggerManager:
:param credential_type: Credential type
:param subscription: Subscription
:param request: Request
:param payload: Payload
:return: Trigger execution result
"""
provider: PluginTriggerProviderController = cls.get_trigger_provider(
@ -185,10 +187,11 @@ class TriggerManager:
credential_type=credential_type,
subscription=subscription,
request=request,
payload=payload,
)
except EventIgnoreError as e:
return TriggerInvokeEventResponse(variables={}, cancelled=True)
except PluginInvokeError as e:
if e.get_error_type() == "EventIgnoreError":
return TriggerInvokeEventResponse(variables={}, cancelled=True)
logger.exception("Failed to invoke trigger event")
raise TriggerPluginInvokeError(
description=e.to_user_friendly_error(plugin_name=provider.entity.identity.name)
@ -237,7 +240,7 @@ class TriggerManager:
subscription: Subscription,
credentials: Mapping[str, str],
credential_type: CredentialType,
) -> Unsubscription:
) -> UnsubscribeResult:
"""
Unsubscribe from a trigger
@ -283,7 +286,3 @@ class TriggerManager:
return cls.get_trigger_provider(tenant_id=tenant_id, provider_id=provider_id).refresh_trigger(
subscription=subscription, credentials=credentials, credential_type=credential_type
)
# Export
__all__ = ["TriggerManager"]