Add Process binary sensor in System Monitor (#108585)
* Process binary sensor in System Monitor * Add repair flow * add issue * add platform * fix repair * Tests * Fix tests * add minor version * migrate * Mod repairs * Fix tests * config flow test * Last fixes * Review comments * Remove entities during repair * Remove snapshot
This commit is contained in:
parent
668d036f71
commit
1706156faf
14 changed files with 873 additions and 45 deletions
72
homeassistant/components/systemmonitor/repairs.py
Normal file
72
homeassistant/components/systemmonitor/repairs.py
Normal file
|
@ -0,0 +1,72 @@
|
|||
"""Repairs platform for the System Monitor integration."""
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
from typing import Any, cast
|
||||
|
||||
from homeassistant import data_entry_flow
|
||||
from homeassistant.components.repairs import ConfirmRepairFlow, RepairsFlow
|
||||
from homeassistant.components.sensor import DOMAIN as SENSOR_DOMAIN
|
||||
from homeassistant.config_entries import ConfigEntry
|
||||
from homeassistant.core import HomeAssistant
|
||||
from homeassistant.helpers import entity_registry as er
|
||||
|
||||
|
||||
class ProcessFixFlow(RepairsFlow):
|
||||
"""Handler for an issue fixing flow."""
|
||||
|
||||
def __init__(self, entry: ConfigEntry, processes: list[str]) -> None:
|
||||
"""Create flow."""
|
||||
super().__init__()
|
||||
self.entry = entry
|
||||
self._processes = processes
|
||||
|
||||
async def async_step_init(
|
||||
self, user_input: dict[str, str] | None = None
|
||||
) -> data_entry_flow.FlowResult:
|
||||
"""Handle the first step of a fix flow."""
|
||||
return await self.async_step_migrate_process_sensor()
|
||||
|
||||
async def async_step_migrate_process_sensor(
|
||||
self, user_input: dict[str, Any] | None = None
|
||||
) -> data_entry_flow.FlowResult:
|
||||
"""Handle the options step of a fix flow."""
|
||||
if user_input is None:
|
||||
return self.async_show_form(
|
||||
step_id="migrate_process_sensor",
|
||||
description_placeholders={"processes": ", ".join(self._processes)},
|
||||
)
|
||||
|
||||
# Migration has copied the sensors to binary sensors
|
||||
# Pop the sensors to repair and remove entities
|
||||
new_options: dict[str, Any] = self.entry.options.copy()
|
||||
new_options.pop(SENSOR_DOMAIN)
|
||||
|
||||
entity_reg = er.async_get(self.hass)
|
||||
entries = er.async_entries_for_config_entry(entity_reg, self.entry.entry_id)
|
||||
for entry in entries:
|
||||
if entry.entity_id.startswith("sensor.") and entry.unique_id.startswith(
|
||||
"process_"
|
||||
):
|
||||
entity_reg.async_remove(entry.entity_id)
|
||||
|
||||
self.hass.config_entries.async_update_entry(self.entry, options=new_options)
|
||||
await self.hass.config_entries.async_reload(self.entry.entry_id)
|
||||
return self.async_create_entry(data={})
|
||||
|
||||
|
||||
async def async_create_fix_flow(
|
||||
hass: HomeAssistant,
|
||||
issue_id: str,
|
||||
data: dict[str, Any] | None,
|
||||
) -> RepairsFlow:
|
||||
"""Create flow."""
|
||||
entry = None
|
||||
if data and (entry_id := data.get("entry_id")):
|
||||
entry_id = cast(str, entry_id)
|
||||
processes: list[str] = data["processes"]
|
||||
entry = hass.config_entries.async_get_entry(entry_id)
|
||||
assert entry
|
||||
return ProcessFixFlow(entry, processes)
|
||||
|
||||
return ConfirmRepairFlow()
|
Loading…
Add table
Add a link
Reference in a new issue