Remove deprecated YAML import from MPD (#134459)

This commit is contained in:
Noah Husby 2025-01-02 10:08:33 -05:00 committed by GitHub
parent a329828bdf
commit 104151d322
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
4 changed files with 5 additions and 181 deletions

View File

@ -10,7 +10,7 @@ from mpd.asyncio import MPDClient
import voluptuous as vol
from homeassistant.config_entries import ConfigFlow, ConfigFlowResult
from homeassistant.const import CONF_HOST, CONF_NAME, CONF_PASSWORD, CONF_PORT
from homeassistant.const import CONF_HOST, CONF_PASSWORD, CONF_PORT
from .const import DOMAIN, LOGGER
@ -66,36 +66,3 @@ class MPDConfigFlow(ConfigFlow, domain=DOMAIN):
data_schema=SCHEMA,
errors=errors,
)
async def async_step_import(self, import_data: dict[str, Any]) -> ConfigFlowResult:
"""Attempt to import the existing configuration."""
self._async_abort_entries_match({CONF_HOST: import_data[CONF_HOST]})
client = MPDClient()
client.timeout = 30
client.idletimeout = 10
try:
async with timeout(35):
await client.connect(import_data[CONF_HOST], import_data[CONF_PORT])
if CONF_PASSWORD in import_data:
await client.password(import_data[CONF_PASSWORD])
with suppress(mpd.ConnectionError):
client.disconnect()
except (
TimeoutError,
gaierror,
mpd.ConnectionError,
OSError,
):
return self.async_abort(reason="cannot_connect")
except Exception: # noqa: BLE001
LOGGER.exception("Unknown exception")
return self.async_abort(reason="unknown")
return self.async_create_entry(
title=import_data.get(CONF_NAME, "Music Player Daemon"),
data={
CONF_HOST: import_data[CONF_HOST],
CONF_PORT: import_data[CONF_PORT],
CONF_PASSWORD: import_data.get(CONF_PASSWORD),
},
)

View File

@ -26,15 +26,12 @@ from homeassistant.components.media_player import (
RepeatMode,
async_process_play_media_url,
)
from homeassistant.config_entries import SOURCE_IMPORT, ConfigEntry
from homeassistant.config_entries import ConfigEntry
from homeassistant.const import CONF_HOST, CONF_NAME, CONF_PASSWORD, CONF_PORT
from homeassistant.core import DOMAIN as HOMEASSISTANT_DOMAIN, HomeAssistant
from homeassistant.data_entry_flow import FlowResultType
from homeassistant.core import HomeAssistant
import homeassistant.helpers.config_validation as cv
from homeassistant.helpers.device_registry import DeviceEntryType, DeviceInfo
from homeassistant.helpers.entity_platform import AddEntitiesCallback
from homeassistant.helpers.issue_registry import IssueSeverity, async_create_issue
from homeassistant.helpers.typing import ConfigType, DiscoveryInfoType
from homeassistant.util import Throttle
import homeassistant.util.dt as dt_util
@ -71,54 +68,6 @@ PLATFORM_SCHEMA = MEDIA_PLAYER_PLATFORM_SCHEMA.extend(
)
async def async_setup_platform(
hass: HomeAssistant,
config: ConfigType,
async_add_entities: AddEntitiesCallback,
discovery_info: DiscoveryInfoType | None = None,
) -> None:
"""Set up the MPD platform."""
result = await hass.config_entries.flow.async_init(
DOMAIN,
context={"source": SOURCE_IMPORT},
data=config,
)
if (
result["type"] is FlowResultType.CREATE_ENTRY
or result["reason"] == "already_configured"
):
async_create_issue(
hass,
HOMEASSISTANT_DOMAIN,
f"deprecated_yaml_{DOMAIN}",
breaks_in_ha_version="2025.1.0",
is_fixable=False,
issue_domain=DOMAIN,
severity=IssueSeverity.WARNING,
translation_key="deprecated_yaml",
translation_placeholders={
"domain": DOMAIN,
"integration_title": "Music Player Daemon",
},
)
return
async_create_issue(
hass,
DOMAIN,
f"deprecated_yaml_import_issue_{result['reason']}",
breaks_in_ha_version="2025.1.0",
is_fixable=False,
issue_domain=DOMAIN,
severity=IssueSeverity.WARNING,
translation_key=f"deprecated_yaml_import_issue_{result['reason']}",
translation_placeholders={
"domain": DOMAIN,
"integration_title": "Music Player Daemon",
},
)
async def async_setup_entry(
hass: HomeAssistant, entry: ConfigEntry, async_add_entities: AddEntitiesCallback
) -> None:

