Fix: leftover issues after repo split up
authorMarcel van der Veldt <m.vanderveldt@outlook.com>
Sat, 2 Nov 2024 17:09:16 +0000 (18:09 +0100)
committerMarcel van der Veldt <m.vanderveldt@outlook.com>
Sat, 2 Nov 2024 17:09:16 +0000 (18:09 +0100)
41 files changed:
music_assistant/controllers/config.py
music_assistant/controllers/media/albums.py
music_assistant/controllers/media/artists.py
music_assistant/controllers/media/playlists.py
music_assistant/controllers/metadata.py
music_assistant/controllers/music.py
music_assistant/controllers/streams.py
music_assistant/helpers/audio.py
music_assistant/helpers/ffmpeg.py
music_assistant/helpers/global_cache.py [deleted file]
music_assistant/helpers/uri.py
music_assistant/helpers/util.py
music_assistant/mass.py
music_assistant/models/player_provider.py
music_assistant/providers/airplay/provider.py
music_assistant/providers/apple_music/__init__.py
music_assistant/providers/bluesound/__init__.py
music_assistant/providers/builtin/__init__.py
music_assistant/providers/chromecast/__init__.py
music_assistant/providers/dlna/__init__.py
music_assistant/providers/fanarttv/__init__.py
music_assistant/providers/filesystem_local/__init__.py
music_assistant/providers/fully_kiosk/__init__.py
music_assistant/providers/hass_players/__init__.py
music_assistant/providers/opensubsonic/sonic_provider.py
music_assistant/providers/player_group/__init__.py
music_assistant/providers/qobuz/__init__.py
music_assistant/providers/radiobrowser/__init__.py
music_assistant/providers/siriusxm/__init__.py
music_assistant/providers/slimproto/__init__.py
music_assistant/providers/snapcast/__init__.py
music_assistant/providers/sonos/provider.py
music_assistant/providers/sonos_s1/__init__.py
music_assistant/providers/sonos_s1/player.py
music_assistant/providers/soundcloud/__init__.py
music_assistant/providers/spotify/__init__.py
music_assistant/providers/theaudiodb/__init__.py
music_assistant/providers/tidal/__init__.py
music_assistant/providers/tunein/__init__.py
music_assistant/providers/ytmusic/__init__.py
scripts/setup.sh

