Migrate kodi to use runtime_data (#147191)

This commit is contained in:
epenet 2025-06-20 10:38:01 +02:00 committed by GitHub
parent 88683a318d
commit 2859e7de9b
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
4 changed files with 24 additions and 24 deletions

View File

@ -1,8 +1,10 @@
"""The kodi component."""
from dataclasses import dataclass
import logging
from pykodi import CannotConnectError, InvalidAuthError, Kodi, get_kodi_connection
from pykodi.kodi import KodiHTTPConnection, KodiWSConnection
from homeassistant.config_entries import ConfigEntry
from homeassistant.const import (
@ -17,13 +19,23 @@ from homeassistant.const import (
from homeassistant.core import HomeAssistant
from homeassistant.helpers.aiohttp_client import async_get_clientsession
from .const import CONF_WS_PORT, DATA_CONNECTION, DATA_KODI, DOMAIN
from .const import CONF_WS_PORT
_LOGGER = logging.getLogger(__name__)
PLATFORMS = [Platform.MEDIA_PLAYER]
type KodiConfigEntry = ConfigEntry[KodiRuntimeData]
async def async_setup_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool:
@dataclass
class KodiRuntimeData:
"""Data class to hold Kodi runtime data."""
connection: KodiHTTPConnection | KodiWSConnection
kodi: Kodi
async def async_setup_entry(hass: HomeAssistant, entry: KodiConfigEntry) -> bool:
"""Set up Kodi from a config entry."""
conn = get_kodi_connection(
entry.data[CONF_HOST],
@ -54,22 +66,16 @@ async def async_setup_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool:
entry.async_on_unload(hass.bus.async_listen_once(EVENT_HOMEASSISTANT_STOP, _close))
hass.data.setdefault(DOMAIN, {})
hass.data[DOMAIN][entry.entry_id] = {
DATA_CONNECTION: conn,
DATA_KODI: kodi,
}
entry.runtime_data = KodiRuntimeData(connection=conn, kodi=kodi)
await hass.config_entries.async_forward_entry_setups(entry, PLATFORMS)
return True
async def async_unload_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool:
async def async_unload_entry(hass: HomeAssistant, entry: KodiConfigEntry) -> bool:
"""Unload a config entry."""
unload_ok = await hass.config_entries.async_unload_platforms(entry, PLATFORMS)
if unload_ok:
data = hass.data[DOMAIN].pop(entry.entry_id)
await data[DATA_CONNECTION].close()
if unload_ok := await hass.config_entries.async_unload_platforms(entry, PLATFORMS):
await entry.runtime_data.connection.close()
return unload_ok

View File

@ -4,9 +4,6 @@ DOMAIN = "kodi"
CONF_WS_PORT = "ws_port"
DATA_CONNECTION = "connection"
DATA_KODI = "kodi"
DEFAULT_PORT = 8080
DEFAULT_SSL = False
DEFAULT_TIMEOUT = 5

View File

@ -24,7 +24,7 @@ from homeassistant.components.media_player import (
MediaType,
async_process_play_media_url,
)
from homeassistant.config_entries import SOURCE_IMPORT, ConfigEntry
from homeassistant.config_entries import SOURCE_IMPORT
from homeassistant.const import (
ATTR_ENTITY_ID,
CONF_DEVICE_ID,
@ -55,6 +55,7 @@ from homeassistant.helpers.network import is_internal_request
from homeassistant.helpers.typing import ConfigType, DiscoveryInfoType, VolDictType
from homeassistant.util import dt as dt_util
from . import KodiConfigEntry
from .browse_media import (
build_item_response,
get_media_info,
@ -63,8 +64,6 @@ from .browse_media import (
)
from .const import (
CONF_WS_PORT,
DATA_CONNECTION,
DATA_KODI,
DEFAULT_PORT,
DEFAULT_SSL,
DEFAULT_TIMEOUT,
@ -208,7 +207,7 @@ async def async_setup_platform(
async def async_setup_entry(
hass: HomeAssistant,
config_entry: ConfigEntry,
config_entry: KodiConfigEntry,
async_add_entities: AddConfigEntryEntitiesCallback,
) -> None:
"""Set up the Kodi media player platform."""
@ -220,14 +219,12 @@ async def async_setup_entry(
SERVICE_CALL_METHOD, KODI_CALL_METHOD_SCHEMA, "async_call_method"
)
data = hass.data[DOMAIN][config_entry.entry_id]
connection = data[DATA_CONNECTION]
kodi = data[DATA_KODI]
data = config_entry.runtime_data
name = config_entry.data[CONF_NAME]
if (uid := config_entry.unique_id) is None:
uid = config_entry.entry_id
entity = KodiEntity(connection, kodi, name, uid)
entity = KodiEntity(data.connection, data.kodi, name, uid)
async_add_entities([entity])

View File

@ -4,7 +4,7 @@ import pytest
from homeassistant.components import automation
from homeassistant.components.device_automation import DeviceAutomationType
from homeassistant.components.kodi import DOMAIN
from homeassistant.components.kodi.const import DOMAIN
from homeassistant.components.media_player import DOMAIN as MP_DOMAIN
from homeassistant.core import HomeAssistant, ServiceCall
from homeassistant.helpers import device_registry as dr, entity_registry as er