From 012877d8d4602fada732fd8f81ee7e15ee74194b Mon Sep 17 00:00:00 2001 From: Maries Date: Thu, 20 Nov 2025 02:09:40 +0800 Subject: [PATCH] fix: address user input preparation in workflow app generator (#28410) Co-authored-by: lyzno1 <92089059+lyzno1@users.noreply.github.com> --- api/core/app/apps/workflow/app_generator.py | 3 ++- api/tasks/async_workflow_tasks.py | 8 +++---- .../tasks/test_async_workflow_tasks.py | 21 +------------------ 3 files changed, 6 insertions(+), 26 deletions(-) diff --git a/api/core/app/apps/workflow/app_generator.py b/api/core/app/apps/workflow/app_generator.py index be331b92a8..0165c74295 100644 --- a/api/core/app/apps/workflow/app_generator.py +++ b/api/core/app/apps/workflow/app_generator.py @@ -145,7 +145,8 @@ class WorkflowAppGenerator(BaseAppGenerator): **extract_external_trace_id_from_args(args), } workflow_run_id = str(uuid.uuid4()) - # for trigger debug run, not prepare user inputs + # FIXME (Yeuoly): we need to remove the SKIP_PREPARE_USER_INPUTS_KEY from the args + # trigger shouldn't prepare user inputs if self._should_prepare_user_inputs(args): inputs = self._prepare_user_inputs( user_inputs=inputs, diff --git a/api/tasks/async_workflow_tasks.py b/api/tasks/async_workflow_tasks.py index de099c3e96..ab7be44b88 100644 --- a/api/tasks/async_workflow_tasks.py +++ b/api/tasks/async_workflow_tasks.py @@ -19,7 +19,7 @@ from core.app.layers.timeslice_layer import TimeSliceLayer from core.app.layers.trigger_post_layer import TriggerPostLayer from extensions.ext_database import db from models.account import Account -from models.enums import AppTriggerType, CreatorUserRole, WorkflowTriggerStatus +from models.enums import CreatorUserRole, WorkflowTriggerStatus from models.model import App, EndUser, Tenant from models.trigger import WorkflowTriggerLog from models.workflow import Workflow @@ -83,14 +83,12 @@ def execute_workflow_sandbox(task_data_dict: dict[str, Any]): def _build_generator_args(trigger_data: TriggerData) -> dict[str, Any]: """Build args passed into WorkflowAppGenerator.generate for Celery executions.""" + args: dict[str, Any] = { "inputs": dict(trigger_data.inputs), "files": list(trigger_data.files), + SKIP_PREPARE_USER_INPUTS_KEY: True, } - - if trigger_data.trigger_type == AppTriggerType.TRIGGER_WEBHOOK: - args[SKIP_PREPARE_USER_INPUTS_KEY] = True # Webhooks already provide structured inputs - return args diff --git a/api/tests/unit_tests/tasks/test_async_workflow_tasks.py b/api/tests/unit_tests/tasks/test_async_workflow_tasks.py index 3923e256a6..0920f1482c 100644 --- a/api/tests/unit_tests/tasks/test_async_workflow_tasks.py +++ b/api/tests/unit_tests/tasks/test_async_workflow_tasks.py @@ -1,6 +1,5 @@ from core.app.apps.workflow.app_generator import SKIP_PREPARE_USER_INPUTS_KEY -from models.enums import AppTriggerType, WorkflowRunTriggeredFrom -from services.workflow.entities import TriggerData, WebhookTriggerData +from services.workflow.entities import WebhookTriggerData from tasks import async_workflow_tasks @@ -17,21 +16,3 @@ def test_build_generator_args_sets_skip_flag_for_webhook(): assert args[SKIP_PREPARE_USER_INPUTS_KEY] is True assert args["inputs"]["webhook_data"]["body"]["foo"] == "bar" - - -def test_build_generator_args_keeps_validation_for_other_triggers(): - trigger_data = TriggerData( - app_id="app", - tenant_id="tenant", - workflow_id="workflow", - root_node_id="node", - inputs={"foo": "bar"}, - files=[], - trigger_type=AppTriggerType.TRIGGER_SCHEDULE, - trigger_from=WorkflowRunTriggeredFrom.SCHEDULE, - ) - - args = async_workflow_tasks._build_generator_args(trigger_data) - - assert SKIP_PREPARE_USER_INPUTS_KEY not in args - assert args["inputs"] == {"foo": "bar"}