index f8bfea0c6a3bac3fbf9d3351db5c33126d69d8c8..e46a623c52be4397d4efb0f7ac1579020939ce41 100644 (file)
@@ -15,8 +15,6 @@ from aiofiles.os import wrap
 from cryptography.fernet import Fernet, InvalidToken
 from music_assistant_models import config_entries
 from music_assistant_models.config_entries import (
-    DEFAULT_CORE_CONFIG_ENTRIES,
-    DEFAULT_PROVIDER_CONFIG_ENTRIES,
     ConfigEntry,
     ConfigValueType,
     CoreConfig,
@@ -30,7 +28,7 @@ from music_assistant_models.errors import (
     PlayerCommandFailed,
     UnsupportedFeaturedException,
 )
-from music_assistant_models.helpers.global_cache import get_global_cache_value
+from music_assistant_models.helpers import get_global_cache_value
 
 from music_assistant.constants import (
     CONF_CORE,
@@ -38,6 +36,8 @@ from music_assistant.constants import (
     CONF_PROVIDERS,
     CONF_SERVER_ID,
     CONFIGURABLE_CORE_CONTROLLERS,
+    DEFAULT_CORE_CONFIG_ENTRIES,
+    DEFAULT_PROVIDER_CONFIG_ENTRIES,
     ENCRYPT_SUFFIX,
 )
 from music_assistant.helpers.api import api_command
index b0cfb85683ab484d6cf3364652b0dd239dfdd38f..fef594c0b304d1f13f130cfdc3a322b9d91b4d51 100644 (file)
@@ -6,21 +6,13 @@ import contextlib
 from collections.abc import Iterable
 from typing import TYPE_CHECKING, Any
 
-from music_assistant_models.enums import CacheCategory, ProviderFeature
+from music_assistant_models.enums import AlbumType, CacheCategory, MediaType, ProviderFeature
 from music_assistant_models.errors import (
     InvalidDataError,
     MediaNotFoundError,
     UnsupportedFeaturedException,
 )
-from music_assistant_models.media_items import (
-    Album,
-    AlbumType,
-    Artist,
-    ItemMapping,
-    MediaType,
-    Track,
-    UniqueList,
-)
+from music_assistant_models.media_items import Album, Artist, ItemMapping, Track, UniqueList
 
 from music_assistant.constants import DB_TABLE_ALBUM_ARTISTS, DB_TABLE_ALBUM_TRACKS, DB_TABLE_ALBUMS
 from music_assistant.controllers.media.base import MediaControllerBase
index 776d907acbe2982cb906f27a97c54f27e9429af0..52a870ae0cd89194d9a30fe047abc229411c6442 100644 (file)
@@ -6,21 +6,13 @@ import asyncio
 import contextlib
 from typing import TYPE_CHECKING, Any
 
-from music_assistant_models.enums import CacheCategory, ProviderFeature
+from music_assistant_models.enums import AlbumType, CacheCategory, MediaType, ProviderFeature
 from music_assistant_models.errors import (
     MediaNotFoundError,
     ProviderUnavailableError,
     UnsupportedFeaturedException,
 )
-from music_assistant_models.media_items import (
-    Album,
-    AlbumType,
-    Artist,
-    ItemMapping,
-    MediaType,
-    Track,
-    UniqueList,
-)
+from music_assistant_models.media_items import Album, Artist, ItemMapping, Track, UniqueList
 
 from music_assistant.constants import (
     DB_TABLE_ALBUM_ARTISTS,
index 5051c743398588d95741a437711eb6f41b7cacf8..bd141af251f4b2344bce324a7038cccfc2dcd328 100644 (file)
@@ -14,11 +14,11 @@ from music_assistant_models.errors import (
     ProviderUnavailableError,
     UnsupportedFeaturedException,
 )
-from music_assistant_models.helpers.uri import create_uri, parse_uri
 from music_assistant_models.media_items import Playlist, PlaylistTrack, Track
 
 from music_assistant.constants import DB_TABLE_PLAYLISTS
 from music_assistant.helpers.json import serialize_to_json
+from music_assistant.helpers.uri import create_uri, parse_uri
 from music_assistant.models.music_provider import MusicProvider
 
 from .base import MediaControllerBase
index 2c69820e6d9ecd7b8723e61afd48a4393551832e..9eab843dbac51c28fb9033c27ce7378fe18567ef 100644 (file)
@@ -26,7 +26,7 @@ from music_assistant_models.enums import (
     ProviderType,
 )
 from music_assistant_models.errors import MediaNotFoundError, ProviderUnavailableError
-from music_assistant_models.helpers.global_cache import get_global_cache_value
+from music_assistant_models.helpers import get_global_cache_value
 from music_assistant_models.media_items import (
     Album,
     Artist,
index b8c92578d809507e76081fd2aaff09200b900a8f..b8424d9d8a2fd822b57fba84d49720573100c171 100644 (file)
@@ -27,8 +27,7 @@ from music_assistant_models.errors import (
     MusicAssistantError,
     ProviderUnavailableError,
 )
-from music_assistant_models.helpers.global_cache import get_global_cache_value
-from music_assistant_models.helpers.uri import parse_uri
+from music_assistant_models.helpers import get_global_cache_value
 from music_assistant_models.media_items import (
     BrowseFolder,
     ItemMapping,
@@ -55,6 +54,7 @@ from music_assistant.constants import (
 from music_assistant.helpers.api import api_command
 from music_assistant.helpers.database import DatabaseConnection
 from music_assistant.helpers.datetime import utc_timestamp
+from music_assistant.helpers.uri import parse_uri
 from music_assistant.helpers.util import TaskManager
 from music_assistant.models.core_controller import CoreController
 
index b760b282952d02298194c98f6bdddb8a24c93d58..8cc484b16ea3b68b445fb677a7347ff15933827f 100644 (file)
@@ -16,12 +16,7 @@ from typing import TYPE_CHECKING
 
 from aiofiles.os import wrap
 from aiohttp import web
-from music_assistant_models.config_entries import (
-    CONF_ENTRY_ENABLE_ICY_METADATA,
-    ConfigEntry,
-    ConfigValueOption,
-    ConfigValueType,
-)
+from music_assistant_models.config_entries import ConfigEntry, ConfigValueOption, ConfigValueType
 from music_assistant_models.enums import (
     ConfigEntryType,
     ContentType,
@@ -39,6 +34,7 @@ from music_assistant.constants import (
     CONF_BIND_PORT,
     CONF_CROSSFADE,
     CONF_CROSSFADE_DURATION,
+    CONF_ENTRY_ENABLE_ICY_METADATA,
     CONF_HTTP_PROFILE,
     CONF_OUTPUT_CHANNELS,
     CONF_PUBLISH_IP,
index 578bccf6d3591e18c664ed967e04e3fcf989522e..dad3c5db41fd316f83475947dc30eb44a4a27bf1 100644 (file)
@@ -14,15 +14,15 @@ from typing import TYPE_CHECKING
 
 import aiofiles
 from aiohttp import ClientTimeout
-from music_assistant_models.enums import MediaType, StreamType, VolumeNormalizationMode
+from music_assistant_models.enums import ContentType, MediaType, StreamType, VolumeNormalizationMode
 from music_assistant_models.errors import (
     InvalidDataError,
     MediaNotFoundError,
     MusicAssistantError,
     ProviderUnavailableError,
 )
-from music_assistant_models.helpers.global_cache import set_global_cache_values
-from music_assistant_models.media_items import AudioFormat, ContentType
+from music_assistant_models.helpers import set_global_cache_values
+from music_assistant_models.streamdetails import AudioFormat
 
 from music_assistant.constants import (
     CONF_EQ_BASS,
index 1cf911584448eac251e06425ec98d43777470dd0..0405fc275011f42205bd54b1de655b8e9849b3f3 100644 (file)
@@ -8,15 +8,18 @@ from collections import deque
 from collections.abc import AsyncGenerator
 from typing import TYPE_CHECKING
 
+from music_assistant_models.enums import ContentType
 from music_assistant_models.errors import AudioError
-from music_assistant_models.helpers.global_cache import get_global_cache_value
-from music_assistant_models.media_items import AudioFormat, ContentType
+from music_assistant_models.helpers import get_global_cache_value
 
 from music_assistant.constants import VERBOSE_LOG_LEVEL
 
 from .process import AsyncProcess
 from .util import TimedAsyncGenerator, close_async_generator
 
+if TYPE_CHECKING:
+    from music_assistant_models.media_items import AudioFormat
+
 LOGGER = logging.getLogger("ffmpeg")
 MINIMAL_FFMPEG_VERSION = 6
 
diff --git a/music_assistant/helpers/global_cache.py b/music_assistant/helpers/global_cache.py
deleted file mode 100644 (file)
index 6cd741d..0000000
+++ /dev/null
@@ -1,28 +0,0 @@
-"""Provides a simple global memory cache."""
-
-from __future__ import annotations
-
-import asyncio
-from typing import Any
-
-# global cache - we use this on a few places (as limited as possible)
-# where we have no other options
-_global_cache_lock = asyncio.Lock()
-_global_cache: dict[str, Any] = {}
-
-
-def get_global_cache_value(key: str, default: Any = None) -> Any:
-    """Get a value from the global cache."""
-    return _global_cache.get(key, default)
-
-
-async def set_global_cache_values(values: dict[str, Any]) -> Any:
-    """Set a value in the global cache (without locking)."""
-    async with _global_cache_lock:
-        for key, value in values.items():
-            _set_global_cache_value(key, value)
-
-
-def _set_global_cache_value(key: str, value: Any) -> Any:
-    """Set a value in the global cache (without locking)."""
-    _global_cache[key] = value
index 7f39b4e1f4bd25e978436e343de6387785d46ae9..c0f58726d4f09a26b2d91199bc1654e7132574e0 100644 (file)
@@ -6,9 +6,13 @@ import re
 
 from music_assistant_models.enums import MediaType
 from music_assistant_models.errors import InvalidProviderID, InvalidProviderURI
+from music_assistant_models.helpers import create_uri as create_uri_org
 
 base62_length22_id_pattern = re.compile(r"^[a-zA-Z0-9]{22}$")
 
+# create alias to original create_uri function
+create_uri = create_uri_org
+
 
 def valid_base62_length22(item_id: str) -> bool:
     """Validate Spotify style ID."""
index 25da351afc7c7e00b90d6673d0b5b7a8f30636a9..b6e5f2b40a12d5a33b9f7a8579b95809dccd4fc4 100644 (file)
@@ -422,7 +422,7 @@ async def load_provider_module(domain: str, requirements: list[str]) -> Provider
 
     @lru_cache
     def _get_provider_module(domain: str) -> ProviderModuleType:
-        return importlib.import_module(f".{domain}", ".providers")
+        return importlib.import_module(f".{domain}", "music_assistant.providers")
 
     # ensure module requirements are met
     for requirement in requirements:
index bb4119da51f646c83fa8d2506229c05f1c8f6b7d..f183c6835ac84ec66963df69252ee7da500b205c 100644 (file)
@@ -16,7 +16,7 @@ from music_assistant_models.api import ServerInfoMessage
 from music_assistant_models.enums import EventType, ProviderType
 from music_assistant_models.errors import MusicAssistantError, SetupFailedError
 from music_assistant_models.event import MassEvent
-from music_assistant_models.helpers.global_cache import set_global_cache_values
+from music_assistant_models.helpers import set_global_cache_values
 from music_assistant_models.provider import ProviderManifest
 from zeroconf import IPVersion, NonUniqueNameException, ServiceStateChange, Zeroconf
 from zeroconf.asyncio import AsyncServiceBrowser, AsyncServiceInfo, AsyncZeroconf
index 8d54db53d61f3fcdc030c04afe69bdd1c8cfa8a5..a9491a3f428a337730e4d4eb78fb44043114b2a2 100644 (file)
@@ -5,22 +5,22 @@ from __future__ import annotations
 from abc import abstractmethod
 from typing import TYPE_CHECKING
 
-from music_assistant_models.config_entries import (
+from music_assistant_models.errors import UnsupportedFeaturedException
+from zeroconf import ServiceStateChange
+from zeroconf.asyncio import AsyncServiceInfo
+
+from music_assistant.constants import (
     BASE_PLAYER_CONFIG_ENTRIES,
     CONF_ENTRY_ANNOUNCE_VOLUME,
     CONF_ENTRY_ANNOUNCE_VOLUME_MAX,
     CONF_ENTRY_ANNOUNCE_VOLUME_MIN,
     CONF_ENTRY_ANNOUNCE_VOLUME_STRATEGY,
-    ConfigEntry,
-    PlayerConfig,
 )
-from music_assistant_models.errors import UnsupportedFeaturedException
-from zeroconf import ServiceStateChange
-from zeroconf.asyncio import AsyncServiceInfo
 
 from .provider import Provider
 
 if TYPE_CHECKING:
+    from music_assistant_models.config_entries import ConfigEntry, PlayerConfig
     from music_assistant_models.player import Player, PlayerMedia
 
 # ruff: noqa: ARG001, ARG002
index 34904afef43fad4d62638103bc1200c5526e0796..b4a5f5bb73b36ccaec1110a2607f38e71c31bc53 100644 (file)
@@ -10,18 +10,7 @@ import time
 from random import randrange
 from typing import TYPE_CHECKING
 
-from music_assistant_models.config_entries import (
-    CONF_ENTRY_CROSSFADE,
-    CONF_ENTRY_CROSSFADE_DURATION,
-    CONF_ENTRY_EQ_BASS,
-    CONF_ENTRY_EQ_MID,
-    CONF_ENTRY_EQ_TREBLE,
-    CONF_ENTRY_FLOW_MODE_ENFORCED,
-    CONF_ENTRY_OUTPUT_CHANNELS,
-    CONF_ENTRY_SYNC_ADJUST,
-    ConfigEntry,
-    create_sample_rates_config_entry,
-)
+from music_assistant_models.config_entries import ConfigEntry
 from music_assistant_models.enums import (
     ConfigEntryType,
     ContentType,
@@ -36,10 +25,16 @@ from music_assistant_models.player import DeviceInfo, Player, PlayerMedia
 from zeroconf import ServiceStateChange
 from zeroconf.asyncio import AsyncServiceInfo
 
-from music_assistant.helpers import (
-    convert_airplay_volume,
-    get_model_from_am,
-    get_primary_ip_address,
+from music_assistant.constants import (
+    CONF_ENTRY_CROSSFADE,
+    CONF_ENTRY_CROSSFADE_DURATION,
+    CONF_ENTRY_EQ_BASS,
+    CONF_ENTRY_EQ_MID,
+    CONF_ENTRY_EQ_TREBLE,
+    CONF_ENTRY_FLOW_MODE_ENFORCED,
+    CONF_ENTRY_OUTPUT_CHANNELS,
+    CONF_ENTRY_SYNC_ADJUST,
+    create_sample_rates_config_entry,
 )
 from music_assistant.helpers.audio import get_ffmpeg_stream
 from music_assistant.helpers.datetime import utc
@@ -58,6 +53,7 @@ from .const import (
     CONF_READ_AHEAD_BUFFER,
     FALLBACK_VOLUME,
 )
+from .helpers import convert_airplay_volume, get_model_from_am, get_primary_ip_address
 from .player import AirPlayPlayer
 
 if TYPE_CHECKING:
index e753449f772b998569bf19f89546c427b193f44c..364e53d810ad64c2ed0a176850d04bf28122c463 100644 (file)
@@ -9,15 +9,20 @@ from typing import TYPE_CHECKING, Any
 
 import aiofiles
 from music_assistant_models.config_entries import ConfigEntry, ConfigValueType
-from music_assistant_models.enums import ConfigEntryType, ExternalID, ProviderFeature, StreamType
+from music_assistant_models.enums import (
+    AlbumType,
+    ConfigEntryType,
+    ContentType,
+    ExternalID,
+    ImageType,
+    ProviderFeature,
+    StreamType,
+)
 from music_assistant_models.errors import MediaNotFoundError, ResourceTemporarilyUnavailable
 from music_assistant_models.media_items import (
     Album,
-    AlbumType,
     Artist,
     AudioFormat,
-    ContentType,
-    ImageType,
     ItemMapping,
     MediaItemImage,
     MediaItemType,
index bc718b4a231f74e6c89c6a57e25a1cd60a0638d9..47da44e1c7e4b626a11064671215f225786e1d17 100644 (file)
@@ -6,15 +6,6 @@ import asyncio
 import time
 from typing import TYPE_CHECKING, TypedDict
 
-from music_assistant_models.config_entries import (
-    CONF_ENTRY_CROSSFADE,
-    CONF_ENTRY_ENABLE_ICY_METADATA,
-    CONF_ENTRY_ENFORCE_MP3,
-    CONF_ENTRY_FLOW_MODE_ENFORCED,
-    CONF_ENTRY_HTTP_PROFILE_FORCED_2,
-    ConfigEntry,
-    ConfigValueType,
-)
 from music_assistant_models.enums import PlayerFeature, PlayerState, PlayerType, ProviderFeature
 from music_assistant_models.errors import PlayerCommandFailed
 from music_assistant_models.player import DeviceInfo, Player, PlayerMedia
@@ -22,7 +13,14 @@ from pyblu import Player as BluosPlayer
 from pyblu import Status, SyncStatus
 from zeroconf import ServiceStateChange
 
-from music_assistant.constants import VERBOSE_LOG_LEVEL
+from music_assistant.constants import (
+    CONF_ENTRY_CROSSFADE,
+    CONF_ENTRY_ENABLE_ICY_METADATA,
+    CONF_ENTRY_ENFORCE_MP3,
+    CONF_ENTRY_FLOW_MODE_ENFORCED,
+    CONF_ENTRY_HTTP_PROFILE_FORCED_2,
+    VERBOSE_LOG_LEVEL,
+)
 from music_assistant.helpers.util import (
     get_port_from_zeroconf,
     get_primary_ip_address_from_zeroconf,
@@ -30,7 +28,7 @@ from music_assistant.helpers.util import (
 from music_assistant.models.player_provider import PlayerProvider
 
 if TYPE_CHECKING:
-    from music_assistant_models.config_entries import ProviderConfig
+    from music_assistant_models.config_entries import ConfigEntry, ConfigValueType, ProviderConfig
     from music_assistant_models.provider import ProviderManifest
     from zeroconf.asyncio import AsyncServiceInfo
 
index b9b30201165079de8265d3975cced4178279cd6e..504cd1075be4bbee4ff8ece3f3873eed1d5386a7 100644 (file)
@@ -25,7 +25,6 @@ from music_assistant_models.errors import (
     MediaNotFoundError,
     ProviderUnavailableError,
 )
-from music_assistant_models.helpers.uri import parse_uri
 from music_assistant_models.media_items import (
     Artist,
     AudioFormat,
@@ -42,6 +41,7 @@ from music_assistant_models.streamdetails import StreamDetails
 
 from music_assistant.constants import MASS_LOGO, RESOURCES_DIR, VARIOUS_ARTISTS_FANART
 from music_assistant.helpers.tags import AudioTags, parse_tags
+from music_assistant.helpers.uri import parse_uri
 from music_assistant.models.music_provider import MusicProvider
 
 if TYPE_CHECKING:
index 58898ed8e07c3a39742cae768de04c5d6bfa64d6..549a7c269e226f3325439d0f86041478ffc02924 100644 (file)
@@ -12,15 +12,6 @@ from typing import TYPE_CHECKING, Any
 from uuid import UUID
 
 import pychromecast
-from music_assistant_models.config_entries import (
-    BASE_PLAYER_CONFIG_ENTRIES,
-    CONF_ENTRY_CROSSFADE_DURATION,
-    CONF_ENTRY_CROSSFADE_FLOW_MODE_REQUIRED,
-    CONF_ENTRY_ENFORCE_MP3,
-    ConfigEntry,
-    ConfigValueType,
-    create_sample_rates_config_entry,
-)
 from music_assistant_models.enums import MediaType, PlayerFeature, PlayerState, PlayerType
 from music_assistant_models.errors import PlayerUnavailableError
 from music_assistant_models.player import DeviceInfo, Player, PlayerMedia
@@ -30,16 +21,22 @@ from pychromecast.discovery import CastBrowser, SimpleCastListener
 from pychromecast.socket_client import CONNECTION_STATUS_CONNECTED, CONNECTION_STATUS_DISCONNECTED
 
 from music_assistant.constants import (
+    BASE_PLAYER_CONFIG_ENTRIES,
     CONF_ENFORCE_MP3,
+    CONF_ENTRY_CROSSFADE_DURATION,
+    CONF_ENTRY_CROSSFADE_FLOW_MODE_REQUIRED,
+    CONF_ENTRY_ENFORCE_MP3,
     CONF_PLAYERS,
     MASS_LOGO_ONLINE,
     VERBOSE_LOG_LEVEL,
+    create_sample_rates_config_entry,
 )
-from music_assistant.helpers import CastStatusListener, ChromecastInfo
 from music_assistant.models.player_provider import PlayerProvider
 
+from .helpers import CastStatusListener, ChromecastInfo
+
 if TYPE_CHECKING:
-    from music_assistant_models.config_entries import ProviderConfig
+    from music_assistant_models.config_entries import ConfigEntry, ConfigValueType, ProviderConfig
     from music_assistant_models.provider import ProviderManifest
     from pychromecast.controllers.media import MediaStatus
     from pychromecast.controllers.receiver import CastStatus
index 97857d013b709d06bfeef19f144e9560d466086b..10f651ee27e28242bf595d6826f5a6531a6e7def 100644 (file)
@@ -22,27 +22,29 @@ from async_upnp_client.client_factory import UpnpFactory
 from async_upnp_client.exceptions import UpnpError, UpnpResponseError
 from async_upnp_client.profiles.dlna import DmrDevice, TransportState
 from async_upnp_client.search import async_search
-from music_assistant_models.config_entries import (
+from music_assistant_models.config_entries import ConfigEntry, ConfigValueType
+from music_assistant_models.enums import ConfigEntryType, PlayerFeature, PlayerState, PlayerType
+from music_assistant_models.errors import PlayerUnavailableError
+from music_assistant_models.player import DeviceInfo, Player, PlayerMedia
+
+from music_assistant.constants import (
+    CONF_ENFORCE_MP3,
     CONF_ENTRY_CROSSFADE_DURATION,
     CONF_ENTRY_CROSSFADE_FLOW_MODE_REQUIRED,
     CONF_ENTRY_ENABLE_ICY_METADATA,
     CONF_ENTRY_ENFORCE_MP3,
     CONF_ENTRY_FLOW_MODE_DEFAULT_ENABLED,
     CONF_ENTRY_HTTP_PROFILE,
-    ConfigEntry,
-    ConfigValueType,
+    CONF_PLAYERS,
+    VERBOSE_LOG_LEVEL,
     create_sample_rates_config_entry,
 )
-from music_assistant_models.enums import ConfigEntryType, PlayerFeature, PlayerState, PlayerType
-from music_assistant_models.errors import PlayerUnavailableError
-from music_assistant_models.player import DeviceInfo, Player, PlayerMedia
-
-from music_assistant.constants import CONF_ENFORCE_MP3, CONF_PLAYERS, VERBOSE_LOG_LEVEL
-from music_assistant.helpers import DLNANotifyServer
 from music_assistant.helpers.didl_lite import create_didl_metadata
 from music_assistant.helpers.util import TaskManager
 from music_assistant.models.player_provider import PlayerProvider
 
+from .helpers import DLNANotifyServer
+
 if TYPE_CHECKING:
     from collections.abc import Awaitable, Callable, Coroutine, Sequence
 
index eaaa533bac304d8e7e6e410a54cf140b6e39b823..9b8a65c14adcabb4e169f1128a914cb6ca4050a7 100644 (file)
@@ -7,8 +7,8 @@ from typing import TYPE_CHECKING
 
 import aiohttp.client_exceptions
 from music_assistant_models.config_entries import ConfigEntry
-from music_assistant_models.enums import ConfigEntryType, ExternalID, ProviderFeature
-from music_assistant_models.media_items import ImageType, MediaItemImage, MediaItemMetadata
+from music_assistant_models.enums import ConfigEntryType, ExternalID, ImageType, ProviderFeature
+from music_assistant_models.media_items import MediaItemImage, MediaItemMetadata
 
 from music_assistant.controllers.cache import use_cache
 from music_assistant.helpers.app_vars import app_var
index aa7f1927c63a63cf44d7aa69181f6758089e6b99..317d8aa6203de8fa545fdc0a32630a539544662b 100644 (file)
@@ -14,15 +14,20 @@ import shortuuid
 import xmltodict
 from aiofiles.os import wrap
 from music_assistant_models.config_entries import ConfigEntry, ConfigValueOption, ConfigValueType
-from music_assistant_models.enums import ConfigEntryType, ExternalID, ProviderFeature, StreamType
+from music_assistant_models.enums import (
+    ConfigEntryType,
+    ContentType,
+    ExternalID,
+    ImageType,
+    ProviderFeature,
+    StreamType,
+)
 from music_assistant_models.errors import MediaNotFoundError, MusicAssistantError, SetupFailedError
 from music_assistant_models.media_items import (
     Album,
     Artist,
     AudioFormat,
     BrowseFolder,
-    ContentType,
-    ImageType,
     ItemMapping,
     MediaItemImage,
     MediaItemType,
index 4cbee92f88d23416e6cb8631a6795301213f7199..e773dcd0f4acfc7efa59b7ec4a4077cd6cbeef47 100644 (file)
@@ -8,20 +8,17 @@ import time
 from typing import TYPE_CHECKING
 
 from fullykiosk import FullyKiosk
-from music_assistant_models.config_entries import (
-    CONF_ENTRY_CROSSFADE,
-    CONF_ENTRY_CROSSFADE_DURATION,
-    CONF_ENTRY_ENFORCE_MP3_DEFAULT_ENABLED,
-    CONF_ENTRY_FLOW_MODE_ENFORCED,
-    ConfigEntry,
-    ConfigValueType,
-)
+from music_assistant_models.config_entries import ConfigEntry, ConfigValueType
 from music_assistant_models.enums import ConfigEntryType, PlayerFeature, PlayerState, PlayerType
 from music_assistant_models.errors import PlayerUnavailableError, SetupFailedError
 from music_assistant_models.player import DeviceInfo, Player, PlayerMedia
 
 from music_assistant.constants import (
     CONF_ENFORCE_MP3,
+    CONF_ENTRY_CROSSFADE,
+    CONF_ENTRY_CROSSFADE_DURATION,
+    CONF_ENTRY_ENFORCE_MP3_DEFAULT_ENABLED,
+    CONF_ENTRY_FLOW_MODE_ENFORCED,
     CONF_IP_ADDRESS,
     CONF_PASSWORD,
     CONF_PORT,
index cba0a6c87389022b9514fca2f7f34f87fbc9ce5c..5095749c35026c78f2b4974c7cc22c52bb113404 100644 (file)
@@ -12,21 +12,19 @@ from enum import IntFlag
 from typing import TYPE_CHECKING, Any
 
 from hass_client.exceptions import FailedCommand
-from music_assistant_models.config_entries import (
+from music_assistant_models.config_entries import ConfigEntry, ConfigValueOption, ConfigValueType
+from music_assistant_models.enums import ConfigEntryType, PlayerFeature, PlayerState, PlayerType
+from music_assistant_models.errors import SetupFailedError
+from music_assistant_models.player import DeviceInfo, Player, PlayerMedia
+
+from music_assistant.constants import (
     CONF_ENTRY_CROSSFADE_DURATION,
     CONF_ENTRY_CROSSFADE_FLOW_MODE_REQUIRED,
     CONF_ENTRY_ENABLE_ICY_METADATA,
     CONF_ENTRY_ENFORCE_MP3_DEFAULT_ENABLED,
     CONF_ENTRY_FLOW_MODE_ENFORCED,
     CONF_ENTRY_HTTP_PROFILE,
-    ConfigEntry,
-    ConfigValueOption,
-    ConfigValueType,
 )
-from music_assistant_models.enums import ConfigEntryType, PlayerFeature, PlayerState, PlayerType
-from music_assistant_models.errors import SetupFailedError
-from music_assistant_models.player import DeviceInfo, Player, PlayerMedia
-
 from music_assistant.helpers.datetime import from_iso_string
 from music_assistant.models.player_provider import PlayerProvider
 from music_assistant.providers.hass import DOMAIN as HASS_DOMAIN
index 09fb1eafcca00e66a9efaa8c1899030b4b28dd42..16c6fa8997fde542a99531fd5aed1af07f856638 100644 (file)
@@ -14,6 +14,7 @@ from libopensonic.errors import (
     SonicError,
 )
 from music_assistant_models.enums import (
+    AlbumType,
     ContentType,
     ImageType,
     MediaType,
@@ -23,7 +24,6 @@ from music_assistant_models.enums import (
 from music_assistant_models.errors import LoginFailed, MediaNotFoundError, ProviderPermissionDenied
 from music_assistant_models.media_items import (
     Album,
-    AlbumType,
     Artist,
     AudioFormat,
     ItemMapping,
index 8384da83e55af202c059b0add6577f7f253dc831..32afe391ac0269f737f04652296470f7fa1da3cd 100644 (file)
@@ -15,16 +15,10 @@ from typing import TYPE_CHECKING, Final, cast
 import shortuuid
 from aiohttp import web
 from music_assistant_models.config_entries import (
-    BASE_PLAYER_CONFIG_ENTRIES,
-    CONF_ENTRY_CROSSFADE,
-    CONF_ENTRY_CROSSFADE_DURATION,
-    CONF_ENTRY_FLOW_MODE_ENFORCED,
-    CONF_ENTRY_PLAYER_ICON_GROUP,
     ConfigEntry,
     ConfigValueOption,
     ConfigValueType,
     PlayerConfig,
-    create_sample_rates_config_entry,
 )
 from music_assistant_models.enums import (
     ConfigEntryType,
@@ -45,14 +39,20 @@ from music_assistant_models.media_items import AudioFormat
 from music_assistant_models.player import DeviceInfo, Player, PlayerMedia
 
 from music_assistant.constants import (
+    BASE_PLAYER_CONFIG_ENTRIES,
     CONF_CROSSFADE,
     CONF_CROSSFADE_DURATION,
     CONF_ENABLE_ICY_METADATA,
     CONF_ENFORCE_MP3,
+    CONF_ENTRY_CROSSFADE,
+    CONF_ENTRY_CROSSFADE_DURATION,
+    CONF_ENTRY_FLOW_MODE_ENFORCED,
+    CONF_ENTRY_PLAYER_ICON_GROUP,
     CONF_FLOW_MODE,
     CONF_GROUP_MEMBERS,
     CONF_HTTP_PROFILE,
     CONF_SAMPLE_RATES,
+    create_sample_rates_config_entry,
 )
 from music_assistant.controllers.streams import DEFAULT_STREAM_HEADERS
 from music_assistant.helpers.ffmpeg import get_ffmpeg_stream
index da407d36501801b1677e88a583b1e724108111ca..ee502f41bcda4d6978f4a25c1069e3ec4855a238 100644 (file)
@@ -10,7 +10,15 @@ from typing import TYPE_CHECKING
 
 from aiohttp import client_exceptions
 from music_assistant_models.config_entries import ConfigEntry, ConfigValueType
-from music_assistant_models.enums import ConfigEntryType, ExternalID, ProviderFeature, StreamType
+from music_assistant_models.enums import (
+    AlbumType,
+    ConfigEntryType,
+    ContentType,
+    ExternalID,
+    ImageType,
+    ProviderFeature,
+    StreamType,
+)
 from music_assistant_models.errors import (
     InvalidDataError,
     LoginFailed,
@@ -19,11 +27,8 @@ from music_assistant_models.errors import (
 )
 from music_assistant_models.media_items import (
     Album,
-    AlbumType,
     Artist,
     AudioFormat,
-    ContentType,
-    ImageType,
     MediaItemImage,
     MediaItemType,
     MediaType,
index 203cb44952e75267cf8f0bb8b01b999e4cd01615..a38b9f44a39bb77021f7c3856908db9376122b4f 100644 (file)
@@ -6,13 +6,18 @@ from collections.abc import AsyncGenerator, Sequence
 from typing import TYPE_CHECKING, cast
 
 from music_assistant_models.config_entries import ConfigEntry
-from music_assistant_models.enums import ConfigEntryType, LinkType, ProviderFeature, StreamType
+from music_assistant_models.enums import (
+    ConfigEntryType,
+    ContentType,
+    ImageType,
+    LinkType,
+    ProviderFeature,
+    StreamType,
+)
 from music_assistant_models.errors import MediaNotFoundError
 from music_assistant_models.media_items import (
     AudioFormat,
     BrowseFolder,
-    ContentType,
-    ImageType,
     MediaItemImage,
     MediaItemLink,
     MediaItemType,
index f362c9a69a9356be836b297384ee3be52004f046..e971c30ce74a60c453319f4d2cdb0beed8a5e8dc 100644 (file)
@@ -9,6 +9,7 @@ from music_assistant_models.config_entries import ConfigEntry, ConfigValueOption
 from music_assistant_models.enums import (
     ConfigEntryType,
     ContentType,
+    ImageType,
     LinkType,
     MediaType,
     ProviderFeature,
@@ -17,7 +18,6 @@ from music_assistant_models.enums import (
 from music_assistant_models.errors import LoginFailed, MediaNotFoundError
 from music_assistant_models.media_items import (
     AudioFormat,
-    ImageType,
     ItemMapping,
     MediaItemImage,
     MediaItemLink,
index fc9aaffbd94010694104f92403827f34c2155946..7394d17f07d47fa53cf996af97f27d1ee5b62783 100644 (file)
@@ -20,20 +20,10 @@ from aioslimproto.models import Preset as SlimPreset
 from aioslimproto.models import VisualisationType as SlimVisualisationType
 from aioslimproto.server import SlimServer
 from music_assistant_models.config_entries import (
-    CONF_ENTRY_CROSSFADE,
-    CONF_ENTRY_CROSSFADE_DURATION,
-    CONF_ENTRY_ENFORCE_MP3,
-    CONF_ENTRY_EQ_BASS,
-    CONF_ENTRY_EQ_MID,
-    CONF_ENTRY_EQ_TREBLE,
-    CONF_ENTRY_HTTP_PROFILE_FORCED_2,
-    CONF_ENTRY_OUTPUT_CHANNELS,
-    CONF_ENTRY_SYNC_ADJUST,
     ConfigEntry,
     ConfigValueOption,
     ConfigValueType,
     PlayerConfig,
-    create_sample_rates_config_entry,
 )
 from music_assistant_models.enums import (
     ConfigEntryType,
@@ -53,9 +43,19 @@ from music_assistant.constants import (
     CONF_CROSSFADE,
     CONF_CROSSFADE_DURATION,
     CONF_ENFORCE_MP3,
+    CONF_ENTRY_CROSSFADE,
+    CONF_ENTRY_CROSSFADE_DURATION,
+    CONF_ENTRY_ENFORCE_MP3,
+    CONF_ENTRY_EQ_BASS,
+    CONF_ENTRY_EQ_MID,
+    CONF_ENTRY_EQ_TREBLE,
+    CONF_ENTRY_HTTP_PROFILE_FORCED_2,
+    CONF_ENTRY_OUTPUT_CHANNELS,
+    CONF_ENTRY_SYNC_ADJUST,
     CONF_PORT,
     CONF_SYNC_ADJUST,
     VERBOSE_LOG_LEVEL,
+    create_sample_rates_config_entry,
 )
 from music_assistant.helpers.audio import get_ffmpeg_stream, get_player_filter_params
 from music_assistant.helpers.util import TaskManager
index 3a4df08cab3158756e02da81eeafe9b32a218c9c..b987c483a67d0a9463628d60c63b5f1142d6a991 100644 (file)
@@ -13,15 +13,7 @@ from contextlib import suppress
 from typing import TYPE_CHECKING, Final, cast
 
 from bidict import bidict
-from music_assistant_models.config_entries import (
-    CONF_ENTRY_CROSSFADE,
-    CONF_ENTRY_CROSSFADE_DURATION,
-    CONF_ENTRY_FLOW_MODE_ENFORCED,
-    ConfigEntry,
-    ConfigValueOption,
-    ConfigValueType,
-    create_sample_rates_config_entry,
-)
+from music_assistant_models.config_entries import ConfigEntry, ConfigValueOption, ConfigValueType
 from music_assistant_models.enums import (
     ConfigEntryType,
     ContentType,
@@ -39,6 +31,12 @@ from snapcast.control.client import Snapclient
 from zeroconf import NonUniqueNameException
 from zeroconf.asyncio import AsyncServiceInfo
 
+from music_assistant.constants import (
+    CONF_ENTRY_CROSSFADE,
+    CONF_ENTRY_CROSSFADE_DURATION,
+    CONF_ENTRY_FLOW_MODE_ENFORCED,
+    create_sample_rates_config_entry,
+)
 from music_assistant.helpers.audio import FFMpeg, get_ffmpeg_stream, get_player_filter_params
 from music_assistant.helpers.process import AsyncProcess, check_output
 from music_assistant.helpers.util import get_ip_pton
index 9a611df062a087725147cd3060aba445337c2048..636ec288a8cee01f784fccd70383a245b4007636 100644 (file)
@@ -16,24 +16,25 @@ from aiohttp import web
 from aiohttp.client_exceptions import ClientError
 from aiosonos.api.models import SonosCapability
 from aiosonos.utils import get_discovery_info
-from music_assistant_models.config_entries import (
-    CONF_ENTRY_CROSSFADE,
-    CONF_ENTRY_ENFORCE_MP3,
-    CONF_ENTRY_FLOW_MODE_HIDDEN_DISABLED,
-    ConfigEntry,
-    create_sample_rates_config_entry,
-)
+from music_assistant_models.config_entries import ConfigEntry
 from music_assistant_models.enums import ConfigEntryType, ContentType, ProviderFeature
 from music_assistant_models.errors import PlayerCommandFailed
 from music_assistant_models.player import DeviceInfo, PlayerMedia
 from zeroconf import ServiceStateChange
 
-from music_assistant.constants import MASS_LOGO_ONLINE, VERBOSE_LOG_LEVEL
-from music_assistant.helpers import get_primary_ip_address
+from music_assistant.constants import (
+    CONF_ENTRY_CROSSFADE,
+    CONF_ENTRY_ENFORCE_MP3,
+    CONF_ENTRY_FLOW_MODE_HIDDEN_DISABLED,
+    MASS_LOGO_ONLINE,
+    VERBOSE_LOG_LEVEL,
+    create_sample_rates_config_entry,
+)
 from music_assistant.helpers.tags import parse_tags
 from music_assistant.models.player_provider import PlayerProvider
 
 from .const import CONF_AIRPLAY_MODE
+from .helpers import get_primary_ip_address
 from .player import SonosPlayer
 
 if TYPE_CHECKING:
index d983d76060fa1533384db48823641092a7e05e87..7a3fdab49f0488e40a5b946e4ead86134cbf4925 100644 (file)
@@ -15,15 +15,7 @@ from collections import OrderedDict
 from dataclasses import dataclass, field
 from typing import TYPE_CHECKING
 
-from music_assistant_models.config_entries import (
-    CONF_ENTRY_CROSSFADE,
-    CONF_ENTRY_ENFORCE_MP3,
-    CONF_ENTRY_FLOW_MODE_HIDDEN_DISABLED,
-    CONF_ENTRY_HTTP_PROFILE_FORCED_1,
-    ConfigEntry,
-    ConfigValueType,
-    create_sample_rates_config_entry,
-)
+from music_assistant_models.config_entries import ConfigEntry, ConfigValueType
 from music_assistant_models.enums import (
     ConfigEntryType,
     PlayerFeature,
@@ -38,7 +30,16 @@ from soco import config as soco_config
 from soco import events_asyncio, zonegroupstate
 from soco.discovery import discover, scan_network
 
-from music_assistant.constants import CONF_CROSSFADE, CONF_ENFORCE_MP3, VERBOSE_LOG_LEVEL
+from music_assistant.constants import (
+    CONF_CROSSFADE,
+    CONF_ENFORCE_MP3,
+    CONF_ENTRY_CROSSFADE,
+    CONF_ENTRY_ENFORCE_MP3,
+    CONF_ENTRY_FLOW_MODE_HIDDEN_DISABLED,
+    CONF_ENTRY_HTTP_PROFILE_FORCED_1,
+    VERBOSE_LOG_LEVEL,
+    create_sample_rates_config_entry,
+)
 from music_assistant.helpers.didl_lite import create_didl_metadata
 from music_assistant.models.player_provider import PlayerProvider
 
index 29e42c3bdb5afc314d68efcfee0ae82888b71140..a0d0d525e77b03aba93ff0ba3999643bf1626bba 100644 (file)
@@ -30,9 +30,10 @@ from soco.core import (
 from soco.data_structures import DidlAudioBroadcast, DidlPlaylistContainer
 
 from music_assistant.constants import VERBOSE_LOG_LEVEL
-from music_assistant.helpers import SonosUpdateError, soco_error
 from music_assistant.helpers.datetime import utc
 
+from .helpers import SonosUpdateError, soco_error
+
 if TYPE_CHECKING:
     from soco.events_base import Event as SonosEvent
     from soco.events_base import SubscriptionBase
index 36013ca195d68aab68f735fff239fcb80c9f90e6..505f4984582da72eea542d49579a9c4943c0424c 100644 (file)
@@ -7,13 +7,17 @@ import time
 from typing import TYPE_CHECKING
 
 from music_assistant_models.config_entries import ConfigEntry, ConfigValueType
-from music_assistant_models.enums import ConfigEntryType, ProviderFeature, StreamType
+from music_assistant_models.enums import (
+    ConfigEntryType,
+    ContentType,
+    ImageType,
+    ProviderFeature,
+    StreamType,
+)
 from music_assistant_models.errors import InvalidDataError, LoginFailed
 from music_assistant_models.media_items import (
     Artist,
     AudioFormat,
-    ContentType,
-    ImageType,
     MediaItemImage,
     MediaType,
     Playlist,
index 3789a194ca1d305832560c66d5106a7a64aac45a..1d78f9ebb93baa26b550be8b4d5bc6f4eb607904 100644 (file)
@@ -11,7 +11,15 @@ from typing import TYPE_CHECKING, Any, cast
 from urllib.parse import urlencode
 
 from music_assistant_models.config_entries import ConfigEntry, ConfigValueType
-from music_assistant_models.enums import ConfigEntryType, ExternalID, ProviderFeature, StreamType
+from music_assistant_models.enums import (
+    AlbumType,
+    ConfigEntryType,
+    ContentType,
+    ExternalID,
+    ImageType,
+    ProviderFeature,
+    StreamType,
+)
 from music_assistant_models.errors import (
     AudioError,
     LoginFailed,
@@ -21,11 +29,8 @@ from music_assistant_models.errors import (
 )
 from music_assistant_models.media_items import (
     Album,
-    AlbumType,
     Artist,
     AudioFormat,
-    ContentType,
-    ImageType,
     MediaItemImage,
     MediaItemType,
     MediaType,
index ac37764aefa28fe06eeb456a3e2a11f16bc733b3..73777653be11a1f699c577dc832578b76dc1fca9 100644 (file)
@@ -7,13 +7,17 @@ from typing import TYPE_CHECKING, Any, cast
 
 import aiohttp.client_exceptions
 from music_assistant_models.config_entries import ConfigEntry
-from music_assistant_models.enums import ConfigEntryType, ExternalID, ProviderFeature
-from music_assistant_models.media_items import (
-    Album,
+from music_assistant_models.enums import (
     AlbumType,
-    Artist,
+    ConfigEntryType,
+    ExternalID,
     ImageType,
     LinkType,
+    ProviderFeature,
+)
+from music_assistant_models.media_items import (
+    Album,
+    Artist,
     MediaItemImage,
     MediaItemLink,
     MediaItemMetadata,
index b42725cb4b617f1da5fafdc4f2264facbb02a1a9..dedfa653b02a24d547805d25b32f957e9e349038 100644 (file)
@@ -16,6 +16,7 @@ from music_assistant_models.enums import (
     AlbumType,
     CacheCategory,
     ConfigEntryType,
+    ContentType,
     ExternalID,
     ImageType,
     MediaType,
@@ -27,7 +28,6 @@ from music_assistant_models.media_items import (
     Album,
     Artist,
     AudioFormat,
-    ContentType,
     ItemMapping,
     MediaItemImage,
     MediaItemType,
index 4e605c7102313456382716f261923b1bf2d751d5..83544115013428103374feb9610cdde9460e7240 100644 (file)
@@ -5,12 +5,16 @@ from __future__ import annotations
 from typing import TYPE_CHECKING
 
 from music_assistant_models.config_entries import ConfigEntry, ConfigValueType
-from music_assistant_models.enums import ConfigEntryType, ProviderFeature, StreamType
+from music_assistant_models.enums import (
+    ConfigEntryType,
+    ContentType,
+    ImageType,
+    ProviderFeature,
+    StreamType,
+)
 from music_assistant_models.errors import InvalidDataError, LoginFailed, MediaNotFoundError
 from music_assistant_models.media_items import (
     AudioFormat,
-    ContentType,
-    ImageType,
     MediaItemImage,
     MediaType,
     ProviderMapping,
index 75a6224254915eb996c98dc871817e397c7f7f68..b0bd73a70456c2f317e3a522d6f18b5983929855 100644 (file)
@@ -11,7 +11,14 @@ from urllib.parse import unquote
 
 import yt_dlp
 from music_assistant_models.config_entries import ConfigEntry, ConfigValueType
-from music_assistant_models.enums import ConfigEntryType, ProviderFeature, StreamType
+from music_assistant_models.enums import (
+    AlbumType,
+    ConfigEntryType,
+    ContentType,
+    ImageType,
+    ProviderFeature,
+    StreamType,
+)
 from music_assistant_models.errors import (
     InvalidDataError,
     LoginFailed,
@@ -20,11 +27,8 @@ from music_assistant_models.errors import (
 )
 from music_assistant_models.media_items import (
     Album,
-    AlbumType,
     Artist,
     AudioFormat,
-    ContentType,
-    ImageType,
     ItemMapping,
     MediaItemImage,
     MediaItemType,
@@ -38,7 +42,10 @@ from music_assistant_models.streamdetails import StreamDetails
 from ytmusicapi.constants import SUPPORTED_LANGUAGES
 from ytmusicapi.exceptions import YTMusicServerError
 
-from music_assistant.helpers import (
+from music_assistant.helpers.auth import AuthenticationHelper
+from music_assistant.models.music_provider import MusicProvider
+
+from .helpers import (
     add_remove_playlist_tracks,
     get_album,
     get_artist,
@@ -56,8 +63,6 @@ from music_assistant.helpers import (
     refresh_oauth_token,
     search,
 )
-from music_assistant.helpers.auth import AuthenticationHelper
-from music_assistant.models.music_provider import MusicProvider
 
 if TYPE_CHECKING:
     from music_assistant_models.config_entries import ProviderConfig
index 1cff7a1744bc6ff6fcb3bea63ab7c0d075c48ebd..bf176237b7b7636a3c9eaa59a019eaa43a4fb9af 100755 (executable)
@@ -23,4 +23,5 @@ pip install --upgrade pip
 pip install --upgrade uv
 uv pip install -e "."
 uv pip install -e ".[test]"
+uv pip install -r requirements_all.txt
 pre-commit install