From: Marcel van der Veldt Date: Fri, 24 Mar 2023 00:07:54 +0000 (+0100) Subject: fix typing of tuples X-Git-Url: https://git.kitaultman.com/?a=commitdiff_plain;h=4d77280257e23d10723947d08a31459d25f994ad;p=music-assistant-server.git fix typing of tuples --- diff --git a/music_assistant/common/models/config_entries.py b/music_assistant/common/models/config_entries.py index 438034c6..7013370d 100644 --- a/music_assistant/common/models/config_entries.py +++ b/music_assistant/common/models/config_entries.py @@ -65,7 +65,7 @@ class ConfigEntry(DataClassDictMixin): default_value: ConfigValueType = None required: bool = True # options [optional]: select from list of possible values/options - options: tuple[ConfigValueOption] | None = None + options: tuple[ConfigValueOption, ...] | None = None # range [optional]: select values within range range: tuple[int, int] | None = None # description [optional]: extended description of the setting. diff --git a/music_assistant/common/models/media_items.py b/music_assistant/common/models/media_items.py index c4a01926..f405257f 100755 --- a/music_assistant/common/models/media_items.py +++ b/music_assistant/common/models/media_items.py @@ -334,7 +334,7 @@ class Track(MediaItem): return None @property - def isrcs(self) -> tuple[str]: + def isrcs(self) -> tuple[str, ...]: """Split multiple values in isrc field.""" # sometimes the isrc contains multiple values, split by semicolon if not self.isrc: diff --git a/music_assistant/common/models/provider.py b/music_assistant/common/models/provider.py index 3cb68e30..a7b72848 100644 --- a/music_assistant/common/models/provider.py +++ b/music_assistant/common/models/provider.py @@ -65,7 +65,7 @@ class SyncTask: provider_domain: str provider_instance: str - media_types: tuple[MediaType] + media_types: tuple[MediaType, ...] task: asyncio.Task def to_dict(self, *args, **kwargs) -> dict[str, Any]: diff --git a/music_assistant/server/controllers/media/base.py b/music_assistant/server/controllers/media/base.py index 41616a6c..deb9a188 100644 --- a/music_assistant/server/controllers/media/base.py +++ b/music_assistant/server/controllers/media/base.py @@ -344,7 +344,7 @@ class MediaControllerBase(Generic[ItemCls], metaclass=ABCMeta): self, provider_domain: str | None = None, provider_instance: str | None = None, - provider_item_ids: tuple[str] | None = None, + provider_item_ids: tuple[str, ...] | None = None, limit: int = 500, offset: int = 0, ) -> list[ItemCls]: @@ -375,7 +375,7 @@ class MediaControllerBase(Generic[ItemCls], metaclass=ABCMeta): self, provider_domain: str | None = None, provider_instance: str | None = None, - provider_item_ids: tuple[str] | None = None, + provider_item_ids: tuple[str, ...] | None = None, limit: int = 500, offset: int = 0, ) -> AsyncGenerator[ItemCls, None]: diff --git a/music_assistant/server/controllers/media/playlists.py b/music_assistant/server/controllers/media/playlists.py index cad0e139..2ee28b8e 100644 --- a/music_assistant/server/controllers/media/playlists.py +++ b/music_assistant/server/controllers/media/playlists.py @@ -163,7 +163,7 @@ class PlaylistController(MediaControllerBase[Playlist]): await self.get(db_playlist_id, provider_domain="database", force_refresh=True) async def remove_playlist_tracks( - self, db_playlist_id: str, positions_to_remove: tuple[int] + self, db_playlist_id: str, positions_to_remove: tuple[int, ...] ) -> None: """Remove multiple tracks from playlist.""" playlist = await self.get_db_item(db_playlist_id) diff --git a/music_assistant/server/controllers/player_queues.py b/music_assistant/server/controllers/player_queues.py index b00c23ce..09abcdf4 100755 --- a/music_assistant/server/controllers/player_queues.py +++ b/music_assistant/server/controllers/player_queues.py @@ -56,7 +56,7 @@ class PlayerQueuesController: return iter(self._queues.values()) @api_command("players/queue/all") - def all(self) -> tuple[PlayerQueue]: + def all(self) -> tuple[PlayerQueue, ...]: """Return all registered PlayerQueues.""" return tuple(self._queues.values()) diff --git a/music_assistant/server/controllers/players.py b/music_assistant/server/controllers/players.py index ec96dfc3..6a3a431d 100755 --- a/music_assistant/server/controllers/players.py +++ b/music_assistant/server/controllers/players.py @@ -67,7 +67,7 @@ class PlayerController: return_unavailable: bool = True, return_hidden: bool = True, return_disabled: bool = False, - ) -> tuple[Player]: + ) -> tuple[Player, ...]: """Return all registered players.""" return tuple( player diff --git a/music_assistant/server/helpers/tags.py b/music_assistant/server/helpers/tags.py index fd064043..22f674c6 100644 --- a/music_assistant/server/helpers/tags.py +++ b/music_assistant/server/helpers/tags.py @@ -20,7 +20,7 @@ from music_assistant.server.helpers.process import AsyncProcess TAG_SPLITTER = ";" -def split_items(org_str: str) -> tuple[str]: +def split_items(org_str: str) -> tuple[str, ...]: """Split up a tags string by common splitter.""" if not org_str: return tuple() @@ -29,7 +29,7 @@ def split_items(org_str: str) -> tuple[str]: return tuple(x.strip() for x in org_str.split(TAG_SPLITTER)) -def split_artists(org_artists: str | tuple[str]) -> tuple[str]: +def split_artists(org_artists: str | tuple[str, ...]) -> tuple[str, ...]: """Parse all artists from a string.""" final_artists = set() # when not using the multi artist tag, the artist string may contain @@ -77,7 +77,7 @@ class AudioTags: return self.tags.get("album") @property - def artists(self) -> tuple[str]: + def artists(self) -> tuple[str, ...]: """Return track artists.""" # prefer multi-artist tag if tag := self.tags.get("artists"): @@ -96,7 +96,7 @@ class AudioTags: return (UNKNOWN_ARTIST,) @property - def album_artists(self) -> tuple[str]: + def album_artists(self) -> tuple[str, ...]: """Return (all) album artists (if any).""" # prefer multi-artist tag if tag := self.tags.get("albumartists"): @@ -109,7 +109,7 @@ class AudioTags: return tuple() @property - def genres(self) -> tuple[str]: + def genres(self) -> tuple[str, ...]: """Return (all) genres, if any.""" return split_items(self.tags.get("genre")) @@ -139,12 +139,12 @@ class AudioTags: return None @property - def musicbrainz_artistids(self) -> tuple[str]: + def musicbrainz_artistids(self) -> tuple[str, ...]: """Return musicbrainz_artistid tag(s) if present.""" return split_items(self.tags.get("musicbrainzartistid")) @property - def musicbrainz_albumartistids(self) -> tuple[str]: + def musicbrainz_albumartistids(self) -> tuple[str, ...]: """Return musicbrainz_albumartistid tag if present.""" return split_items(self.tags.get("musicbrainzalbumartistid")) diff --git a/music_assistant/server/models/music_provider.py b/music_assistant/server/models/music_provider.py index 9bacb694..aaf2e423 100644 --- a/music_assistant/server/models/music_provider.py +++ b/music_assistant/server/models/music_provider.py @@ -195,7 +195,7 @@ class MusicProvider(Provider): raise NotImplementedError async def remove_playlist_tracks( - self, prov_playlist_id: str, positions_to_remove: tuple[int] + self, prov_playlist_id: str, positions_to_remove: tuple[int, ...] ) -> None: """Remove track(s) from playlist.""" if ProviderFeature.PLAYLIST_TRACKS_EDIT in self.supported_features: diff --git a/music_assistant/server/providers/airplay/__init__.py b/music_assistant/server/providers/airplay/__init__.py index 2416ab2f..8a5a6bc4 100644 --- a/music_assistant/server/providers/airplay/__init__.py +++ b/music_assistant/server/providers/airplay/__init__.py @@ -121,7 +121,7 @@ class AirplayProvider(PlayerProvider): self._closing = True await self._stop_bridge() - def get_player_config_entries(self, player_id: str) -> tuple[ConfigEntry]: + def get_player_config_entries(self, player_id: str) -> tuple[ConfigEntry, ...]: """Return all (provider/player specific) Config Entries for the given player (if any).""" slimproto_prov = self.mass.get_provider("slimproto") base_entries = slimproto_prov.get_player_config_entries(player_id) diff --git a/music_assistant/server/providers/filesystem_local/base.py b/music_assistant/server/providers/filesystem_local/base.py index f4724d67..61798aed 100644 --- a/music_assistant/server/providers/filesystem_local/base.py +++ b/music_assistant/server/providers/filesystem_local/base.py @@ -619,7 +619,7 @@ class FileSystemProviderBase(MusicProvider): await self.write_file_content(prov_playlist_id, playlist_data.encode("utf-8")) async def remove_playlist_tracks( - self, prov_playlist_id: str, positions_to_remove: tuple[int] + self, prov_playlist_id: str, positions_to_remove: tuple[int, ...] ) -> None: """Remove track(s) from playlist.""" if not await self.exists(prov_playlist_id): diff --git a/music_assistant/server/providers/spotify/__init__.py b/music_assistant/server/providers/spotify/__init__.py index 3e894d28..dddfbf47 100644 --- a/music_assistant/server/providers/spotify/__init__.py +++ b/music_assistant/server/providers/spotify/__init__.py @@ -315,7 +315,7 @@ class SpotifyProvider(MusicProvider): return await self._post_data(f"playlists/{prov_playlist_id}/tracks", data=data) async def remove_playlist_tracks( - self, prov_playlist_id: str, positions_to_remove: tuple[int] + self, prov_playlist_id: str, positions_to_remove: tuple[int, ...] ) -> None: """Remove track(s) from playlist.""" track_uris = [] diff --git a/music_assistant/server/providers/ytmusic/__init__.py b/music_assistant/server/providers/ytmusic/__init__.py index a05b6e72..9b9b307c 100644 --- a/music_assistant/server/providers/ytmusic/__init__.py +++ b/music_assistant/server/providers/ytmusic/__init__.py @@ -364,7 +364,7 @@ class YoutubeMusicProvider(MusicProvider): ) async def remove_playlist_tracks( - self, prov_playlist_id: str, positions_to_remove: tuple[int] + self, prov_playlist_id: str, positions_to_remove: tuple[int, ...] ) -> None: """Remove track(s) from playlist.""" playlist_obj = await get_playlist( diff --git a/music_assistant/server/server.py b/music_assistant/server/server.py index 8e2c0c05..90a5ed3c 100644 --- a/music_assistant/server/server.py +++ b/music_assistant/server/server.py @@ -35,7 +35,9 @@ if TYPE_CHECKING: from types import TracebackType EventCallBackType = Callable[[MassEvent], None] -EventSubscriptionType = tuple[EventCallBackType, tuple[EventType] | None, tuple[str] | None] +EventSubscriptionType = tuple[ + EventCallBackType, tuple[EventType, ...] | None, tuple[str, ...] | None +] LOGGER = logging.getLogger(ROOT_LOGGER_NAME)