diff --git a/temporalio/workflow.py b/temporalio/workflow.py index e2d59b1a5..315150351 100644 --- a/temporalio/workflow.py +++ b/temporalio/workflow.py @@ -1512,6 +1512,13 @@ def _apply_to_class( f"Multiple update methods found for {defn_name} " f"(at least on {name} and {updates[update_defn.name].fn.__name__})" ) + elif update_defn.validator and not _parameters_identical_up_to_naming( + update_defn.fn, update_defn.validator + ): + issues.append( + f"Update validator method {update_defn.validator.__name__} parameters " + f"do not match update method {update_defn.fn.__name__} parameters" + ) else: updates[update_defn.name] = update_defn diff --git a/tests/test_workflow.py b/tests/test_workflow.py index 1c3478a91..30cc4db76 100644 --- a/tests/test_workflow.py +++ b/tests/test_workflow.py @@ -418,3 +418,26 @@ def test_workflow_init_not__init__(): with pytest.raises(ValueError) as err: workflow.init(BadWorkflowInit.not__init__) assert "@workflow.init may only be used on the __init__ method" in str(err.value) + + +class BadUpdateValidator: + @workflow.update + def my_update(self, a: str): + pass + + @my_update.validator # type: ignore + def my_validator(self, a: int): + pass + + @workflow.run + async def run(self): + pass + + +def test_workflow_update_validator_not_update(): + with pytest.raises(ValueError) as err: + workflow.defn(BadUpdateValidator) + assert ( + "Update validator method my_validator parameters do not match update method my_update parameters" + in str(err.value) + )