Refactor: Rename triggers to events in trigger-related entities and services

- Updated class and variable names from 'triggers' to 'events' across multiple files to improve clarity and consistency.
- Adjusted related data structures and methods to reflect the new naming convention, including changes in API entities, service methods, and trigger management logic.
- Ensured all references to triggers are replaced with events to align with the updated terminology.
This commit is contained in:
Harry 2025-09-30 20:10:00 +08:00
parent 1bfa8e6662
commit 32f4d1af8b
10 changed files with 92 additions and 104 deletions

View File

@ -264,9 +264,9 @@ class TriggerValidateProviderCredentialsResponse(BaseModel):
class TriggerDispatchResponse: class TriggerDispatchResponse:
triggers: list[str] events: list[str]
response: Response response: Response
def __init__(self, triggers: list[str], response: Response): def __init__(self, events: list[str], response: Response):
self.triggers = triggers self.events = events
self.response = response self.response = response

View File

@ -28,8 +28,8 @@ class PluginTriggerManager(BasePluginClient):
for provider in json_response.get("data", []): for provider in json_response.get("data", []):
declaration = provider.get("declaration", {}) or {} declaration = provider.get("declaration", {}) or {}
provider_id = provider.get("plugin_id") + "/" + provider.get("provider") provider_id = provider.get("plugin_id") + "/" + provider.get("provider")
for trigger in declaration.get("triggers", []): for event in declaration.get("events", []):
trigger["identity"]["provider"] = provider_id event["identity"]["provider"] = provider_id
return json_response return json_response
@ -45,8 +45,8 @@ class PluginTriggerManager(BasePluginClient):
provider.declaration.identity.name = f"{provider.plugin_id}/{provider.declaration.identity.name}" provider.declaration.identity.name = f"{provider.plugin_id}/{provider.declaration.identity.name}"
# override the provider name for each trigger to plugin_id/provider_name # override the provider name for each trigger to plugin_id/provider_name
for trigger in provider.declaration.triggers: for event in provider.declaration.events:
trigger.identity.provider = provider.declaration.identity.name event.identity.provider = provider.declaration.identity.name
return response return response
@ -58,8 +58,8 @@ class PluginTriggerManager(BasePluginClient):
def transformer(json_response: dict[str, Any]) -> dict: def transformer(json_response: dict[str, Any]) -> dict:
data = json_response.get("data") data = json_response.get("data")
if data: if data:
for trigger in data.get("declaration", {}).get("triggers", []): for event in data.get("declaration", {}).get("events", []):
trigger["identity"]["provider"] = str(provider_id) event["identity"]["provider"] = str(provider_id)
return json_response return json_response
@ -74,8 +74,8 @@ class PluginTriggerManager(BasePluginClient):
response.declaration.identity.name = str(provider_id) response.declaration.identity.name = str(provider_id)
# override the provider name for each trigger to plugin_id/provider_name # override the provider name for each trigger to plugin_id/provider_name
for trigger in response.declaration.triggers: for event in response.declaration.events:
trigger.identity.provider = str(provider_id) event.identity.provider = str(provider_id)
return response return response
@ -184,7 +184,7 @@ class PluginTriggerManager(BasePluginClient):
for resp in response: for resp in response:
return TriggerDispatchResponse( return TriggerDispatchResponse(
triggers=resp.triggers, events=resp.events,
response=deserialize_response(binascii.unhexlify(resp.raw_http_response.encode())), response=deserialize_response(binascii.unhexlify(resp.raw_http_response.encode())),
) )

View File

