1
0
mirror of https://github.com/home-assistant/core.git synced 2026-02-15 07:36:16 +00:00

Repair flow description placeholders are optional (#159385)

This commit is contained in:
epenet
2025-12-23 20:31:04 +01:00
committed by GitHub
parent 0f3f16fabe
commit b87b72ab01
5 changed files with 15 additions and 57 deletions

View File

@@ -8,8 +8,7 @@ import voluptuous as vol
from homeassistant import data_entry_flow
from homeassistant.components.repairs import RepairsFlow
from homeassistant.core import HomeAssistant, callback
from homeassistant.helpers import issue_registry as ir
from homeassistant.core import HomeAssistant
from .manager import async_replace_device
@@ -22,13 +21,6 @@ class ESPHomeRepair(RepairsFlow):
self._data = data
super().__init__()
@callback
def _async_get_placeholders(self) -> dict[str, str]:
issue_registry = ir.async_get(self.hass)
issue = issue_registry.async_get_issue(self.handler, self.issue_id)
assert issue is not None
return issue.translation_placeholders or {}
class DeviceConflictRepair(ESPHomeRepair):
"""Handler for an issue fixing device conflict."""
@@ -58,7 +50,6 @@ class DeviceConflictRepair(ESPHomeRepair):
return self.async_show_menu(
step_id="init",
menu_options=["migrate", "manual"],
description_placeholders=self._async_get_placeholders(),
)
async def async_step_migrate(
@@ -69,7 +60,6 @@ class DeviceConflictRepair(ESPHomeRepair):
return self.async_show_form(
step_id="migrate",
data_schema=vol.Schema({}),
description_placeholders=self._async_get_placeholders(),
)
entry_id = self.entry_id
await async_replace_device(self.hass, entry_id, self.stored_mac, self.mac)
@@ -84,7 +74,6 @@ class DeviceConflictRepair(ESPHomeRepair):
return self.async_show_form(
step_id="manual",
data_schema=vol.Schema({}),
description_placeholders=self._async_get_placeholders(),
)
self.hass.config_entries.async_schedule_reload(self.entry_id)
return self.async_create_entry(data={})

View File

@@ -110,13 +110,6 @@ def _data_secure_group_key_issue_handler(
class DataSecureGroupIssueRepairFlow(RepairsFlow):
"""Handler for an issue fixing flow for outdated DataSecure keys."""
@callback
def _async_get_placeholders(self) -> dict[str, str]:
issue_registry = ir.async_get(self.hass)
issue = issue_registry.async_get_issue(self.handler, self.issue_id)
assert issue is not None
return issue.translation_placeholders or {}
async def async_step_init(
self, user_input: dict[str, str] | None = None
) -> data_entry_flow.FlowResult:
@@ -157,7 +150,6 @@ class DataSecureGroupIssueRepairFlow(RepairsFlow):
return self.async_show_form(
step_id="secure_knxkeys",
data_schema=vol.Schema(fields),
description_placeholders=self._async_get_placeholders(),
errors=errors,
)

View File

@@ -811,6 +811,7 @@ async def _check_config_flow_result_translations(
return
key_prefix = ""
description_placeholders = result.get("description_placeholders")
if isinstance(manager, ConfigEntriesFlowManager):
category = "config"
integration = flow.handler
@@ -823,6 +824,12 @@ async def _check_config_flow_result_translations(
issue_id = flow.issue_id
issue = ir.async_get(flow.hass).async_get_issue(integration, issue_id)
key_prefix = f"{issue.translation_key}.fix_flow."
description_placeholders = {
# Both are used in issue translations, and description_placeholders
# takes precedence over translation_placeholders
**(issue.translation_placeholders or {}),
**(description_placeholders or {}),
}
else:
return
@@ -838,7 +845,7 @@ async def _check_config_flow_result_translations(
category,
integration,
f"{key_prefix}step.{step_id}",
result["description_placeholders"],
description_placeholders,
result["data_schema"],
ignore_translations_for_mock_domains,
)
@@ -852,7 +859,7 @@ async def _check_config_flow_result_translations(
category,
integration,
f"{key_prefix}error.{error}",
result["description_placeholders"],
description_placeholders,
)
return
@@ -868,7 +875,7 @@ async def _check_config_flow_result_translations(
category,
integration,
f"{key_prefix}abort.{result['reason']}",
result["description_placeholders"],
description_placeholders,
)

View File

@@ -80,13 +80,6 @@ async def test_device_conflict_manual(
data = await start_repair_fix_flow(client, DOMAIN, issue_id)
flow_id = data["flow_id"]
assert data["description_placeholders"] == {
"ip": "192.168.1.2",
"mac": "11:22:33:44:55:ab",
"model": "esp32-iso-poe",
"name": "test",
"stored_mac": "11:22:33:44:55:aa",
}
assert data["type"] == FlowResultType.MENU
assert data["step_id"] == "init"
@@ -95,13 +88,6 @@ async def test_device_conflict_manual(
)
flow_id = data["flow_id"]
assert data["description_placeholders"] == {
"ip": "192.168.1.2",
"mac": "11:22:33:44:55:ab",
"model": "esp32-iso-poe",
"name": "test",
"stored_mac": "11:22:33:44:55:aa",
}
assert data["type"] == FlowResultType.FORM
assert data["step_id"] == "manual"
@@ -198,13 +184,6 @@ async def test_device_conflict_migration(
data = await start_repair_fix_flow(client, DOMAIN, issue_id)
flow_id = data["flow_id"]
assert data["description_placeholders"] == {
"ip": "test.local",
"mac": "11:22:33:44:55:ab",
"model": "esp32-iso-poe",
"name": "test",
"stored_mac": "11:22:33:44:55:aa",
}
assert data["type"] == FlowResultType.MENU
assert data["step_id"] == "init"
@@ -213,13 +192,6 @@ async def test_device_conflict_migration(
)
flow_id = data["flow_id"]
assert data["description_placeholders"] == {
"ip": "test.local",
"mac": "11:22:33:44:55:ab",
"model": "esp32-iso-poe",
"name": "test",
"stored_mac": "11:22:33:44:55:aa",
}
assert data["type"] == FlowResultType.FORM
assert data["step_id"] == "migrate"

View File

@@ -77,14 +77,13 @@ async def test_data_secure_group_key_issue_repair_flow(
knx.receive_data_secure_issue("11/0/0", source="1.0.1")
knx.receive_data_secure_issue("1/2/5", source="1.0.10")
knx.receive_data_secure_issue("1/2/5", source="1.0.1")
_placeholders = {
"addresses": "`1/2/5` from 1.0.1, 1.0.10\n`11/0/0` from 1.0.1", # check sorting
"interface": "0.0.0",
}
issue_registry = ir.async_get(hass)
issue = issue_registry.async_get_issue(DOMAIN, REPAIR_ISSUE_DATA_SECURE_GROUP_KEY)
assert issue is not None
assert issue.translation_placeholders == _placeholders
assert issue.translation_placeholders == {
"addresses": "`1/2/5` from 1.0.1, 1.0.10\n`11/0/0` from 1.0.1", # check sorting
"interface": "0.0.0",
}
issues = await get_repairs(hass, hass_ws_client)
assert issues
@@ -98,7 +97,6 @@ async def test_data_secure_group_key_issue_repair_flow(
flow_id = flow["flow_id"]
assert flow["type"] == FlowResultType.FORM
assert flow["step_id"] == "secure_knxkeys"
assert flow["description_placeholders"] == _placeholders
# test error handling
with patch_file_upload(