Remove deprecated yaml import from lupusec (#123606)

This commit is contained in:
G Johansson 2024-08-11 22:38:20 +02:00 committed by GitHub
parent 4daefe0b6e
commit 4a099ab942
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
5 changed files with 4 additions and 217 deletions

View File

@ -5,24 +5,10 @@ import logging
import lupupy import lupupy
from lupupy.exceptions import LupusecException from lupupy.exceptions import LupusecException
import voluptuous as vol
from homeassistant.config_entries import SOURCE_IMPORT, ConfigEntry from homeassistant.config_entries import ConfigEntry
from homeassistant.const import ( from homeassistant.const import CONF_HOST, CONF_PASSWORD, CONF_USERNAME, Platform
CONF_HOST, from homeassistant.core import HomeAssistant
CONF_IP_ADDRESS,
CONF_NAME,
CONF_PASSWORD,
CONF_USERNAME,
Platform,
)
from homeassistant.core import DOMAIN as HOMEASSISTANT_DOMAIN, HomeAssistant
from homeassistant.data_entry_flow import FlowResultType
from homeassistant.helpers import config_validation as cv
from homeassistant.helpers.issue_registry import IssueSeverity, async_create_issue
from homeassistant.helpers.typing import ConfigType
from .const import INTEGRATION_TITLE, ISSUE_PLACEHOLDER
_LOGGER = logging.getLogger(__name__) _LOGGER = logging.getLogger(__name__)
@ -31,19 +17,6 @@ DOMAIN = "lupusec"
NOTIFICATION_ID = "lupusec_notification" NOTIFICATION_ID = "lupusec_notification"
NOTIFICATION_TITLE = "Lupusec Security Setup" NOTIFICATION_TITLE = "Lupusec Security Setup"
CONFIG_SCHEMA = vol.Schema(
{
DOMAIN: vol.Schema(
{
vol.Required(CONF_USERNAME): cv.string,
vol.Required(CONF_PASSWORD): cv.string,
vol.Required(CONF_IP_ADDRESS): cv.string,
vol.Optional(CONF_NAME): cv.string,
}
)
},
extra=vol.ALLOW_EXTRA,
)
PLATFORMS: list[Platform] = [ PLATFORMS: list[Platform] = [
Platform.ALARM_CONTROL_PANEL, Platform.ALARM_CONTROL_PANEL,
@ -52,56 +25,6 @@ PLATFORMS: list[Platform] = [
] ]
async def handle_async_init_result(hass: HomeAssistant, domain: str, conf: dict):
"""Handle the result of the async_init to issue deprecated warnings."""
flow = hass.config_entries.flow
result = await flow.async_init(domain, context={"source": SOURCE_IMPORT}, data=conf)
if (
result["type"] == FlowResultType.CREATE_ENTRY
or result["reason"] == "already_configured"
):
async_create_issue(
hass,
HOMEASSISTANT_DOMAIN,
f"deprecated_yaml_{DOMAIN}",
breaks_in_ha_version="2024.8.0",
is_fixable=False,
issue_domain=DOMAIN,
severity=IssueSeverity.WARNING,
translation_key="deprecated_yaml",
translation_placeholders={
"domain": DOMAIN,
"integration_title": INTEGRATION_TITLE,
},
)
else:
async_create_issue(
hass,
DOMAIN,
f"deprecated_yaml_import_issue_{result['reason']}",
breaks_in_ha_version="2024.8.0",
is_fixable=False,
issue_domain=DOMAIN,
severity=IssueSeverity.WARNING,
translation_key=f"deprecated_yaml_import_issue_{result['reason']}",
translation_placeholders=ISSUE_PLACEHOLDER,
)
async def async_setup(hass: HomeAssistant, config: ConfigType) -> bool:
"""Set up the lupusec integration."""
if DOMAIN not in config:
return True
conf = config[DOMAIN]
hass.async_create_task(handle_async_init_result(hass, DOMAIN, conf))
return True
async def async_setup_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool: async def async_setup_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool:
"""Set up this integration using UI.""" """Set up this integration using UI."""

View File

@ -8,13 +8,7 @@ import lupupy
import voluptuous as vol import voluptuous as vol
from homeassistant.config_entries import ConfigFlow, ConfigFlowResult from homeassistant.config_entries import ConfigFlow, ConfigFlowResult
from homeassistant.const import ( from homeassistant.const import CONF_HOST, CONF_PASSWORD, CONF_USERNAME
CONF_HOST,
CONF_IP_ADDRESS,
CONF_NAME,
CONF_PASSWORD,
CONF_USERNAME,
)
from homeassistant.core import HomeAssistant from homeassistant.core import HomeAssistant
from homeassistant.exceptions import HomeAssistantError from homeassistant.exceptions import HomeAssistantError
@ -66,37 +60,6 @@ class LupusecConfigFlowHandler(ConfigFlow, domain=DOMAIN):
step_id="user", data_schema=DATA_SCHEMA, errors=errors step_id="user", data_schema=DATA_SCHEMA, errors=errors
) )
async def async_step_import(self, user_input: dict[str, Any]) -> ConfigFlowResult:
"""Import the yaml config."""
self._async_abort_entries_match(
{
CONF_HOST: user_input[CONF_IP_ADDRESS],
CONF_USERNAME: user_input[CONF_USERNAME],
CONF_PASSWORD: user_input[CONF_PASSWORD],
}
)
host = user_input[CONF_IP_ADDRESS]
username = user_input[CONF_USERNAME]
password = user_input[CONF_PASSWORD]
try:
await test_host_connection(self.hass, host, username, password)
except CannotConnect:
return self.async_abort(reason="cannot_connect")
except JSONDecodeError:
return self.async_abort(reason="cannot_connect")
except Exception:
_LOGGER.exception("Unexpected exception")
return self.async_abort(reason="unknown")
return self.async_create_entry(
title=user_input.get(CONF_NAME, host),
data={
CONF_HOST: host,
CONF_USERNAME: username,
CONF_PASSWORD: password,
},
)
async def test_host_connection( async def test_host_connection(
hass: HomeAssistant, host: str, username: str, password: str hass: HomeAssistant, host: str, username: str, password: str

View File

@ -18,10 +18,6 @@ from lupupy.constants import (
DOMAIN = "lupusec" DOMAIN = "lupusec"
INTEGRATION_TITLE = "Lupus Electronics LUPUSEC"
ISSUE_PLACEHOLDER = {"url": "/config/integrations/dashboard/add?domain=lupusec"}
TYPE_TRANSLATION = { TYPE_TRANSLATION = {
TYPE_WINDOW: "Fensterkontakt", TYPE_WINDOW: "Fensterkontakt",
TYPE_DOOR: "Türkontakt", TYPE_DOOR: "Türkontakt",

View File

@ -17,15 +17,5 @@
"abort": { "abort": {
"already_configured": "[%key:common::config_flow::abort::already_configured_device%]" "already_configured": "[%key:common::config_flow::abort::already_configured_device%]"
} }
},
"issues": {
"deprecated_yaml_import_issue_cannot_connect": {
"title": "The Lupus Electronics LUPUSEC YAML configuration import failed",
"description": "Configuring Lupus Electronics LUPUSEC using YAML is being removed but there was a connection error importing your YAML configuration.\n\nEnsure connection to Lupus Electronics LUPUSEC works and restart Home Assistant to try again or remove the Lupus Electronics LUPUSEC YAML configuration from your configuration.yaml file and continue to [set up the integration]({url}) manually."
},
"deprecated_yaml_import_issue_unknown": {
"title": "The Lupus Electronics LUPUSEC YAML configuration import failed",
"description": "Configuring Lupus Electronics LUPUSEC using YAML is being removed but there was an unknown error when trying to import the YAML configuration.\n\nEnsure the imported configuration is correct and remove the Lupus Electronics LUPUSEC YAML configuration from your configuration.yaml file and continue to [set up the integration]({url}) manually."
}
} }
} }

View File

@ -153,88 +153,3 @@ async def test_flow_user_init_data_already_configured(hass: HomeAssistant) -> No
assert result2["type"] is FlowResultType.ABORT assert result2["type"] is FlowResultType.ABORT
assert result2["reason"] == "already_configured" assert result2["reason"] == "already_configured"
@pytest.mark.parametrize(
("mock_import_step", "mock_title"),
[
(MOCK_IMPORT_STEP, MOCK_IMPORT_STEP[CONF_IP_ADDRESS]),
(MOCK_IMPORT_STEP_NAME, MOCK_IMPORT_STEP_NAME[CONF_NAME]),
],
)
async def test_flow_source_import(
hass: HomeAssistant, mock_import_step, mock_title
) -> None:
"""Test configuration import from YAML."""
with (
patch(
"homeassistant.components.lupusec.async_setup_entry",
return_value=True,
) as mock_setup_entry,
patch(
"homeassistant.components.lupusec.config_flow.lupupy.Lupusec",
) as mock_initialize_lupusec,
):
result = await hass.config_entries.flow.async_init(
DOMAIN,
context={"source": config_entries.SOURCE_IMPORT},
data=mock_import_step,
)
await hass.async_block_till_done()
assert result["type"] is FlowResultType.CREATE_ENTRY
assert result["title"] == mock_title
assert result["data"] == MOCK_DATA_STEP
assert len(mock_setup_entry.mock_calls) == 1
assert len(mock_initialize_lupusec.mock_calls) == 1
@pytest.mark.parametrize(
("raise_error", "text_error"),
[
(LupusecException("Test lupusec exception"), "cannot_connect"),
(JSONDecodeError("Test JSONDecodeError", "test", 1), "cannot_connect"),
(Exception("Test unknown exception"), "unknown"),
],
)
async def test_flow_source_import_error_and_recover(
hass: HomeAssistant, raise_error, text_error
) -> None:
"""Test exceptions and recovery."""
with patch(
"homeassistant.components.lupusec.config_flow.lupupy.Lupusec",
side_effect=raise_error,
) as mock_initialize_lupusec:
result = await hass.config_entries.flow.async_init(
DOMAIN,
context={"source": config_entries.SOURCE_IMPORT},
data=MOCK_IMPORT_STEP,
)
await hass.async_block_till_done()
assert result["type"] is FlowResultType.ABORT
assert result["reason"] == text_error
assert len(mock_initialize_lupusec.mock_calls) == 1
async def test_flow_source_import_already_configured(hass: HomeAssistant) -> None:
"""Test duplicate config entry.."""
entry = MockConfigEntry(
domain=DOMAIN,
title=MOCK_DATA_STEP[CONF_HOST],
data=MOCK_DATA_STEP,
)
entry.add_to_hass(hass)
result = await hass.config_entries.flow.async_init(
DOMAIN,
context={"source": config_entries.SOURCE_IMPORT},
data=MOCK_IMPORT_STEP,
)
assert result["type"] is FlowResultType.ABORT
assert result["reason"] == "already_configured"