@ -7,11 +7,11 @@ from core.entities.provider_entities import ProviderConfig
from core.plugin.entities.plugin_daemon import CredentialType from core.plugin.entities.plugin_daemon import CredentialType
from core.tools.entities.common_entities import I18nObject from core.tools.entities.common_entities import I18nObject
from core.trigger.entities.entities import ( from core.trigger.entities.entities import (
EventDescription,
EventIdentity,
EventParameter,
SubscriptionConstructor, SubscriptionConstructor,
TriggerCreationMethod, TriggerCreationMethod,
TriggerDescription,
TriggerIdentity,
TriggerParameter,
) )
@ -29,9 +29,9 @@ class TriggerProviderSubscriptionApiEntity(BaseModel):
class TriggerApiEntity(BaseModel): class TriggerApiEntity(BaseModel):
name: str = Field(description="The name of the trigger") name: str = Field(description="The name of the trigger")
identity: TriggerIdentity = Field(description="The identity of the trigger") identity: EventIdentity = Field(description="The identity of the trigger")
description: TriggerDescription = Field(description="The description of the trigger") description: EventDescription = Field(description="The description of the trigger")
parameters: list[TriggerParameter] = Field(description="The parameters of the trigger") parameters: list[EventParameter] = Field(description="The parameters of the trigger")
output_schema: Optional[Mapping[str, Any]] = Field(description="The output schema of the trigger") output_schema: Optional[Mapping[str, Any]] = Field(description="The output schema of the trigger")
@ -60,7 +60,7 @@ class TriggerProviderApiEntity(BaseModel):
default_factory=list, default_factory=list,
description="The subscription schema of the trigger provider", description="The subscription schema of the trigger provider",
) )
triggers: list[TriggerApiEntity] = Field(description="The triggers of the trigger provider") events: list[TriggerApiEntity] = Field(description="The events of the trigger provider")
class SubscriptionBuilderApiEntity(BaseModel): class SubscriptionBuilderApiEntity(BaseModel):

View File

