from functools import reduce
import aiosqlite
-from .utils import run_periodic, LOGGER
+from music_assistant.utils import run_periodic, LOGGER
class Cache(object):
import os
import shutil
-from .utils import try_load_json_file, json, LOGGER
-from .constants import CONF_KEY_BASE, CONF_KEY_PLAYERSETTINGS, \
+from music_assistant.utils import try_load_json_file, json, LOGGER
+from music_assistant.constants import CONF_KEY_BASE, CONF_KEY_PLAYERSETTINGS, \
CONF_KEY_MUSICPROVIDERS, CONF_KEY_PLAYERPROVIDERS, EVENT_CONFIG_CHANGED
from typing import List
import aiosqlite
-from .utils import LOGGER, get_sort_name, try_parse_int
-from .models.media_types import MediaType, Artist, Album, Track, Playlist, Radio
+from music_assistant.utils import LOGGER, get_sort_name, try_parse_int
+from music_assistant.models.media_types import MediaType, Artist, Album, Track, Playlist, Radio
def commit_guard(func):
import copy
import slugify as slug
import json
-from .utils import run_periodic, LOGGER, IS_HASSIO, try_parse_int
-from .models.media_types import Track
-from .constants import CONF_ENABLED, CONF_URL, CONF_TOKEN, EVENT_PLAYER_CHANGED, EVENT_PLAYER_ADDED, EVENT_HASS_ENTITY_CHANGED
+from music_assistant.utils import run_periodic, LOGGER, IS_HASSIO, try_parse_int
+from music_assistant.models.media_types import Track
+from music_assistant.constants import CONF_ENABLED, CONF_URL, CONF_TOKEN, EVENT_PLAYER_CHANGED, EVENT_PLAYER_ADDED, EVENT_HASS_ENTITY_CHANGED
CONF_KEY = 'homeassistant'
CONF_PUBLISH_PLAYERS = "publish_players"
import gc
import shlex
-from .constants import EVENT_STREAM_STARTED, EVENT_STREAM_ENDED
-from .utils import LOGGER, try_parse_int, get_ip, run_async_background_task, run_periodic, get_folder_size
-from .models.media_types import TrackQuality, MediaType
-from .models.playerstate import PlayerState
+from music_assistant.constants import EVENT_STREAM_STARTED, EVENT_STREAM_ENDED
+from music_assistant.utils import LOGGER, try_parse_int, get_ip, run_async_background_task, run_periodic, get_folder_size
+from music_assistant.models.media_types import TrackQuality, MediaType
+from music_assistant.models.playerstate import PlayerState
class HTTPStreamer():
from yarl import URL
import re
-from .utils import LOGGER, compare_strings, get_compare_string
-from .cache import use_cache
+from music_assistant.utils import LOGGER, compare_strings, get_compare_string
+from music_assistant.cache import use_cache
LUCENE_SPECIAL = r'([+\-&|!(){}\[\]\^"~*?:\\\/])'
-from .media_types import *
-from .musicprovider import MusicProvider
-from .player_queue import QueueItem, PlayerQueue
-from .player import Player
-from .playerstate import PlayerState
-from .playerprovider import PlayerProvider
\ No newline at end of file
+from music_assistant.models.media_types import *
+from music_assistant.models.musicprovider import MusicProvider
+from music_assistant.models.player_queue import QueueItem, PlayerQueue
+from music_assistant.models.player import Player
+from music_assistant.models.playerstate import PlayerState
+from music_assistant.models.playerprovider import PlayerProvider
\ No newline at end of file
import asyncio
from typing import List
-from ..utils import LOGGER, compare_strings
-from ..cache import cached_iterator, cached
-from .media_types import Album, Artist, Track, Playlist, MediaType, Radio
+from music_assistant.utils import LOGGER, compare_strings
+from music_assistant.cache import cached_iterator, cached
+from music_assistant.models.media_types import Album, Artist, Track, Playlist, MediaType, Radio
class MusicProvider():
"""
import time
-from ..utils import try_parse_int, try_parse_bool, try_parse_float
-from ..constants import EVENT_PLAYER_CHANGED
-from .player_queue import PlayerQueue
-from .playerstate import PlayerState
+from music_assistant.utils import try_parse_int, try_parse_bool, try_parse_float
+from music_assistant.constants import EVENT_PLAYER_CHANGED
+from music_assistant.models.player_queue import PlayerQueue
+from music_assistant.models.playerstate import PlayerState
# pylint: disable=too-many-instance-attributes
# pylint: disable=too-many-public-methods
import uuid
from enum import Enum
-from ..utils import LOGGER, serialize_values
-from ..constants import EVENT_PLAYBACK_STARTED, EVENT_PLAYBACK_STOPPED, \
+from music_assistant.utils import LOGGER, serialize_values
+from music_assistant.constants import EVENT_PLAYBACK_STARTED, EVENT_PLAYBACK_STOPPED, \
EVENT_QUEUE_UPDATED, EVENT_QUEUE_ITEMS_UPDATED
-from .media_types import Track
-from .playerstate import PlayerState
+from music_assistant.models.media_types import Track
+from music_assistant.models.playerstate import PlayerState
# pylint: disable=too-many-instance-attributes
# pylint: disable=too-many-public-methods
import asyncio
from enum import Enum
from typing import List
-from ..utils import run_periodic, LOGGER
-from ..constants import CONF_ENABLED
-from .player_queue import PlayerQueue
-from .media_types import Track
-from .player import Player
+from music_assistant.utils import run_periodic, LOGGER
+from music_assistant.constants import CONF_ENABLED
+from music_assistant.models.player_queue import PlayerQueue
+from music_assistant.models.media_types import Track
+from music_assistant.models.player import Player
class PlayerProvider():
from PIL import Image
import aiohttp
-from .utils import run_periodic, LOGGER, load_provider_modules
-from .models.media_types import MediaItem, MediaType, Track, Artist, Album, Playlist, Radio
-from .constants import CONF_KEY_MUSICPROVIDERS, EVENT_MUSIC_SYNC_STATUS
+from music_assistant.utils import run_periodic, LOGGER, load_provider_modules
+from music_assistant.models.media_types import MediaItem, MediaType, Track, Artist, Album, Playlist, Radio
+from music_assistant.constants import CONF_KEY_MUSICPROVIDERS, EVENT_MUSIC_SYNC_STATUS
def sync_task(desc):
import base64
import taglib
-from ..utils import run_periodic, LOGGER, parse_title_and_version
-from ..models import MusicProvider, MediaType, TrackQuality, AlbumType, Artist, Album, Track, Playlist
-from ..constants import CONF_ENABLED
+from music_assistant.utils import run_periodic, LOGGER, parse_title_and_version
+from music_assistant.models import MusicProvider, MediaType, TrackQuality, AlbumType, Artist, Album, Track, Playlist
+from music_assistant.constants import CONF_ENABLED
PROV_NAME = 'Local files and playlists'
PROV_CLASS = 'FileProvider'
import aiohttp
from asyncio_throttle import Throttler
-from ..utils import LOGGER, parse_title_and_version
-from ..app_vars import get_app_var
-from ..models import MusicProvider, MediaType, TrackQuality, \
+from music_assistant.utils import LOGGER, parse_title_and_version
+from music_assistant.app_vars import get_app_var
+from music_assistant.models import MusicProvider, MediaType, TrackQuality, \
AlbumType, Artist, Album, Track, Playlist
-from ..constants import CONF_USERNAME, CONF_PASSWORD, CONF_ENABLED, \
+from music_assistant.constants import CONF_USERNAME, CONF_PASSWORD, CONF_ENABLED, \
CONF_TYPE_PASSWORD, EVENT_STREAM_STARTED, EVENT_PLAYBACK_STOPPED
PROV_NAME = 'Qobuz'
from asyncio_throttle import Throttler
import aiohttp
-from ..utils import LOGGER, parse_title_and_version, json
-from ..app_vars import get_app_var
-from ..models import MusicProvider, MediaType, TrackQuality, \
+from music_assistant.utils import LOGGER, parse_title_and_version, json
+from music_assistant.app_vars import get_app_var
+from music_assistant.models import MusicProvider, MediaType, TrackQuality, \
AlbumType, Artist, Album, Track, Playlist
-from ..constants import CONF_USERNAME, CONF_PASSWORD, CONF_ENABLED, CONF_TYPE_PASSWORD
+from music_assistant.constants import CONF_USERNAME, CONF_PASSWORD, CONF_ENABLED, CONF_TYPE_PASSWORD
PROV_NAME = 'Spotify'
PROV_CLASS = 'SpotifyProvider'
from asyncio_throttle import Throttler
import aiohttp
-from ..utils import LOGGER
-from ..models import MusicProvider, MediaType, TrackQuality, Radio
-from ..constants import CONF_USERNAME, CONF_PASSWORD, CONF_ENABLED, CONF_TYPE_PASSWORD
+from music_assistant.utils import LOGGER
+from music_assistant.models import MusicProvider, MediaType, TrackQuality, Radio
+from music_assistant.constants import CONF_USERNAME, CONF_PASSWORD, CONF_ENABLED, CONF_TYPE_PASSWORD
PROV_NAME = 'TuneIn Radio'
import os
from typing import List
-from .constants import CONF_KEY_PLAYERPROVIDERS, EVENT_PLAYER_ADDED, \
+from music_assistant.constants import CONF_KEY_PLAYERPROVIDERS, EVENT_PLAYER_ADDED, \
EVENT_PLAYER_REMOVED, EVENT_HASS_ENTITY_CHANGED
-from .utils import LOGGER, load_provider_modules, iter_items
-from .models.media_types import MediaItem, MediaType
-from .models.player_queue import QueueItem, QueueOption
-from .models.player import Player
+from music_assistant.utils import LOGGER, load_provider_modules, iter_items
+from music_assistant.models.media_types import MediaItem, MediaType
+from music_assistant.models.player_queue import QueueItem, QueueOption
+from music_assistant.models.player import Player
BASE_DIR = os.path.dirname(os.path.abspath(__file__))
MODULES_PATH = os.path.join(BASE_DIR, "playerproviders")
import time
import uuid
-from ..utils import run_periodic, LOGGER, try_parse_int
-from ..models.playerprovider import PlayerProvider
-from ..models.player import Player, PlayerState
-from ..models.playerstate import PlayerState
-from ..models.player_queue import QueueItem, PlayerQueue
-from ..constants import CONF_ENABLED, CONF_HOSTNAME, CONF_PORT
+from music_assistant.utils import run_periodic, LOGGER, try_parse_int
+from music_assistant.models.playerprovider import PlayerProvider
+from music_assistant.models.player import Player, PlayerState
+from music_assistant.models.playerstate import PlayerState
+from music_assistant.models.player_queue import QueueItem, PlayerQueue
+from music_assistant.constants import CONF_ENABLED, CONF_HOSTNAME, CONF_PORT
PROV_ID = 'chromecast'
PROV_NAME = 'Chromecast'
import types
import time
-from ..utils import run_periodic, LOGGER, try_parse_int
-from ..models.playerprovider import PlayerProvider
-from ..models.player import Player, PlayerState
-from ..models.playerstate import PlayerState
-from ..models.player_queue import QueueItem, PlayerQueue
-from ..constants import CONF_ENABLED, CONF_HOSTNAME, CONF_PORT
+from music_assistant.utils import run_periodic, LOGGER, try_parse_int
+from music_assistant.models.playerprovider import PlayerProvider
+from music_assistant.models.player import Player, PlayerState
+from music_assistant.models.playerstate import PlayerState
+from music_assistant.models.player_queue import QueueItem, PlayerQueue
+from music_assistant.constants import CONF_ENABLED, CONF_HOSTNAME, CONF_PORT
PROV_ID = 'sonos'
PROV_NAME = 'Sonos'
import random
import sys
import socket
-from ..utils import run_periodic, LOGGER, try_parse_int, get_ip, get_hostname
-from ..models import PlayerProvider, Player, PlayerState, MediaType, TrackQuality, AlbumType, Artist, Album, Track, Playlist
-from ..constants import CONF_ENABLED
+from music_assistant.utils import run_periodic, LOGGER, try_parse_int, get_ip, get_hostname
+from music_assistant.models import PlayerProvider, Player, PlayerState, MediaType, TrackQuality, AlbumType, Artist, Album, Track, Playlist
+from music_assistant.constants import CONF_ENABLED
PROV_ID = 'squeezebox'
import random
import sys
import socket
-from ..utils import run_periodic, LOGGER, try_parse_int, get_ip, get_hostname
-from ..models import PlayerProvider, Player, PlayerState, MediaType, TrackQuality, AlbumType, Artist, Album, Track, Playlist
-from ..constants import CONF_ENABLED
+from music_assistant.utils import run_periodic, LOGGER, try_parse_int, get_ip, get_hostname
+from music_assistant.models import PlayerProvider, Player, PlayerState, MediaType, TrackQuality, AlbumType, Artist, Album, Track, Playlist
+from music_assistant.constants import CONF_ENABLED
PROV_ID = 'webplayer'
import json
LOGGER = logging.getLogger('music_assistant')
-from .constants import CONF_KEY_MUSICPROVIDERS, CONF_ENABLED
+from music_assistant.constants import CONF_KEY_MUSICPROVIDERS, CONF_ENABLED
IS_HASSIO = os.path.isfile('/data/options.json')
import ssl
import concurrent
import threading
-from .models.media_types import MediaItem, MediaType, media_type_from_string
-from .utils import run_periodic, LOGGER, IS_HASSIO, run_async_background_task, get_ip, json_serializer
-from .constants import CONF_KEY_PLAYERSETTINGS, CONF_KEY_MUSICPROVIDERS, CONF_KEY_PLAYERPROVIDERS
+from music_assistant.models.media_types import MediaItem, MediaType, media_type_from_string
+from music_assistant.utils import run_periodic, LOGGER, IS_HASSIO, run_async_background_task, get_ip, json_serializer
+from music_assistant.constants import CONF_KEY_PLAYERSETTINGS, CONF_KEY_MUSICPROVIDERS, CONF_KEY_PLAYERPROVIDERS
CONF_KEY = 'web'
argparse
cytoolz
-aiohttp[speedups]
+aiohttp
requests
spotify_token
protobuf