ha(H4): исправления по ревью — маскировка ключа в дампе, reload-repair, reconfigure сохраняет поля
- major: diagnostics больше не содержит полный lanip_key (esp_home — маска, entry_data redacted); ключ для ESPHome — через reconfigure/CLI; план §3 синхронизирован; дамп при незагруженной записи не падает - reconfigure: сохраняет listen_port/keepalive_ms и текущие overrides/ temp_step; превью-дефолты подхватывают значения записи - repair fix-flow: подтверждение перезагружает запись (issue снимается только когда сессия вышла из key_error; иначе создаётся заново) - key_issue_id helper, использование async_remove_issue (мёртвый код), CONF_EMAIL/PASSWORD в TO_REDACT, placeholders в fix_flow, тест плейсхолдеров ru - тесты обновлены (47 components)
This commit is contained in:
@@ -1,13 +1,49 @@
|
||||
"""Repair flows fglair: подтверждение issue key_mismatch."""
|
||||
"""Repair flow fglair: key_mismatch → подсказка и reload записи.
|
||||
|
||||
Issue не удаляем молча: подтверждение перезагружает ConfigEntry, и если
|
||||
ключ всё ещё неверен, coordinator создаёт issue заново (issue снимается
|
||||
только когда сессия выходит из key_error).
|
||||
"""
|
||||
from __future__ import annotations
|
||||
|
||||
from typing import Any
|
||||
|
||||
from homeassistant.components.repairs import ConfirmRepairFlow
|
||||
import voluptuous as vol
|
||||
from homeassistant.components.repairs import RepairsFlow
|
||||
from homeassistant.core import HomeAssistant
|
||||
from homeassistant.data_entry_flow import FlowResult
|
||||
|
||||
|
||||
class KeyMismatchRepairFlow(RepairsFlow):
|
||||
async def async_step_init(
|
||||
self, user_input: dict[str, Any] | None = None
|
||||
) -> FlowResult:
|
||||
return await self.async_step_confirm()
|
||||
|
||||
async def async_step_confirm(
|
||||
self, user_input: dict[str, Any] | None = None
|
||||
) -> FlowResult:
|
||||
if user_input is not None:
|
||||
entry_id = (self.data or {}).get("entry_id")
|
||||
if entry_id:
|
||||
self.hass.config_entries.async_schedule_reload(entry_id)
|
||||
return self.async_create_entry(data={})
|
||||
return self.async_show_form(
|
||||
step_id="confirm",
|
||||
data_schema=vol.Schema({}),
|
||||
description_placeholders=self._placeholders(),
|
||||
)
|
||||
|
||||
def _placeholders(self) -> dict[str, str]:
|
||||
from homeassistant.helpers import issue_registry as ir
|
||||
|
||||
issue = ir.async_get(self.hass).async_get_issue(
|
||||
self.handler, self.issue_id
|
||||
)
|
||||
return dict(issue.translation_placeholders or {}) if issue else {}
|
||||
|
||||
|
||||
async def async_create_fix_flow(
|
||||
hass: HomeAssistant, issue_id: str, data: dict[str, Any] | None
|
||||
) -> ConfirmRepairFlow:
|
||||
return ConfirmRepairFlow()
|
||||
) -> KeyMismatchRepairFlow:
|
||||
return KeyMismatchRepairFlow()
|
||||
|
||||
Reference in New Issue
Block a user