Warn if integrations call async_show_progress without passing a task (#107796)

This commit is contained in:
Erik Montnemery 2024-01-13 11:56:05 +01:00 committed by GitHub
parent 9471f81a18
commit 24c23d7323
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 25 additions and 1 deletions

View file

@ -24,6 +24,7 @@ from .helpers.deprecation import (
dir_with_deprecated_constants, dir_with_deprecated_constants,
) )
from .helpers.frame import report from .helpers.frame import report
from .loader import async_suggest_report_issue
from .util import uuid as uuid_util from .util import uuid as uuid_util
_LOGGER = logging.getLogger(__name__) _LOGGER = logging.getLogger(__name__)
@ -526,6 +527,7 @@ class FlowHandler:
MINOR_VERSION = 1 MINOR_VERSION = 1
__progress_task: asyncio.Task[Any] | None = None __progress_task: asyncio.Task[Any] | None = None
__no_progress_task_reported = False
@property @property
def source(self) -> str | None: def source(self) -> str | None:
@ -668,6 +670,21 @@ class FlowHandler:
progress_task: asyncio.Task[Any] | None = None, progress_task: asyncio.Task[Any] | None = None,
) -> FlowResult: ) -> FlowResult:
"""Show a progress message to the user, without user input allowed.""" """Show a progress message to the user, without user input allowed."""
if progress_task is None and not self.__no_progress_task_reported:
self.__no_progress_task_reported = True
cls = self.__class__
report_issue = async_suggest_report_issue(self.hass, module=cls.__module__)
_LOGGER.warning(
(
"%s::%s calls async_show_progress without passing a progress task, "
"this is not valid and will break in Home Assistant Core 2024.8. "
"Please %s"
),
cls.__module__,
cls.__name__,
report_issue,
)
result = FlowResult( result = FlowResult(
type=FlowResultType.SHOW_PROGRESS, type=FlowResultType.SHOW_PROGRESS,
flow_id=self.flow_id, flow_id=self.flow_id,

View file

@ -498,7 +498,7 @@ async def test_show_progress_error(hass: HomeAssistant, manager) -> None:
assert result["reason"] == "error" assert result["reason"] == "error"
async def test_show_progress_legacy(hass: HomeAssistant, manager) -> None: async def test_show_progress_legacy(hass: HomeAssistant, manager, caplog) -> None:
"""Test show progress logic. """Test show progress logic.
This tests the deprecated version where the config flow is responsible for This tests the deprecated version where the config flow is responsible for
@ -586,6 +586,13 @@ async def test_show_progress_legacy(hass: HomeAssistant, manager) -> None:
assert result["type"] == data_entry_flow.FlowResultType.CREATE_ENTRY assert result["type"] == data_entry_flow.FlowResultType.CREATE_ENTRY
assert result["title"] == "Hello" assert result["title"] == "Hello"
# Check for deprecation warning
assert (
"tests.test_data_entry_flow::TestFlow calls async_show_progress without passing"
" a progress task, this is not valid and will break in Home Assistant "
"Core 2024.8."
) in caplog.text
async def test_show_progress_fires_only_when_changed( async def test_show_progress_fires_only_when_changed(
hass: HomeAssistant, manager hass: HomeAssistant, manager