@ -16,7 +16,7 @@ from core.plugin.entities.parameters import (
from core.tools.entities.common_entities import I18nObject from core.tools.entities.common_entities import I18nObject
class TriggerParameterType(StrEnum): class EventParameterType(StrEnum):
"""The type of the parameter""" """The type of the parameter"""
STRING = "string" STRING = "string"
@ -39,14 +39,14 @@ class TriggerParameterType(StrEnum):
return cast_parameter_value(self, value) return cast_parameter_value(self, value)
class TriggerParameter(BaseModel): class EventParameter(BaseModel):
""" """
The parameter of the trigger The parameter of the event
""" """
name: str = Field(..., description="The name of the parameter") name: str = Field(..., description="The name of the parameter")
label: I18nObject = Field(..., description="The label presented to the user") label: I18nObject = Field(..., description="The label presented to the user")
type: TriggerParameterType = Field(..., description="The type of the parameter") type: EventParameterType = Field(..., description="The type of the parameter")
auto_generate: Optional[PluginParameterAutoGenerate] = Field( auto_generate: Optional[PluginParameterAutoGenerate] = Field(
default=None, description="The auto generate of the parameter" default=None, description="The auto generate of the parameter"
) )
@ -79,36 +79,36 @@ class TriggerProviderIdentity(BaseModel):
tags: list[str] = Field(default_factory=list, description="The tags of the trigger provider") tags: list[str] = Field(default_factory=list, description="The tags of the trigger provider")
class TriggerIdentity(BaseModel): class EventIdentity(BaseModel):
""" """
The identity of the trigger The identity of the event
""" """
author: str = Field(..., description="The author of the trigger") author: str = Field(..., description="The author of the event")
name: str = Field(..., description="The name of the trigger") name: str = Field(..., description="The name of the event")
label: I18nObject = Field(..., description="The label of the trigger") label: I18nObject = Field(..., description="The label of the event")
provider: Optional[str] = Field(default=None, description="The provider of the trigger") provider: Optional[str] = Field(default=None, description="The provider of the event")
class TriggerDescription(BaseModel): class EventDescription(BaseModel):
""" """
The description of the trigger The description of the event
""" """
human: I18nObject = Field(..., description="Human readable description") human: I18nObject = Field(..., description="Human readable description")
llm: I18nObject = Field(..., description="LLM readable description") llm: I18nObject = Field(..., description="LLM readable description")
class TriggerEntity(BaseModel): class EventEntity(BaseModel):
""" """
The configuration of a trigger The configuration of an event
""" """
identity: TriggerIdentity = Field(..., description="The identity of the trigger") identity: EventIdentity = Field(..., description="The identity of the event")
parameters: list[TriggerParameter] = Field(default=[], description="The parameters of the trigger") parameters: list[EventParameter] = Field(default=[], description="The parameters of the event")
description: TriggerDescription = Field(..., description="The description of the trigger") description: EventDescription = Field(..., description="The description of the event")
output_schema: Optional[Mapping[str, Any]] = Field( output_schema: Optional[Mapping[str, Any]] = Field(
default=None, description="The output schema that this trigger produces" default=None, description="The output schema that this event produces"
) )
@ -124,7 +124,7 @@ class SubscriptionConstructor(BaseModel):
The subscription constructor of the trigger provider The subscription constructor of the trigger provider
""" """
parameters: list[TriggerParameter] = Field( parameters: list[EventParameter] = Field(
default_factory=list, description="The parameters schema of the subscription constructor" default_factory=list, description="The parameters schema of the subscription constructor"
) )
@ -158,7 +158,7 @@ class TriggerProviderEntity(BaseModel):
subscription_constructor: SubscriptionConstructor = Field( subscription_constructor: SubscriptionConstructor = Field(
description="The subscription constructor of the trigger provider", description="The subscription constructor of the trigger provider",
) )
triggers: list[TriggerEntity] = Field(default=[], description="The triggers of the trigger provider") events: list[EventEntity] = Field(default=[], description="The events of the trigger provider")
class Subscription(BaseModel): class Subscription(BaseModel):
@ -262,7 +262,7 @@ class TriggerEventData(BaseModel):
"""Event data dispatched to trigger sessions.""" """Event data dispatched to trigger sessions."""
subscription_id: str subscription_id: str
triggers: list[str] events: list[str]
request_id: str request_id: str
timestamp: float timestamp: float
@ -293,18 +293,18 @@ class TriggerCreationMethod(StrEnum):
# Export all entities # Export all entities
__all__ = [ __all__ = [
"EventDescription",
"EventEntity",
"EventIdentity",
"EventParameter",
"EventParameterType",
"OAuthSchema", "OAuthSchema",
"RequestLog", "RequestLog",
"Subscription", "Subscription",
"SubscriptionBuilder", "SubscriptionBuilder",
"TriggerCreationMethod", "TriggerCreationMethod",
"TriggerDescription",
"TriggerEntity",
"TriggerEventData", "TriggerEventData",
"TriggerIdentity",
"TriggerInputs", "TriggerInputs",
"TriggerParameter",
"TriggerParameterType",
"TriggerProviderEntity", "TriggerProviderEntity",
"TriggerProviderIdentity", "TriggerProviderIdentity",
"Unsubscription", "Unsubscription",

View File

@ -17,11 +17,11 @@ from core.plugin.entities.request import (
from core.plugin.impl.trigger import PluginTriggerManager from core.plugin.impl.trigger import PluginTriggerManager
from core.trigger.entities.api_entities import TriggerApiEntity, TriggerProviderApiEntity from core.trigger.entities.api_entities import TriggerApiEntity, TriggerProviderApiEntity
from core.trigger.entities.entities import ( from core.trigger.entities.entities import (
EventEntity,
ProviderConfig, ProviderConfig,
Subscription, Subscription,
SubscriptionConstructor, SubscriptionConstructor,
TriggerCreationMethod, TriggerCreationMethod,
TriggerEntity,
TriggerProviderEntity, TriggerProviderEntity,
TriggerProviderIdentity, TriggerProviderIdentity,
Unsubscription, Unsubscription,
@ -100,15 +100,15 @@ class PluginTriggerProviderController:
subscription_constructor=subscription_constructor, subscription_constructor=subscription_constructor,
subscription_schema=self.entity.subscription_schema, subscription_schema=self.entity.subscription_schema,
supported_creation_methods=supported_creation_methods, supported_creation_methods=supported_creation_methods,
triggers=[ events=[
TriggerApiEntity( TriggerApiEntity(
name=trigger.identity.name, name=event.identity.name,
identity=trigger.identity, identity=event.identity,
description=trigger.description, description=event.description,
parameters=trigger.parameters, parameters=event.parameters,
output_schema=trigger.output_schema, output_schema=event.output_schema,
) )
for trigger in self.entity.triggers for event in self.entity.events
], ],
) )
@ -117,24 +117,24 @@ class PluginTriggerProviderController:
"""Get provider identity""" """Get provider identity"""
return self.entity.identity return self.entity.identity
def get_triggers(self) -> list[TriggerEntity]: def get_events(self) -> list[EventEntity]:
""" """
Get all triggers for this provider Get all events for this provider
:return: List of trigger entities :return: List of event entities
""" """
return self.entity.triggers return self.entity.events
def get_trigger(self, trigger_name: str) -> Optional[TriggerEntity]: def get_event(self, event_name: str) -> Optional[EventEntity]:
""" """
Get a specific trigger by name Get a specific event by name
:param trigger_name: Trigger name :param event_name: Event name
:return: Trigger entity or None :return: Event entity or None
""" """
for trigger in self.entity.triggers: for event in self.entity.events:
if trigger.identity.name == trigger_name: if event.identity.name == event_name:
return trigger return event
return None return None
def get_subscription_default_properties(self) -> Mapping[str, Any]: def get_subscription_default_properties(self) -> Mapping[str, Any]:
@ -161,7 +161,7 @@ class PluginTriggerProviderController:
:return: Validation response :return: Validation response
""" """
# First validate against schema # First validate against schema
for config in self.entity.subscription_constructor.credentials_schema: for config in self.entity.subscription_constructor.credentials_schema or []:
if config.required and config.name not in credentials: if config.required and config.name not in credentials:
raise TriggerProviderCredentialValidationError(f"Missing required credential field: {config.name}") raise TriggerProviderCredentialValidationError(f"Missing required credential field: {config.name}")
@ -210,7 +210,7 @@ class PluginTriggerProviderController:
) )
if credential_type == CredentialType.API_KEY: if credential_type == CredentialType.API_KEY:
return ( return (
subscription_constructor.credentials_schema.copy() subscription_constructor.credentials_schema.copy() or []
if subscription_constructor and subscription_constructor.credentials_schema if subscription_constructor and subscription_constructor.credentials_schema
else [] else []
) )

View File

@ -15,8 +15,8 @@ from core.plugin.entities.request import Event, TriggerInvokeResponse
from core.plugin.impl.exc import PluginInvokeError from core.plugin.impl.exc import PluginInvokeError
from core.plugin.impl.trigger import PluginTriggerManager from core.plugin.impl.trigger import PluginTriggerManager
from core.trigger.entities.entities import ( from core.trigger.entities.entities import (
EventEntity,
Subscription, Subscription,
TriggerEntity,
Unsubscription, Unsubscription,
) )
from core.trigger.provider import PluginTriggerProviderController from core.trigger.provider import PluginTriggerProviderController
@ -116,7 +116,7 @@ class TriggerManager:
return cls.list_plugin_trigger_providers(tenant_id) return cls.list_plugin_trigger_providers(tenant_id)
@classmethod @classmethod
def list_triggers_by_provider(cls, tenant_id: str, provider_id: TriggerProviderID) -> list[TriggerEntity]: def list_triggers_by_provider(cls, tenant_id: str, provider_id: TriggerProviderID) -> list[EventEntity]:
""" """
List all triggers for a specific provider List all triggers for a specific provider
@ -125,20 +125,8 @@ class TriggerManager:
:return: List of trigger entities :return: List of trigger entities
""" """
provider = cls.get_trigger_provider(tenant_id, provider_id) provider = cls.get_trigger_provider(tenant_id, provider_id)
return provider.get_triggers() return provider.get_events()
@classmethod
def get_trigger(cls, tenant_id: str, provider_id: TriggerProviderID, trigger_name: str) -> Optional[TriggerEntity]:
"""
Get a specific trigger
:param tenant_id: Tenant ID
:param provider_id: Provider ID
:param trigger_name: Trigger name
:return: Trigger entity or None
"""
return cls.get_trigger_provider(tenant_id, provider_id).get_trigger(trigger_name)
@classmethod @classmethod
def invoke_trigger( def invoke_trigger(
cls, cls,
@ -165,7 +153,7 @@ class TriggerManager:
:return: Trigger execution result :return: Trigger execution result
""" """
provider = cls.get_trigger_provider(tenant_id, provider_id) provider = cls.get_trigger_provider(tenant_id, provider_id)
trigger = provider.get_trigger(trigger_name) trigger = provider.get_event(trigger_name)
if not trigger: if not trigger:
raise ValueError(f"Trigger {trigger_name} not found in provider {provider_id}") raise ValueError(f"Trigger {trigger_name} not found in provider {provider_id}")
try: try:

View File

@ -75,7 +75,7 @@ class TriggerDebugService:
cls, cls,
tenant_id: str, tenant_id: str,
subscription_id: str, subscription_id: str,
triggers: list[str], events: list[str],
request_id: str, request_id: str,
timestamp: int, timestamp: int,
) -> int: ) -> int:
@ -86,15 +86,15 @@ class TriggerDebugService:
).model_dump_json() ).model_dump_json()
dispatched = 0 dispatched = 0
if len(triggers) > 10: if len(events) > 10:
logger.warning( logger.warning(
"Too many triggers to dispatch at once: %d triggers tenant: %s subscription: %s", "Too many events to dispatch at once: %d events tenant: %s subscription: %s",
len(triggers), len(events),
tenant_id, tenant_id,
subscription_id, subscription_id,
) )
for trigger_name in triggers: for trigger_name in events:
try: try:
dispatched += redis_client.eval( dispatched += redis_client.eval(
cls.LUA_DISPATCH, cls.LUA_DISPATCH,

View File

@ -9,7 +9,7 @@ from sqlalchemy.orm import Session
from core.plugin.entities.plugin_daemon import CredentialType from core.plugin.entities.plugin_daemon import CredentialType
from core.plugin.utils.http_parser import deserialize_request, serialize_request from core.plugin.utils.http_parser import deserialize_request, serialize_request
from core.trigger.entities.entities import TriggerEntity from core.trigger.entities.entities import EventEntity
from core.trigger.trigger_manager import TriggerManager from core.trigger.trigger_manager import TriggerManager
from core.workflow.enums import NodeType from core.workflow.enums import NodeType
from core.workflow.nodes.trigger_schedule.exc import TenantOwnerNotFoundError from core.workflow.nodes.trigger_schedule.exc import TenantOwnerNotFoundError
@ -70,7 +70,7 @@ class TriggerService:
@classmethod @classmethod
def dispatch_triggered_workflows( def dispatch_triggered_workflows(
cls, subscription: TriggerSubscription, trigger: TriggerEntity, request_id: str cls, subscription: TriggerSubscription, trigger: EventEntity, request_id: str
) -> int: ) -> int:
"""Process triggered workflows. """Process triggered workflows.
@ -191,7 +191,7 @@ class TriggerService:
user_id=subscription.user_id, request=request, subscription=subscription.to_entity() user_id=subscription.user_id, request=request, subscription=subscription.to_entity()
) )
if dispatch_response.triggers: if dispatch_response.events:
request_id = f"trigger_request_{uuid.uuid4().hex}" request_id = f"trigger_request_{uuid.uuid4().hex}"
serialized_request = serialize_request(request) serialized_request = serialize_request(request)
storage.save(f"triggers/{request_id}", serialized_request) storage.save(f"triggers/{request_id}", serialized_request)
@ -204,7 +204,7 @@ class TriggerService:
provider_id=subscription.provider_id, provider_id=subscription.provider_id,
subscription_id=subscription.id, subscription_id=subscription.id,
timestamp=timestamp, timestamp=timestamp,
triggers=list(dispatch_response.triggers), events=list(dispatch_response.events),
request_id=request_id, request_id=request_id,
) )
dispatch_data = plugin_trigger_dispatch_data.model_dump(mode="json") dispatch_data = plugin_trigger_dispatch_data.model_dump(mode="json")
@ -212,7 +212,7 @@ class TriggerService:
logger.info( logger.info(
"Queued async dispatching for %d triggers on endpoint %s with request_id %s", "Queued async dispatching for %d triggers on endpoint %s with request_id %s",
len(dispatch_response.triggers), len(dispatch_response.events),
endpoint_id, endpoint_id,
request_id, request_id,
) )

