From 01b32921c18661c572d70c13d9a0431a9164ffec Mon Sep 17 00:00:00 2001 From: Deepti Reddy Date: Thu, 6 Aug 2026 17:05:25 -0700 Subject: [PATCH] fix: correct WaitTask inputParameter key from 'wait_until' to 'until' (#426) WaitTask.__init__() was setting the inputParameter key as "wait_until" but the Conductor server expects "until" (see Wait.java: UNTIL_INPUT = "until"). This caused workflows using WaitTask(wait_until=...) to stay RUNNING indefinitely because the server never evaluated the condition. Also adds unit tests covering WaitTask, WaitForDurationTask, and WaitUntilTask to prevent regressions. Co-Authored-By: Claude Sonnet 4.6 --- .../client/workflow/task/wait_task.py | 2 +- tests/unit/workflow/test_wait_task.py | 40 +++++++++++++++++++ 2 files changed, 41 insertions(+), 1 deletion(-) create mode 100644 tests/unit/workflow/test_wait_task.py diff --git a/src/conductor/client/workflow/task/wait_task.py b/src/conductor/client/workflow/task/wait_task.py index d32f9fa7d..a6664d547 100644 --- a/src/conductor/client/workflow/task/wait_task.py +++ b/src/conductor/client/workflow/task/wait_task.py @@ -22,7 +22,7 @@ def __init__(self, task_ref_name: str, wait_until: Optional[str] = None, wait_fo raise Exception("both wait_until and wait_for_seconds are provided. ONLY one is allowed") if wait_until: self.input_parameters = { - "wait_until": wait_until + "until": wait_until } if wait_for_seconds: self.input_parameters = { diff --git a/tests/unit/workflow/test_wait_task.py b/tests/unit/workflow/test_wait_task.py new file mode 100644 index 000000000..5591fedcd --- /dev/null +++ b/tests/unit/workflow/test_wait_task.py @@ -0,0 +1,40 @@ +import unittest + +from conductor.client.workflow.task.wait_task import WaitTask, WaitForDurationTask, WaitUntilTask + + +class TestWaitTask(unittest.TestCase): + def test_wait_until_uses_correct_key(self): + """WaitTask(wait_until=...) must set the 'until' key, not 'wait_until'. + + The Conductor server reads the 'until' inputParameter (see Wait.java: + UNTIL_INPUT = "until"). Using the wrong key causes the task to stay + IN_PROGRESS indefinitely because the server never evaluates the + condition. See: https://github.com/conductor-oss/python-sdk/issues/426 + """ + task = WaitTask("my_wait_ref", wait_until="2025-01-01 00:00 UTC") + self.assertIn("until", task.input_parameters) + self.assertNotIn("wait_until", task.input_parameters) + self.assertEqual(task.input_parameters["until"], "2025-01-01 00:00 UTC") + + def test_wait_for_seconds_uses_duration_key(self): + task = WaitTask("my_wait_ref", wait_for_seconds=30) + self.assertIn("duration", task.input_parameters) + self.assertEqual(task.input_parameters["duration"], "30s") + + def test_both_params_raises(self): + with self.assertRaises(Exception): + WaitTask("my_wait_ref", wait_until="2025-01-01 00:00 UTC", wait_for_seconds=30) + + def test_wait_for_duration_task(self): + task = WaitForDurationTask("dur_ref", duration_time_seconds=60) + self.assertEqual(task.input_parameters["duration"], "60s") + + def test_wait_until_task_uses_until_key(self): + task = WaitUntilTask("until_ref", date_time="2025-06-01 12:00 UTC") + self.assertIn("until", task.input_parameters) + self.assertEqual(task.input_parameters["until"], "2025-06-01 12:00 UTC") + + +if __name__ == "__main__": + unittest.main()