From ec2d55721564f9ecf4170df6de6f766dac20eed1 Mon Sep 17 00:00:00 2001 From: Jc2k Date: Wed, 15 Jan 2025 23:07:48 +0000 Subject: [PATCH] chore: mypy for template player provider (#1876) --- .../_template_player_provider/__init__.py | 22 +++++++++++++------ pyproject.toml | 1 - 2 files changed, 15 insertions(+), 8 deletions(-) diff --git a/music_assistant/providers/_template_player_provider/__init__.py b/music_assistant/providers/_template_player_provider/__init__.py index 7a6467a4..e82ffddf 100644 --- a/music_assistant/providers/_template_player_provider/__init__.py +++ b/music_assistant/providers/_template_player_provider/__init__.py @@ -50,7 +50,7 @@ if TYPE_CHECKING: from music_assistant_models.provider import ProviderManifest from zeroconf.asyncio import AsyncServiceInfo - from music_assistant import MusicAssistant + from music_assistant.mass import MusicAssistant from music_assistant.models import ProviderInstanceType @@ -108,10 +108,10 @@ class MyDemoPlayerprovider(PlayerProvider): def supported_features(self) -> set[ProviderFeature]: """Return the features supported by this Provider.""" # MANDATORY - # you should return a tuple of provider-level features + # you should return a set of provider-level features # here that your player provider supports or an empty tuple if none. # for example 'ProviderFeature.SYNC_PLAYERS' if you can sync players. - return (ProviderFeature.SYNC_PLAYERS,) + return {ProviderFeature.SYNC_PLAYERS} async def loaded_in_mass(self) -> None: """Call after the provider has been loaded.""" @@ -147,6 +147,9 @@ class MyDemoPlayerprovider(PlayerProvider): # If no mdns service type is specified, this method is omitted and you # can completely remove it from your provider implementation. + if not info: + return + # NOTE: If you do not use mdns for discovery of players on the network, # you must implement your own discovery mechanism and logic to add new players # and update them on state changes when needed. @@ -154,6 +157,10 @@ class MyDemoPlayerprovider(PlayerProvider): # player providers for more inspiration. name = name.split("@", 1)[1] if "@" in name else name player_id = info.decoded_properties["uuid"] # this is just an example! + + if not player_id: + return + # handle removed player if state_change == ServiceStateChange.Removed: # check if the player manager has an existing entry for this player @@ -173,14 +180,14 @@ class MyDemoPlayerprovider(PlayerProvider): # this is an existing player that has been updated/reconnected # or simply a re-announcement on mdns. cur_address = get_primary_ip_address_from_zeroconf(info) - if cur_address and cur_address != mass_player.device_info.address: + if cur_address and cur_address != mass_player.device_info.ip_address: self.logger.debug( "Address updated to %s for player %s", cur_address, mass_player.display_name ) mass_player.device_info = DeviceInfo( model=mass_player.device_info.model, manufacturer=mass_player.device_info.manufacturer, - address=str(cur_address), + ip_address=str(cur_address), ) if not mass_player.available: # if the player was marked offline and you now receive an mdns update @@ -359,8 +366,9 @@ class MyDemoPlayerprovider(PlayerProvider): - player_id: player_id of the player to handle the command. """ - sonos_player = self.sonos_players[player_id] - await sonos_player.client.player.leave_group() + # OPTIONAL - required only if you specified ProviderFeature.SYNC_PLAYERS + # this method should handle the ungroup command for the given player. + # you should unjoin the given player from the target_player/syncgroup. async def play_announcement( self, player_id: str, announcement: PlayerMedia, volume_level: int | None = None diff --git a/pyproject.toml b/pyproject.toml index 6e440382..ac391ef9 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -122,7 +122,6 @@ exclude = [ '^music_assistant/controllers/.*$', '^music_assistant/helpers/.*$', '^music_assistant/models/.*$', - '^music_assistant/providers/_template_player_provider/.*$', '^music_assistant/providers/apple_music/.*$', '^music_assistant/providers/bluesound/.*$', '^music_assistant/providers/chromecast/.*$', -- 2.34.1