The below flow is a simple example to verify that reproduces the crash when values to events parameters is set via config_expr in the @trigger decorator.
"""
Test: Does @trigger(events=config_expr(...)) crash due to ConfigValue immutability?
This reproduces the bug where events_decorator.py tries to mutate a ConfigValue dict:
event["parameters"] = self.process_parameters(...)
-> TypeError: ConfigValue is immutable
Run:
# Should FAIL (multi-event, list-of-dicts config value):
python test_config_value_immutability.py --config-value config '{"project_name":"test","trigger_events":[{"name":"evt_a","parameters":{"my_param":"my_param"}},{"name":"evt_b"}]}' show
"""
from metaflow import FlowSpec, step, Parameter, Config, config_expr, project, trigger
@project(name=config_expr("config.project_name"))
@trigger(events=config_expr("config.trigger_events"))
class MultiEventConfigTest(FlowSpec):
config = Config(
"config",
default_value={
"project_name": "test",
"trigger_events": [
{
"name": "evt_a",
"parameters": {"my_param": "my_param"},
},
{"name": "evt_b"},
],
},
)
my_param = Parameter("my_param", default="", type=str)
@step
def start(self):
print(f"my_param={self.my_param}")
self.next(self.end)
@step
def end(self):
print("done")
if __name__ == "__main__":
MultiEventConfigTest()
Traceback (most recent call last):
File "/home/ubuntu/miniconda3/envs/ob-lambdas/lib/python3.13/site-packages/metaflow/cli.py", line 727, in main
start(auto_envvar_prefix="METAFLOW", obj=state)
~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/ubuntu/miniconda3/envs/ob-lambdas/lib/python3.13/site-packages/metaflow/_vendor/click/core.py", line 829, in __call__
return self.main(args, kwargs)
~~~~~~~~~^^^^^^^^^^^^^^^^^
File "/home/ubuntu/miniconda3/envs/ob-lambdas/lib/python3.13/site-packages/metaflow/_vendor/click/core.py", line 782, in main
rv = self.invoke(ctx)
File "/home/ubuntu/miniconda3/envs/ob-lambdas/lib/python3.13/site-packages/metaflow/cli_components/utils.py", line 65, in invoke
click.Command.invoke(self, ctx)
~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^
File "/home/ubuntu/miniconda3/envs/ob-lambdas/lib/python3.13/site-packages/metaflow/_vendor/click/core.py", line 1066, in invoke
return ctx.invoke(self.callback, ctx.params)
~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/ubuntu/miniconda3/envs/ob-lambdas/lib/python3.13/site-packages/metaflow/_vendor/click/core.py", line 610, in invoke
return callback(args, kwargs)
File "/home/ubuntu/miniconda3/envs/ob-lambdas/lib/python3.13/site-packages/metaflow/_vendor/click/decorators.py", line 21, in new_func
return f(get_current_context(), args, kwargs)
File "/home/ubuntu/miniconda3/envs/ob-lambdas/lib/python3.13/site-packages/metaflow/cli.py", line 568, in start
decorators._init_flow_decorators(
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
ctx.obj.flow,
^^^^^^^^^^^^^
...<8 lines>...
ctx.obj.skip_decorators,
^^^^^^^^^^^^^^^^^^^^^^^^
)
^
File "/home/ubuntu/miniconda3/envs/ob-lambdas/lib/python3.13/site-packages/metaflow/decorators.py", line 788, in _init_flow_decorators
deco.flow_init(
~~~~~~~~~~~~~~^
flow,
^^^^^
...<6 lines>...
deco_flow_init_options,
^^^^^^^^^^^^^^^^^^^^^^^
)
^
File "/home/ubuntu/miniconda3/envs/ob-lambdas/lib/python3.13/site-packages/metaflow/plugins/events_decorator.py", line 236, in flow_init
processed_event = self.process_event(event)
File "/home/ubuntu/miniconda3/envs/ob-lambdas/lib/python3.13/site-packages/metaflow/plugins/events_decorator.py", line 122, in process_event
event["parameters"] = self.process_parameters(
~~~~~^^^^^^^^^^^^^^
File "/home/ubuntu/miniconda3/envs/ob-lambdas/lib/python3.13/site-packages/metaflow/user_configs/config_parameters.py", line 190, in __setitem__
raise TypeError("ConfigValue is immutable")
TypeError: ConfigValue is immutable
The below flow is a simple example to verify that reproduces the crash when values to
eventsparameters is set viaconfig_exprin the@triggerdecorator.The error: