mirror of
https://github.com/home-assistant/core.git
synced 2025-07-17 18:27:09 +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
|
self, script: Script, *, parallel: bool = False
|
||||||
) -> None:
|
) -> None:
|
||||||
"""Execute a script."""
|
"""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(
|
result = await self._async_run_long_action(
|
||||||
self._hass.async_create_task_internal(
|
self._hass.async_create_task_internal(
|
||||||
script.async_run(
|
script.async_run(
|
||||||
@ -1442,8 +1446,12 @@ class Script:
|
|||||||
script_mode: str = DEFAULT_SCRIPT_MODE,
|
script_mode: str = DEFAULT_SCRIPT_MODE,
|
||||||
top_level: bool = True,
|
top_level: bool = True,
|
||||||
variables: ScriptVariables | None = None,
|
variables: ScriptVariables | None = None,
|
||||||
|
enabled: bool = True,
|
||||||
) -> None:
|
) -> 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)):
|
if not (all_scripts := hass.data.get(DATA_SCRIPTS)):
|
||||||
all_scripts = hass.data[DATA_SCRIPTS] = []
|
all_scripts = hass.data[DATA_SCRIPTS] = []
|
||||||
hass.bus.async_listen_once(
|
hass.bus.async_listen_once(
|
||||||
@ -1462,6 +1470,7 @@ class Script:
|
|||||||
self.name = name
|
self.name = name
|
||||||
self.unique_id = f"{domain}.{name}-{id(self)}"
|
self.unique_id = f"{domain}.{name}-{id(self)}"
|
||||||
self.domain = domain
|
self.domain = domain
|
||||||
|
self.enabled = enabled
|
||||||
self.running_description = running_description or f"{domain} script"
|
self.running_description = running_description or f"{domain} script"
|
||||||
self._change_listener = change_listener
|
self._change_listener = change_listener
|
||||||
self._change_listener_job = (
|
self._change_listener_job = (
|
||||||
@ -2002,6 +2011,7 @@ class Script:
|
|||||||
max_runs=self.max_runs,
|
max_runs=self.max_runs,
|
||||||
logger=self._logger,
|
logger=self._logger,
|
||||||
top_level=False,
|
top_level=False,
|
||||||
|
enabled=parallel_script.get(CONF_ENABLED, True),
|
||||||
)
|
)
|
||||||
parallel_script.change_listener = partial(
|
parallel_script.change_listener = partial(
|
||||||
self._chain_change_listener, parallel_script
|
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