From b9d34ce169a17f51769a668634c52d250e6e7952 Mon Sep 17 00:00:00 2001 From: Marc Mueller <30130371+cdce8p@users.noreply.github.com> Date: Mon, 19 Sep 2022 09:59:12 +0200 Subject: [PATCH] Improve sonos typing (#78661) --- homeassistant/components/sonos/favorites.py | 2 +- .../components/sonos/media_browser.py | 21 ++++++++++++------- homeassistant/components/sonos/speaker.py | 6 +++--- 3 files changed, 17 insertions(+), 12 deletions(-) diff --git a/homeassistant/components/sonos/favorites.py b/homeassistant/components/sonos/favorites.py index 5284a5f6745..eeeb210b9ec 100644 --- a/homeassistant/components/sonos/favorites.py +++ b/homeassistant/components/sonos/favorites.py @@ -32,7 +32,7 @@ class SonosFavorites(SonosHouseholdCoordinator): self._favorites: list[DidlFavorite] = [] self.last_polled_ids: dict[str, int] = {} - def __iter__(self) -> Iterator: + def __iter__(self) -> Iterator[DidlFavorite]: """Return an iterator for the known favorites.""" favorites = self._favorites.copy() return iter(favorites) diff --git a/homeassistant/components/sonos/media_browser.py b/homeassistant/components/sonos/media_browser.py index 187c0dbef55..713d48fea55 100644 --- a/homeassistant/components/sonos/media_browser.py +++ b/homeassistant/components/sonos/media_browser.py @@ -7,13 +7,17 @@ from functools import partial import logging from typing import cast -from soco.data_structures import DidlFavorite, DidlObject +from soco.data_structures import DidlObject from soco.ms_data_structures import MusicServiceItem from soco.music_library import MusicLibrary from homeassistant.components import media_source, plex, spotify -from homeassistant.components.media_player import BrowseMedia, MediaClass, MediaType -from homeassistant.components.media_player.errors import BrowseError +from homeassistant.components.media_player import ( + BrowseError, + BrowseMedia, + MediaClass, + MediaType, +) from homeassistant.core import HomeAssistant from homeassistant.helpers.network import is_internal_request @@ -32,6 +36,7 @@ from .const import ( SONOS_TYPES_MAPPING, ) from .exception import UnknownMediaType +from .favorites import SonosFavorites from .speaker import SonosMedia, SonosSpeaker _LOGGER = logging.getLogger(__name__) @@ -363,15 +368,15 @@ def library_payload(media_library: MusicLibrary, get_thumbnail_url=None) -> Brow ) -def favorites_payload(favorites: list[DidlFavorite]) -> BrowseMedia: +def favorites_payload(favorites: SonosFavorites) -> BrowseMedia: """ Create response payload to describe contents of a specific library. Used by async_browse_media. """ - children = [] + children: list[BrowseMedia] = [] - group_types = {fav.reference.item_class for fav in favorites} + group_types: set[str] = {fav.reference.item_class for fav in favorites} for group_type in sorted(group_types): try: media_content_type = SONOS_TYPES_MAPPING[group_type] @@ -402,13 +407,13 @@ def favorites_payload(favorites: list[DidlFavorite]) -> BrowseMedia: def favorites_folder_payload( - favorites: list[DidlFavorite], media_content_id: str + favorites: SonosFavorites, media_content_id: str ) -> BrowseMedia: """Create response payload to describe all items of a type of favorite. Used by async_browse_media. """ - children = [] + children: list[BrowseMedia] = [] content_type = SONOS_TYPES_MAPPING[media_content_id] for favorite in favorites: diff --git a/homeassistant/components/sonos/speaker.py b/homeassistant/components/sonos/speaker.py index 516a431295a..98984eedc03 100644 --- a/homeassistant/components/sonos/speaker.py +++ b/homeassistant/components/sonos/speaker.py @@ -2,7 +2,7 @@ from __future__ import annotations import asyncio -from collections.abc import Callable, Coroutine +from collections.abc import Callable, Collection, Coroutine import contextlib import datetime from functools import partial @@ -946,7 +946,7 @@ class SonosSpeaker: ) -> None: """Snapshot all the speakers and optionally their groups.""" - def _snapshot_all(speakers: list[SonosSpeaker]) -> None: + def _snapshot_all(speakers: Collection[SonosSpeaker]) -> None: """Sync helper.""" for speaker in speakers: speaker.snapshot(with_group) @@ -1032,7 +1032,7 @@ class SonosSpeaker: return groups - def _restore_players(speakers: list[SonosSpeaker]) -> None: + def _restore_players(speakers: Collection[SonosSpeaker]) -> None: """Restore state of all players.""" for speaker in (s for s in speakers if not s.is_coordinator): speaker.restore()