mirror of
https://github.com/home-assistant/core.git
synced 2025-07-16 01:37:08 +00:00
Fix Automation/Script: sequence within a parallel ignoring enabled flag (#142977)
Co-authored-by: Abílio Costa <abmantis@users.noreply.github.com> Co-authored-by: Franck Nijhof <git@frenck.dev>
This commit is contained in:
parent
4483025856
commit
35f9cc55f1
@ -629,6 +629,10 @@ class _ScriptRun:
|
||||
self, script: Script, *, parallel: bool = False
|
||||
) -> None:
|
||||
"""Execute a script."""
|
||||
if not script.enabled:
|
||||
self._log("Skipping disabled script: %s", script.name)
|
||||
trace_set_result(enabled=False)
|
||||
return
|
||||
result = await self._async_run_long_action(
|
||||
self._hass.async_create_task_internal(
|
||||
script.async_run(
|
||||
@ -1442,8 +1446,12 @@ class Script:
|
||||
script_mode: str = DEFAULT_SCRIPT_MODE,
|
||||
top_level: bool = True,
|
||||
variables: ScriptVariables | None = None,
|
||||
enabled: bool = True,
|
||||
) -> None:
|
||||
"""Initialize the script."""
|
||||
"""Initialize the script.
|
||||
|
||||
enabled attribute is only used for non-top-level scripts.
|
||||
"""
|
||||
if not (all_scripts := hass.data.get(DATA_SCRIPTS)):
|
||||
all_scripts = hass.data[DATA_SCRIPTS] = []
|
||||
hass.bus.async_listen_once(
|
||||
@ -1462,6 +1470,7 @@ class Script:
|
||||
self.name = name
|
||||
self.unique_id = f"{domain}.{name}-{id(self)}"
|
||||
self.domain = domain
|
||||
self.enabled = enabled
|
||||
self.running_description = running_description or f"{domain} script"
|
||||
self._change_listener = change_listener
|
||||
self._change_listener_job = (
|
||||
@ -2002,6 +2011,7 @@ class Script:
|
||||
max_runs=self.max_runs,
|
||||
logger=self._logger,
|
||||
top_level=False,
|
||||
enabled=parallel_script.get(CONF_ENABLED, True),
|
||||
)
|
||||
parallel_script.change_listener = partial(
|
||||
self._chain_change_listener, parallel_script
|
||||
|
@ -6658,3 +6658,41 @@ async def test_calling_service_backwards_compatible(
|
||||
],
|
||||
}
|
||||
)
|
||||
|
||||
|
||||
async def test_enabled_sequence_in_parallel(
|
||||
hass: HomeAssistant, caplog: pytest.LogCaptureFixture
|
||||
) -> None:
|
||||
"""Test to ensure sequence inside parallel follows enabled tag."""
|
||||
event = "test_event"
|
||||
events = async_capture_events(hass, event)
|
||||
sequence = cv.SCRIPT_SCHEMA(
|
||||
{
|
||||
"parallel": [
|
||||
{
|
||||
"sequence": [{"event": event, "event_data": {"value": "disabled"}}],
|
||||
"enabled": "false",
|
||||
},
|
||||
{
|
||||
"sequence": [{"event": event, "event_data": {"value": "enabled"}}],
|
||||
"enabled": "true",
|
||||
},
|
||||
]
|
||||
}
|
||||
)
|
||||
|
||||
script_obj = script.Script(hass, sequence, "Test Name", "test_domain")
|
||||
|
||||
await script_obj.async_run(context=Context())
|
||||
await hass.async_block_till_done()
|
||||
|
||||
assert len(events) == 1
|
||||
assert events[0].data["value"] == "enabled"
|
||||
|
||||
expected_trace = {
|
||||
"0": [{"result": {"enabled": False}}],
|
||||
"0/parallel/1/sequence/0": [
|
||||
{"result": {"event": "test_event", "event_data": {"value": "enabled"}}}
|
||||
],
|
||||
}
|
||||
assert_action_trace(expected_trace)
|
||||
|
Loading…
x
Reference in New Issue
Block a user