View File

@ -19,15 +19,5 @@
"abort": {
"already_configured": "[%key:common::config_flow::abort::already_configured_device%]"
}
},
"issues": {
"deprecated_yaml_import_issue_cannot_connect": {
"title": "The {integration_title} YAML configuration import cannot connect to daemon",
"description": "Configuring {integration_title} using YAML is being removed but there was a connection error importing your YAML configuration.\n\nPlease make sure {integration_title} is turned on, and restart Home Assistant to try importing again. Otherwise, please remove the YAML from your configuration and add the integration manually."
},
"deprecated_yaml_import_issue_unknown": {
"title": "The {integration_title} YAML configuration could not be imported",
"description": "Configuring {integration_title} using YAML is being removed but there was an unknown error importing your YAML configuration.\n\nPlease make sure {integration_title} is turned on, and restart Home Assistant to try importing again. Otherwise, please remove the YAML from your configuration and add the integration manually."
}
}
}

View File

@ -7,8 +7,8 @@ import mpd
import pytest
from homeassistant.components.mpd.const import DOMAIN
from homeassistant.config_entries import SOURCE_IMPORT, SOURCE_USER
from homeassistant.const import CONF_HOST, CONF_NAME, CONF_PASSWORD, CONF_PORT
from homeassistant.config_entries import SOURCE_USER
from homeassistant.const import CONF_HOST, CONF_PASSWORD, CONF_PORT
from homeassistant.core import HomeAssistant
from homeassistant.data_entry_flow import FlowResultType
@ -107,85 +107,3 @@ async def test_existing_entry(
assert result["type"] is FlowResultType.ABORT
assert result["reason"] == "already_configured"
async def test_full_import_flow(
hass: HomeAssistant,
mock_setup_entry: AsyncMock,
mock_mpd_client: AsyncMock,
) -> None:
"""Test the happy flow."""
result = await hass.config_entries.flow.async_init(
DOMAIN,
context={"source": SOURCE_IMPORT},
data={
CONF_HOST: "192.168.0.1",
CONF_PORT: 6600,
CONF_PASSWORD: "test123",
CONF_NAME: "My PC",
},
)
assert result["type"] is FlowResultType.CREATE_ENTRY
assert result["title"] == "My PC"
assert result["data"] == {
CONF_HOST: "192.168.0.1",
CONF_PORT: 6600,
CONF_PASSWORD: "test123",
}
assert len(mock_setup_entry.mock_calls) == 1
@pytest.mark.parametrize(
("exception", "error"),
[
(TimeoutError, "cannot_connect"),
(gaierror, "cannot_connect"),
(mpd.ConnectionError, "cannot_connect"),
(OSError, "cannot_connect"),
(Exception, "unknown"),
],
)
async def test_import_errors(
hass: HomeAssistant,
mock_setup_entry: AsyncMock,
mock_mpd_client: AsyncMock,
exception: Exception,
error: str,
) -> None:
"""Test we handle errors correctly."""
mock_mpd_client.password.side_effect = exception
result = await hass.config_entries.flow.async_init(
DOMAIN,
context={"source": SOURCE_IMPORT},
data={
CONF_HOST: "192.168.0.1",
CONF_PORT: 6600,
CONF_PASSWORD: "test123",
CONF_NAME: "My PC",
},
)
assert result["type"] is FlowResultType.ABORT
assert result["reason"] == error
async def test_existing_entry_import(
hass: HomeAssistant, mock_config_entry: MockConfigEntry
) -> None:
"""Test we abort if an entry already exists."""
mock_config_entry.add_to_hass(hass)
result = await hass.config_entries.flow.async_init(
DOMAIN,
context={"source": SOURCE_IMPORT},
data={
CONF_HOST: "192.168.0.1",
CONF_PORT: 6600,
CONF_PASSWORD: "test123",
CONF_NAME: "My PC",
},
)
assert result["type"] is FlowResultType.ABORT
assert result["reason"] == "already_configured"