import aiohttp
from asyncio_throttle import Throttler
+
from music_assistant.helpers.typing import MusicAssistant
# TODO: add support for personal api keys ?
import aiohttp
from asyncio_throttle import Throttler
+
from music_assistant.helpers.cache import cached
from music_assistant.helpers.compare import compare_strings, get_compare_string
from music_assistant.helpers.typing import MusicAssistant
from typing import AsyncGenerator, List, Optional, Tuple
import aiofiles
+
from music_assistant.constants import EventType
from music_assistant.helpers.process import AsyncProcess, check_output
from music_assistant.helpers.typing import MusicAssistant, QueueItem
from databases import Database as Db
from databases import DatabaseURL
+
from music_assistant.helpers.typing import MusicAssistant
# pylint: disable=invalid-name
from io import BytesIO
+from PIL import Image
+
from music_assistant.helpers.typing import MusicAssistant
from music_assistant.models.media_items import ItemMapping, MediaItemType, MediaType
-from PIL import Image
async def create_thumbnail(mass: MusicAssistant, url, size: int = 150) -> bytes:
import aiohttp
from databases import DatabaseURL
+
from music_assistant.constants import EventType
from music_assistant.controllers.metadata import MetaDataController
from music_assistant.controllers.music import MusicController
from typing import Any, Dict, List, Mapping, Optional, Union
from mashumaro import DataClassDictMixin
+
from music_assistant.helpers.json import json
from music_assistant.helpers.util import create_sort_name
from typing import TYPE_CHECKING, Any, Dict, List
from mashumaro import DataClassDictMixin
+
from music_assistant.constants import EventType
from music_assistant.helpers.typing import MusicAssistant
from music_assistant.helpers.util import get_changed_keys
from uuid import uuid4
from mashumaro import DataClassDictMixin
+
from music_assistant.constants import EventType
from music_assistant.helpers.audio import get_stream_details
from music_assistant.helpers.typing import MusicAssistant
from typing import List, Optional, Tuple
import aiofiles
+from tinytag import TinyTag
+
from music_assistant.helpers.compare import compare_strings, get_compare_string
from music_assistant.helpers.util import parse_title_and_version, try_parse_int
from music_assistant.models.media_items import (
Track,
)
from music_assistant.models.provider import MusicProvider
-from tinytag import TinyTag
def split_items(org_str: str) -> Tuple[str]:
import aiohttp
from asyncio_throttle import Throttler
+
from music_assistant.constants import EventType
from music_assistant.helpers.app_vars import ( # pylint: disable=no-name-in-module
get_app_var,
import aiohttp
from asyncio_throttle import Throttler
+
from music_assistant.helpers.app_vars import ( # noqa # pylint: disable=no-name-in-module
get_app_var,
)
from typing import List, Optional
from asyncio_throttle import Throttler
+
from music_assistant.models.media_items import (
ContentType,
MediaItemProviderId,