From ef5d9d7377fd5cbfc9b17875ab17ff617ceb50b0 Mon Sep 17 00:00:00 2001 From: Joost Lekkerkerker Date: Fri, 15 Dec 2023 08:56:26 +0100 Subject: [PATCH] Partly migrate Plex to has entity name (#98841) * Partly migrate Plex to has entity name * Use friendly name for device name * Lowercase --- homeassistant/components/plex/button.py | 19 +++++++++---------- homeassistant/components/plex/sensor.py | 14 ++++++-------- homeassistant/components/plex/strings.json | 7 +++++++ tests/components/plex/test_button.py | 2 +- tests/components/plex/test_init.py | 8 ++++---- tests/components/plex/test_sensor.py | 2 +- tests/components/plex/test_server.py | 12 ++++++------ 7 files changed, 34 insertions(+), 30 deletions(-) diff --git a/homeassistant/components/plex/button.py b/homeassistant/components/plex/button.py index 985b4ccb4e9..24bc09bac42 100644 --- a/homeassistant/components/plex/button.py +++ b/homeassistant/components/plex/button.py @@ -9,12 +9,9 @@ from homeassistant.helpers.device_registry import DeviceInfo from homeassistant.helpers.dispatcher import async_dispatcher_send from homeassistant.helpers.entity_platform import AddEntitiesCallback -from .const import ( - CONF_SERVER, - CONF_SERVER_IDENTIFIER, - DOMAIN, - PLEX_UPDATE_PLATFORMS_SIGNAL, -) +from . import PlexServer +from .const import CONF_SERVER_IDENTIFIER, DOMAIN, PLEX_UPDATE_PLATFORMS_SIGNAL +from .helpers import get_plex_server async def async_setup_entry( @@ -24,22 +21,24 @@ async def async_setup_entry( ) -> None: """Set up Plex button from config entry.""" server_id: str = config_entry.data[CONF_SERVER_IDENTIFIER] - server_name: str = config_entry.data[CONF_SERVER] - async_add_entities([PlexScanClientsButton(server_id, server_name)]) + plex_server = get_plex_server(hass, server_id) + async_add_entities([PlexScanClientsButton(server_id, plex_server)]) class PlexScanClientsButton(ButtonEntity): """Representation of a scan_clients button entity.""" _attr_entity_category = EntityCategory.CONFIG + _attr_has_entity_name = True + _attr_translation_key = "scan_clients" - def __init__(self, server_id: str, server_name: str) -> None: + def __init__(self, server_id: str, plex_server: PlexServer) -> None: """Initialize a scan_clients Plex button entity.""" self.server_id = server_id - self._attr_name = f"Scan Clients ({server_name})" self._attr_unique_id = f"plex-scan_clients-{self.server_id}" self._attr_device_info = DeviceInfo( identifiers={(DOMAIN, server_id)}, + name=plex_server.friendly_name, manufacturer="Plex", ) diff --git a/homeassistant/components/plex/sensor.py b/homeassistant/components/plex/sensor.py index 972cd8d4bc9..acc309ab14c 100644 --- a/homeassistant/components/plex/sensor.py +++ b/homeassistant/components/plex/sensor.py @@ -17,7 +17,6 @@ from homeassistant.helpers.entity_platform import AddEntitiesCallback from .const import ( CONF_SERVER_IDENTIFIER, DOMAIN, - NAME_FORMAT, PLEX_UPDATE_LIBRARY_SIGNAL, PLEX_UPDATE_SENSOR_SIGNAL, ) @@ -71,13 +70,15 @@ async def async_setup_entry( class PlexSensor(SensorEntity): """Representation of a Plex now playing sensor.""" + _attr_has_entity_name = True + _attr_name = None + _attr_icon = "mdi:plex" + _attr_should_poll = False + _attr_native_unit_of_measurement = "watching" + def __init__(self, hass, plex_server): """Initialize the sensor.""" - self._attr_icon = "mdi:plex" - self._attr_name = NAME_FORMAT.format(plex_server.friendly_name) - self._attr_should_poll = False self._attr_unique_id = f"sensor-{plex_server.machine_identifier}" - self._attr_native_unit_of_measurement = "Watching" self._server = plex_server self.async_refresh_sensor = Debouncer( @@ -113,9 +114,6 @@ class PlexSensor(SensorEntity): @property def device_info(self) -> DeviceInfo | None: """Return a device description for device registry.""" - if self.unique_id is None: - return None - return DeviceInfo( identifiers={(DOMAIN, self._server.machine_identifier)}, manufacturer="Plex", diff --git a/homeassistant/components/plex/strings.json b/homeassistant/components/plex/strings.json index 9cba83653fd..4f5ca3f2bc4 100644 --- a/homeassistant/components/plex/strings.json +++ b/homeassistant/components/plex/strings.json @@ -57,6 +57,13 @@ } } }, + "entity": { + "button": { + "scan_clients": { + "name": "Scan clients" + } + } + }, "services": { "refresh_library": { "name": "Refresh library", diff --git a/tests/components/plex/test_button.py b/tests/components/plex/test_button.py index e8e734143b3..a37a3ea2df2 100644 --- a/tests/components/plex/test_button.py +++ b/tests/components/plex/test_button.py @@ -30,7 +30,7 @@ async def test_scan_clients_button_schedule( BUTTON_DOMAIN, SERVICE_PRESS, { - ATTR_ENTITY_ID: "button.scan_clients_plex_server_1", + ATTR_ENTITY_ID: "button.plex_server_1_scan_clients", }, True, ) diff --git a/tests/components/plex/test_init.py b/tests/components/plex/test_init.py index 6e1043b5c52..e12759b8a1f 100644 --- a/tests/components/plex/test_init.py +++ b/tests/components/plex/test_init.py @@ -120,7 +120,7 @@ async def test_setup_with_photo_session( await wait_for_debouncer(hass) - sensor = hass.states.get("sensor.plex_plex_server_1") + sensor = hass.states.get("sensor.plex_server_1") assert sensor.state == "0" @@ -142,7 +142,7 @@ async def test_setup_with_live_tv_session( await wait_for_debouncer(hass) - sensor = hass.states.get("sensor.plex_plex_server_1") + sensor = hass.states.get("sensor.plex_server_1") assert sensor.state == "1" @@ -164,7 +164,7 @@ async def test_setup_with_transient_session( await wait_for_debouncer(hass) - sensor = hass.states.get("sensor.plex_plex_server_1") + sensor = hass.states.get("sensor.plex_server_1") assert sensor.state == "1" @@ -186,7 +186,7 @@ async def test_setup_with_unknown_session( await wait_for_debouncer(hass) - sensor = hass.states.get("sensor.plex_plex_server_1") + sensor = hass.states.get("sensor.plex_server_1") assert sensor.state == "1" diff --git a/tests/components/plex/test_sensor.py b/tests/components/plex/test_sensor.py index 5b9729792f4..93014dfedd1 100644 --- a/tests/components/plex/test_sensor.py +++ b/tests/components/plex/test_sensor.py @@ -110,7 +110,7 @@ async def test_library_sensor_values( mock_plex_server = await setup_plex_server() await wait_for_debouncer(hass) - activity_sensor = hass.states.get("sensor.plex_plex_server_1") + activity_sensor = hass.states.get("sensor.plex_server_1") assert activity_sensor.state == "1" # Ensure sensor is created as disabled diff --git a/tests/components/plex/test_server.py b/tests/components/plex/test_server.py index 1041caa298f..511025988ed 100644 --- a/tests/components/plex/test_server.py +++ b/tests/components/plex/test_server.py @@ -87,7 +87,7 @@ async def test_new_ignored_users_available( await wait_for_debouncer(hass) - sensor = hass.states.get("sensor.plex_plex_server_1") + sensor = hass.states.get("sensor.plex_server_1") assert sensor.state == str(len(active_sessions)) @@ -101,7 +101,7 @@ async def test_network_error_during_refresh( await wait_for_debouncer(hass) - sensor = hass.states.get("sensor.plex_plex_server_1") + sensor = hass.states.get("sensor.plex_server_1") assert sensor.state == str(len(active_sessions)) with patch("plexapi.server.PlexServer.clients", side_effect=RequestException): @@ -126,7 +126,7 @@ async def test_gdm_client_failure( active_sessions = mock_plex_server._plex_server.sessions() await wait_for_debouncer(hass) - sensor = hass.states.get("sensor.plex_plex_server_1") + sensor = hass.states.get("sensor.plex_server_1") assert sensor.state == str(len(active_sessions)) with patch("plexapi.server.PlexServer.clients", side_effect=RequestException): @@ -146,7 +146,7 @@ async def test_mark_sessions_idle( active_sessions = mock_plex_server._plex_server.sessions() - sensor = hass.states.get("sensor.plex_plex_server_1") + sensor = hass.states.get("sensor.plex_server_1") assert sensor.state == str(len(active_sessions)) url = mock_plex_server.url_in_use @@ -157,7 +157,7 @@ async def test_mark_sessions_idle( await hass.async_block_till_done() await wait_for_debouncer(hass) - sensor = hass.states.get("sensor.plex_plex_server_1") + sensor = hass.states.get("sensor.plex_server_1") assert sensor.state == "0" @@ -175,7 +175,7 @@ async def test_ignore_plex_web_client( await wait_for_debouncer(hass) active_sessions = mock_plex_server._plex_server.sessions() - sensor = hass.states.get("sensor.plex_plex_server_1") + sensor = hass.states.get("sensor.plex_server_1") assert sensor.state == str(len(active_sessions)) media_players = hass.states.async_entity_ids("media_player")