View File

@ -65,7 +65,7 @@ class PluginTriggerDispatchData(BaseModel):
provider_id: str provider_id: str
subscription_id: str subscription_id: str
timestamp: int timestamp: int
triggers: list[str] events: list[str]
request_id: str request_id: str

View File

@ -48,14 +48,14 @@ def dispatch_triggered_workflows_async(
provider_id = dispatch_params.provider_id provider_id = dispatch_params.provider_id
subscription_id = dispatch_params.subscription_id subscription_id = dispatch_params.subscription_id
timestamp = dispatch_params.timestamp timestamp = dispatch_params.timestamp
triggers = dispatch_params.triggers events = dispatch_params.events
request_id = dispatch_params.request_id request_id = dispatch_params.request_id
try: try:
logger.info( logger.info(
"Starting async trigger dispatching for endpoint=%s, triggers=%s, request_id=%s, timestamp=%s", "Starting async trigger dispatching for endpoint=%s, events=%s, request_id=%s, timestamp=%s",
endpoint_id, endpoint_id,
triggers, events,
request_id, request_id,
timestamp, timestamp,
) )
@ -85,13 +85,13 @@ def dispatch_triggered_workflows_async(
# Dispatch each trigger # Dispatch each trigger
dispatched_count = 0 dispatched_count = 0
for trigger in triggers: for event_name in events:
try: try:
trigger = controller.get_trigger(trigger) trigger = controller.get_event(event_name)
if trigger is None: if trigger is None:
logger.error( logger.error(
"Trigger '%s' not found in provider '%s'", "Trigger '%s' not found in provider '%s'",
trigger, event_name,
provider_id, provider_id,
) )
continue continue
@ -105,7 +105,7 @@ def dispatch_triggered_workflows_async(
except Exception: except Exception:
logger.exception( logger.exception(
"Failed to dispatch trigger '%s' for subscription %s", "Failed to dispatch trigger '%s' for subscription %s",
trigger, event_name,
subscription_id, subscription_id,
) )
# Continue processing other triggers even if one fails # Continue processing other triggers even if one fails
@ -117,7 +117,7 @@ def dispatch_triggered_workflows_async(
debug_dispatched = TriggerDebugService.dispatch_debug_event( debug_dispatched = TriggerDebugService.dispatch_debug_event(
tenant_id=subscription.tenant_id, tenant_id=subscription.tenant_id,
subscription_id=subscription_id, subscription_id=subscription_id,
triggers=triggers, events=events,
timestamp=timestamp, timestamp=timestamp,
request_id=request_id, request_id=request_id,
) )
@ -128,7 +128,7 @@ def dispatch_triggered_workflows_async(
logger.info( logger.info(
"Completed async trigger dispatching: processed %d/%d triggers", "Completed async trigger dispatching: processed %d/%d triggers",
dispatched_count, dispatched_count,
len(triggers), len(events),
) )
# Note: Stored request is not deleted here. It should be handled by: # Note: Stored request is not deleted here. It should be handled by:
@ -138,7 +138,7 @@ def dispatch_triggered_workflows_async(
return { return {
"status": "completed", "status": "completed",
"total_count": len(triggers), "total_count": len(events),
"dispatched_count": dispatched_count, "dispatched_count": dispatched_count,
"debug_dispatched_count": debug_dispatched, "debug_dispatched_count": debug_dispatched,
} }