From 5e3740d5ed35e69f7413d79b02f920810d93fdfb Mon Sep 17 00:00:00 2001 From: Raman Gupta <7243222+raman325@users.noreply.github.com> Date: Sat, 30 Apr 2022 03:05:22 -0400 Subject: [PATCH] Add available property to kodi, with some code cleanup (#69115) * Add available property to kodi, with some code cleanup * Update homeassistant/components/kodi/media_player.py Co-authored-by: Shay Levy Co-authored-by: Shay Levy --- homeassistant/components/kodi/media_player.py | 27 +++++++++---------- 1 file changed, 12 insertions(+), 15 deletions(-) diff --git a/homeassistant/components/kodi/media_player.py b/homeassistant/components/kodi/media_player.py index 0e6d51ba3cd..66bb582e6e0 100644 --- a/homeassistant/components/kodi/media_player.py +++ b/homeassistant/components/kodi/media_player.py @@ -9,7 +9,6 @@ import re from typing import Any, TypeVar import urllib.parse -import jsonrpc_base from jsonrpc_base.jsonrpc import ProtocolError, TransportError from pykodi import CannotConnectError from typing_extensions import Concatenate, ParamSpec @@ -258,10 +257,7 @@ def cmd( """Wrap all command methods.""" try: await func(obj, *args, **kwargs) - except ( - jsonrpc_base.jsonrpc.TransportError, - jsonrpc_base.jsonrpc.ProtocolError, - ) as exc: + except (TransportError, ProtocolError) as exc: # If Kodi is off, we expect calls to fail. if obj.state == STATE_OFF: log_function = _LOGGER.debug @@ -301,7 +297,6 @@ class KodiEntity(MediaPlayerEntity): """Initialize the Kodi entity.""" self._connection = connection self._kodi = kodi - self._name = name self._unique_id = uid self._players = None self._properties = {} @@ -311,6 +306,8 @@ class KodiEntity(MediaPlayerEntity): self._media_position = None self._connect_error = False + self._attr_name = name + def _reset_state(self, players=None): self._players = players self._properties = {} @@ -440,7 +437,7 @@ class KodiEntity(MediaPlayerEntity): try: await self._connection.connect() await self._on_ws_connected() - except (jsonrpc_base.jsonrpc.TransportError, CannotConnectError): + except (TransportError, CannotConnectError): if not self._connect_error: self._connect_error = True _LOGGER.warning("Unable to connect to Kodi via websocket") @@ -451,7 +448,7 @@ class KodiEntity(MediaPlayerEntity): async def _ping(self): try: await self._kodi.ping() - except (jsonrpc_base.jsonrpc.TransportError, CannotConnectError): + except (TransportError, CannotConnectError): if not self._connect_error: self._connect_error = True _LOGGER.warning("Unable to ping Kodi via websocket") @@ -528,11 +525,6 @@ class KodiEntity(MediaPlayerEntity): else: self._reset_state([]) - @property - def name(self): - """Return the name of the device.""" - return self._name - @property def should_poll(self): """Return True if entity has to be polled for state.""" @@ -644,6 +636,11 @@ class KodiEntity(MediaPlayerEntity): return None + @property + def available(self): + """Return True if entity is available.""" + return not self._connect_error + async def async_turn_on(self): """Turn the media player on.""" _LOGGER.debug("Firing event to turn on device") @@ -765,7 +762,7 @@ class KodiEntity(MediaPlayerEntity): try: result = await self._kodi.call_method(method, **kwargs) result_ok = True - except jsonrpc_base.jsonrpc.ProtocolError as exc: + except ProtocolError as exc: result = exc.args[2]["error"] _LOGGER.error( "Run API method %s.%s(%s) error: %s", @@ -774,7 +771,7 @@ class KodiEntity(MediaPlayerEntity): kwargs, result, ) - except jsonrpc_base.jsonrpc.TransportError: + except TransportError: result = None _LOGGER.warning( "TransportError trying to run API method %s.%s(%s)",