Improve media_player type hints in integrations (#90029)
Fix some media_player type hintspull/87568/head
parent
04872f72ea
commit
4836404288
|
@ -8,6 +8,7 @@ from homeassistant.components.media_player import (
|
|||
BrowseMedia,
|
||||
MediaPlayerEntity,
|
||||
MediaPlayerState,
|
||||
MediaType,
|
||||
async_process_play_media_url,
|
||||
)
|
||||
from homeassistant.config_entries import ConfigEntry
|
||||
|
@ -42,7 +43,7 @@ class FullyMediaPlayer(FullyKioskEntity, MediaPlayerEntity):
|
|||
self._attr_state = MediaPlayerState.IDLE
|
||||
|
||||
async def async_play_media(
|
||||
self, media_type: str, media_id: str, **kwargs: Any
|
||||
self, media_type: MediaType | str, media_id: str, **kwargs: Any
|
||||
) -> None:
|
||||
"""Play a piece of media."""
|
||||
if media_source.is_media_source_id(media_id):
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
"""Platform allowing several media players to be grouped into one media player."""
|
||||
from __future__ import annotations
|
||||
|
||||
from collections.abc import Mapping
|
||||
from contextlib import suppress
|
||||
from typing import Any
|
||||
|
||||
|
@ -20,6 +21,7 @@ from homeassistant.components.media_player import (
|
|||
MediaPlayerEntity,
|
||||
MediaPlayerEntityFeature,
|
||||
MediaPlayerState,
|
||||
MediaType,
|
||||
)
|
||||
from homeassistant.config_entries import ConfigEntry
|
||||
from homeassistant.const import (
|
||||
|
@ -207,7 +209,7 @@ class MediaPlayerGroup(MediaPlayerEntity):
|
|||
return self._name
|
||||
|
||||
@property
|
||||
def extra_state_attributes(self) -> dict:
|
||||
def extra_state_attributes(self) -> Mapping[str, Any]:
|
||||
"""Return the state attributes for the media group."""
|
||||
return {ATTR_ENTITY_ID: self._entities}
|
||||
|
||||
|
@ -298,7 +300,7 @@ class MediaPlayerGroup(MediaPlayerEntity):
|
|||
)
|
||||
|
||||
async def async_play_media(
|
||||
self, media_type: str, media_id: str, **kwargs: Any
|
||||
self, media_type: MediaType | str, media_id: str, **kwargs: Any
|
||||
) -> None:
|
||||
"""Play a piece of media."""
|
||||
data = {
|
||||
|
|
|
@ -100,7 +100,7 @@ class GstreamerDevice(MediaPlayerEntity):
|
|||
self._player.volume = volume
|
||||
|
||||
async def async_play_media(
|
||||
self, media_type: str, media_id: str, **kwargs: Any
|
||||
self, media_type: MediaType | str, media_id: str, **kwargs: Any
|
||||
) -> None:
|
||||
"""Play media."""
|
||||
# Handle media_source
|
||||
|
|
|
@ -30,6 +30,7 @@ from homeassistant.components.media_player import (
|
|||
MediaPlayerEntity,
|
||||
MediaPlayerEntityFeature,
|
||||
MediaPlayerState,
|
||||
MediaType,
|
||||
)
|
||||
from homeassistant.core import HomeAssistant
|
||||
from homeassistant.helpers.entity_platform import AddEntitiesCallback
|
||||
|
@ -105,7 +106,9 @@ class CecPlayerEntity(CecEntity, MediaPlayerEntity):
|
|||
self.send_keypress(KEY_STOP)
|
||||
self._attr_state = MediaPlayerState.IDLE
|
||||
|
||||
def play_media(self, media_type: str, media_id: str, **kwargs: Any) -> None:
|
||||
def play_media(
|
||||
self, media_type: MediaType | str, media_id: str, **kwargs: Any
|
||||
) -> None:
|
||||
"""Not supported."""
|
||||
raise NotImplementedError()
|
||||
|
||||
|
|
|
@ -195,7 +195,7 @@ class HeosMediaPlayer(MediaPlayerEntity):
|
|||
|
||||
@log_command_error("play media")
|
||||
async def async_play_media(
|
||||
self, media_type: str, media_id: str, **kwargs: Any
|
||||
self, media_type: MediaType | str, media_id: str, **kwargs: Any
|
||||
) -> None:
|
||||
"""Play a piece of media."""
|
||||
if media_source.is_media_source_id(media_id):
|
||||
|
|
|
@ -142,7 +142,9 @@ class HorizonDevice(MediaPlayerEntity):
|
|||
else:
|
||||
self._attr_state = MediaPlayerState.PAUSED
|
||||
|
||||
def play_media(self, media_type: str, media_id: str, **kwargs: Any) -> None:
|
||||
def play_media(
|
||||
self, media_type: MediaType | str, media_id: str, **kwargs: Any
|
||||
) -> None:
|
||||
"""Play media / switch to channel."""
|
||||
if media_type == MediaType.CHANNEL:
|
||||
try:
|
||||
|
|
|
@ -380,7 +380,9 @@ class ItunesDevice(MediaPlayerEntity):
|
|||
response = self.client.previous()
|
||||
self.update_state(response)
|
||||
|
||||
def play_media(self, media_type: str, media_id: str, **kwargs: Any) -> None:
|
||||
def play_media(
|
||||
self, media_type: MediaType | str, media_id: str, **kwargs: Any
|
||||
) -> None:
|
||||
"""Send the play_media command to the media player."""
|
||||
if media_type == MediaType.PLAYLIST:
|
||||
response = self.client.play_playlist(media_id)
|
||||
|
|
|
@ -262,7 +262,7 @@ class JellyfinMediaPlayer(JellyfinEntity, MediaPlayerEntity):
|
|||
self._attr_state = MediaPlayerState.IDLE
|
||||
|
||||
def play_media(
|
||||
self, media_type: str, media_id: str, **kwargs: dict[str, Any]
|
||||
self, media_type: MediaType | str, media_id: str, **kwargs: Any
|
||||
) -> None:
|
||||
"""Play a piece of media."""
|
||||
self.coordinator.api_client.jellyfin.remote_play_media(
|
||||
|
|
|
@ -260,7 +260,9 @@ class LgTVDevice(MediaPlayerEntity):
|
|||
"""Send the previous track command."""
|
||||
self.send_command(LG_COMMAND.REWIND)
|
||||
|
||||
def play_media(self, media_type: str, media_id: str, **kwargs: Any) -> None:
|
||||
def play_media(
|
||||
self, media_type: MediaType | str, media_id: str, **kwargs: Any
|
||||
) -> None:
|
||||
"""Tune to channel."""
|
||||
if media_type != MediaType.CHANNEL:
|
||||
raise ValueError(f"Invalid media type: {media_type}")
|
||||
|
|
|
@ -435,7 +435,7 @@ class MpdDevice(MediaPlayerEntity):
|
|||
self._muted = mute
|
||||
|
||||
async def async_play_media(
|
||||
self, media_type: str, media_id: str, **kwargs: Any
|
||||
self, media_type: MediaType | str, media_id: str, **kwargs: Any
|
||||
) -> None:
|
||||
"""Send the media player the command for playing a playlist."""
|
||||
if media_source.is_media_source_id(media_id):
|
||||
|
|
|
@ -14,6 +14,7 @@ from homeassistant.components.media_player import (
|
|||
MediaPlayerEntity,
|
||||
MediaPlayerEntityFeature,
|
||||
MediaPlayerState,
|
||||
MediaType,
|
||||
)
|
||||
from homeassistant.const import ATTR_ENTITY_ID, CONF_HOST, CONF_NAME
|
||||
from homeassistant.core import HomeAssistant, ServiceCall
|
||||
|
@ -394,7 +395,9 @@ class OnkyoDevice(MediaPlayerEntity):
|
|||
source = self._reverse_mapping[source]
|
||||
self.command(f"input-selector {source}")
|
||||
|
||||
def play_media(self, media_type: str, media_id: str, **kwargs: Any) -> None:
|
||||
def play_media(
|
||||
self, media_type: MediaType | str, media_id: str, **kwargs: Any
|
||||
) -> None:
|
||||
"""Play radio station by preset number."""
|
||||
source = self._reverse_mapping[self._attr_source]
|
||||
if media_type.lower() == "radio" and source in DEFAULT_PLAYABLE_SOURCES:
|
||||
|
|
|
@ -211,7 +211,7 @@ class OpenhomeDevice(MediaPlayerEntity):
|
|||
|
||||
@catch_request_errors()
|
||||
async def async_play_media(
|
||||
self, media_type: str, media_id: str, **kwargs: Any
|
||||
self, media_type: MediaType | str, media_id: str, **kwargs: Any
|
||||
) -> None:
|
||||
"""Send the play_media command to the media player."""
|
||||
if media_source.is_media_source_id(media_id):
|
||||
|
|
|
@ -185,7 +185,7 @@ class PanasonicVieraTVEntity(MediaPlayerEntity):
|
|||
await self._remote.async_send_key(Keys.rewind)
|
||||
|
||||
async def async_play_media(
|
||||
self, media_type: str, media_id: str, **kwargs: Any
|
||||
self, media_type: MediaType | str, media_id: str, **kwargs: Any
|
||||
) -> None:
|
||||
"""Play media."""
|
||||
if media_source.is_media_source_id(media_id):
|
||||
|
|
|
@ -479,7 +479,9 @@ class PlexMediaPlayer(MediaPlayerEntity):
|
|||
if self.device and "playback" in self._device_protocol_capabilities:
|
||||
self.device.skipPrevious(self._active_media_plexapi_type)
|
||||
|
||||
def play_media(self, media_type: str, media_id: str, **kwargs: Any) -> None:
|
||||
def play_media(
|
||||
self, media_type: MediaType | str, media_id: str, **kwargs: Any
|
||||
) -> None:
|
||||
"""Play a piece of media."""
|
||||
if not (self.device and "playback" in self._device_protocol_capabilities):
|
||||
raise HomeAssistantError(
|
||||
|
|
|
@ -252,7 +252,7 @@ class RokuMediaPlayer(RokuEntity, MediaPlayerEntity):
|
|||
return None
|
||||
|
||||
@property
|
||||
def source_list(self) -> list:
|
||||
def source_list(self) -> list[str]:
|
||||
"""List of available input sources."""
|
||||
return ["Home"] + sorted(
|
||||
app.name for app in self.coordinator.data.apps if app.name is not None
|
||||
|
@ -353,7 +353,7 @@ class RokuMediaPlayer(RokuEntity, MediaPlayerEntity):
|
|||
|
||||
@roku_exception_handler()
|
||||
async def async_play_media(
|
||||
self, media_type: str, media_id: str, **kwargs: Any
|
||||
self, media_type: MediaType | str, media_id: str, **kwargs: Any
|
||||
) -> None:
|
||||
"""Play media from a URL or file, launch an application, or tune to a channel."""
|
||||
extra: dict[str, Any] = kwargs.get(ATTR_MEDIA_EXTRA) or {}
|
||||
|
|
|
@ -12,6 +12,7 @@ from homeassistant.components.media_player import (
|
|||
MediaPlayerEntity,
|
||||
MediaPlayerEntityFeature,
|
||||
MediaPlayerState,
|
||||
MediaType,
|
||||
RepeatMode,
|
||||
)
|
||||
from homeassistant.config_entries import ConfigEntry
|
||||
|
@ -394,7 +395,9 @@ class RoonDevice(MediaPlayerEntity):
|
|||
raise ValueError(f"Unsupported repeat mode: {repeat}")
|
||||
self._server.roonapi.repeat(self.output_id, REPEAT_MODE_MAPPING_TO_ROON[repeat])
|
||||
|
||||
def play_media(self, media_type: str, media_id: str, **kwargs: Any) -> None:
|
||||
def play_media(
|
||||
self, media_type: MediaType | str, media_id: str, **kwargs: Any
|
||||
) -> None:
|
||||
"""Send the play_media command to the media player."""
|
||||
|
||||
_LOGGER.debug("Playback request for %s / %s", media_type, media_id)
|
||||
|
|
|
@ -444,7 +444,7 @@ class SamsungTVDevice(MediaPlayerEntity):
|
|||
await self._async_send_keys(["KEY_CHDOWN"])
|
||||
|
||||
async def async_play_media(
|
||||
self, media_type: str, media_id: str, **kwargs: Any
|
||||
self, media_type: MediaType | str, media_id: str, **kwargs: Any
|
||||
) -> None:
|
||||
"""Support changing a channel."""
|
||||
if media_type == MediaType.APP:
|
||||
|
|
|
@ -15,6 +15,7 @@ from homeassistant.components.media_player import (
|
|||
MediaPlayerEntity,
|
||||
MediaPlayerEntityFeature,
|
||||
MediaPlayerState,
|
||||
MediaType,
|
||||
async_process_play_media_url,
|
||||
)
|
||||
from homeassistant.config_entries import ConfigEntry
|
||||
|
@ -175,7 +176,7 @@ class SlimProtoPlayer(MediaPlayerEntity):
|
|||
await self.player.power(False)
|
||||
|
||||
async def async_play_media(
|
||||
self, media_type: str, media_id: str, **kwargs: Any
|
||||
self, media_type: MediaType | str, media_id: str, **kwargs: Any
|
||||
) -> None:
|
||||
"""Send the play_media command to the media player."""
|
||||
to_send_media_type: str | None = media_type
|
||||
|
|
|
@ -303,7 +303,7 @@ class SonosMediaPlayerEntity(SonosEntity, MediaPlayerEntity):
|
|||
return PLAY_MODES[self.media.play_mode][0]
|
||||
|
||||
@property
|
||||
def repeat(self) -> str | None:
|
||||
def repeat(self) -> RepeatMode | None:
|
||||
"""Return current repeat mode."""
|
||||
sonos_repeat = PLAY_MODES[self.media.play_mode][1]
|
||||
return SONOS_TO_REPEAT[sonos_repeat]
|
||||
|
@ -493,7 +493,7 @@ class SonosMediaPlayerEntity(SonosEntity, MediaPlayerEntity):
|
|||
|
||||
@soco_error()
|
||||
def play_media( # noqa: C901
|
||||
self, media_type: str, media_id: str, **kwargs: Any
|
||||
self, media_type: MediaType | str, media_id: str, **kwargs: Any
|
||||
) -> None:
|
||||
"""Send the play_media command to the media player.
|
||||
|
||||
|
|
|
@ -18,6 +18,7 @@ from homeassistant.components.media_player import (
|
|||
MediaPlayerEntity,
|
||||
MediaPlayerEntityFeature,
|
||||
MediaPlayerState,
|
||||
MediaType,
|
||||
async_process_play_media_url,
|
||||
)
|
||||
from homeassistant.config_entries import SOURCE_IMPORT, ConfigEntry
|
||||
|
@ -282,7 +283,7 @@ class SoundTouchMediaPlayer(MediaPlayerEntity):
|
|||
)
|
||||
|
||||
async def async_play_media(
|
||||
self, media_type: str, media_id: str, **kwargs: Any
|
||||
self, media_type: MediaType | str, media_id: str, **kwargs: Any
|
||||
) -> None:
|
||||
"""Play a piece of media."""
|
||||
if media_source.is_media_source_id(media_id):
|
||||
|
@ -295,7 +296,9 @@ class SoundTouchMediaPlayer(MediaPlayerEntity):
|
|||
partial(self.play_media, media_type, media_id, **kwargs)
|
||||
)
|
||||
|
||||
def play_media(self, media_type: str, media_id: str, **kwargs: Any) -> None:
|
||||
def play_media(
|
||||
self, media_type: MediaType | str, media_id: str, **kwargs: Any
|
||||
) -> None:
|
||||
"""Play a piece of media."""
|
||||
_LOGGER.debug("Starting media with media_id: %s", media_id)
|
||||
if re.match(r"http?://", str(media_id)):
|
||||
|
|
|
@ -281,7 +281,7 @@ class SpotifyMediaPlayer(MediaPlayerEntity):
|
|||
return self._currently_playing.get("shuffle_state")
|
||||
|
||||
@property
|
||||
def repeat(self) -> str | None:
|
||||
def repeat(self) -> RepeatMode | None:
|
||||
"""Return current repeat mode."""
|
||||
if (
|
||||
not self._currently_playing
|
||||
|
@ -321,7 +321,9 @@ class SpotifyMediaPlayer(MediaPlayerEntity):
|
|||
self.data.client.seek_track(int(position * 1000))
|
||||
|
||||
@spotify_exception_handler
|
||||
def play_media(self, media_type: str, media_id: str, **kwargs: Any) -> None:
|
||||
def play_media(
|
||||
self, media_type: MediaType | str, media_id: str, **kwargs: Any
|
||||
) -> None:
|
||||
"""Play media."""
|
||||
media_type = media_type.removeprefix(MEDIA_PLAYER_PREFIX)
|
||||
|
||||
|
|
|
@ -469,7 +469,7 @@ class SqueezeBoxEntity(MediaPlayerEntity):
|
|||
await self._player.async_set_power(True)
|
||||
|
||||
async def async_play_media(
|
||||
self, media_type: str, media_id: str, **kwargs: Any
|
||||
self, media_type: MediaType | str, media_id: str, **kwargs: Any
|
||||
) -> None:
|
||||
"""Send the play_media command to the media player."""
|
||||
index = None
|
||||
|
|
|
@ -44,6 +44,8 @@ from homeassistant.components.media_player import (
|
|||
MediaPlayerEntity,
|
||||
MediaPlayerEntityFeature,
|
||||
MediaPlayerState,
|
||||
MediaType,
|
||||
RepeatMode,
|
||||
)
|
||||
from homeassistant.components.media_player.browse_media import BrowseMedia
|
||||
from homeassistant.const import (
|
||||
|
@ -574,7 +576,7 @@ class UniversalMediaPlayer(MediaPlayerEntity):
|
|||
await self._async_call_service(SERVICE_MEDIA_SEEK, data)
|
||||
|
||||
async def async_play_media(
|
||||
self, media_type: str, media_id: str, **kwargs: Any
|
||||
self, media_type: MediaType | str, media_id: str, **kwargs: Any
|
||||
) -> None:
|
||||
"""Play a piece of media."""
|
||||
data = {ATTR_MEDIA_CONTENT_TYPE: media_type, ATTR_MEDIA_CONTENT_ID: media_id}
|
||||
|
@ -613,7 +615,7 @@ class UniversalMediaPlayer(MediaPlayerEntity):
|
|||
data = {ATTR_MEDIA_SHUFFLE: shuffle}
|
||||
await self._async_call_service(SERVICE_SHUFFLE_SET, data, allow_override=True)
|
||||
|
||||
async def async_set_repeat(self, repeat: str) -> None:
|
||||
async def async_set_repeat(self, repeat: RepeatMode) -> None:
|
||||
"""Set repeat mode."""
|
||||
data = {ATTR_MEDIA_REPEAT: repeat}
|
||||
await self._async_call_service(SERVICE_REPEAT_SET, data, allow_override=True)
|
||||
|
|
|
@ -205,7 +205,7 @@ class XboxMediaPlayer(CoordinatorEntity[XboxUpdateCoordinator], MediaPlayerEntit
|
|||
)
|
||||
|
||||
async def async_play_media(
|
||||
self, media_type: str, media_id: str, **kwargs: Any
|
||||
self, media_type: MediaType | str, media_id: str, **kwargs: Any
|
||||
) -> None:
|
||||
"""Launch an app on the Xbox."""
|
||||
if media_id == "Home":
|
||||
|
|
|
@ -347,7 +347,9 @@ class YamahaDevice(MediaPlayerEntity):
|
|||
"""Select input source."""
|
||||
self.receiver.input = self._reverse_mapping.get(source, source)
|
||||
|
||||
def play_media(self, media_type: str, media_id: str, **kwargs: Any) -> None:
|
||||
def play_media(
|
||||
self, media_type: MediaType | str, media_id: str, **kwargs: Any
|
||||
) -> None:
|
||||
"""Play media from an ID.
|
||||
|
||||
This exposes a pass through for various input sources in the
|
||||
|
|
|
@ -263,7 +263,7 @@ class MusicCastMediaPlayer(MusicCastDeviceEntity, MediaPlayerEntity):
|
|||
)
|
||||
|
||||
async def async_play_media(
|
||||
self, media_type: str, media_id: str, **kwargs: Any
|
||||
self, media_type: MediaType | str, media_id: str, **kwargs: Any
|
||||
) -> None:
|
||||
"""Play media."""
|
||||
if media_source.is_media_source_id(media_id):
|
||||
|
|
Loading…
Reference in New Issue