From 679465e18971aef7c85f707dacd8b633190aecbf Mon Sep 17 00:00:00 2001 From: Marcel van der Veldt Date: Sat, 27 Jan 2024 11:53:37 +0100 Subject: [PATCH] fix lint --- music_assistant/__main__.py | 1 + music_assistant/client/__init__.py | 1 + music_assistant/client/client.py | 1 + music_assistant/client/connection.py | 1 + music_assistant/client/exceptions.py | 1 + music_assistant/client/music.py | 1 + music_assistant/client/players.py | 1 + music_assistant/common/helpers/datetime.py | 1 + music_assistant/common/helpers/util.py | 1 + .../common/models/config_entries.py | 1 + music_assistant/common/models/enums.py | 1 + music_assistant/common/models/media_items.py | 1 + music_assistant/common/models/player.py | 1 + music_assistant/common/models/player_queue.py | 1 + music_assistant/common/models/queue_item.py | 1 + music_assistant/constants.py | 6 ++-- music_assistant/server/controllers/cache.py | 1 + music_assistant/server/controllers/config.py | 1 + .../server/controllers/media/albums.py | 1 + .../server/controllers/media/artists.py | 1 + .../server/controllers/media/base.py | 1 + .../server/controllers/media/playlists.py | 1 + .../server/controllers/media/radio.py | 1 + .../server/controllers/media/tracks.py | 1 + .../server/controllers/metadata.py | 1 + music_assistant/server/controllers/music.py | 1 + .../server/controllers/player_queues.py | 1 + music_assistant/server/controllers/players.py | 1 + music_assistant/server/controllers/streams.py | 1 + .../server/controllers/webserver.py | 1 + music_assistant/server/helpers/api.py | 1 + music_assistant/server/helpers/audio.py | 1 + music_assistant/server/helpers/auth.py | 1 + music_assistant/server/helpers/compare.py | 1 + music_assistant/server/helpers/database.py | 1 + music_assistant/server/helpers/didl_lite.py | 1 + music_assistant/server/helpers/images.py | 1 + music_assistant/server/helpers/logging.py | 7 ++-- music_assistant/server/helpers/playlists.py | 1 + music_assistant/server/helpers/process.py | 1 + music_assistant/server/helpers/tags.py | 1 + music_assistant/server/helpers/util.py | 1 + music_assistant/server/helpers/webserver.py | 1 + music_assistant/server/models/__init__.py | 1 + .../server/models/core_controller.py | 1 + .../server/models/metadata_provider.py | 1 + .../server/models/music_provider.py | 1 + .../server/models/player_provider.py | 1 + music_assistant/server/models/plugin.py | 1 + music_assistant/server/models/provider.py | 1 + .../server/providers/airplay/__init__.py | 1 + .../server/providers/chromecast/__init__.py | 13 ++++---- .../server/providers/chromecast/helpers.py | 1 + .../server/providers/deezer/__init__.py | 1 + .../server/providers/deezer/gw_client.py | 1 + .../server/providers/dlna/__init__.py | 1 + .../server/providers/dlna/helpers.py | 1 + .../server/providers/fanarttv/__init__.py | 8 +++-- .../providers/filesystem_local/__init__.py | 1 + .../server/providers/filesystem_local/base.py | 1 + .../providers/filesystem_local/helpers.py | 1 + .../providers/filesystem_smb/__init__.py | 1 + .../server/providers/musicbrainz/__init__.py | 8 +++-- .../server/providers/opensubsonic/__init__.py | 1 + .../providers/opensubsonic/sonic_provider.py | 1 + .../server/providers/plex/__init__.py | 7 ++-- .../server/providers/plex/helpers.py | 1 + .../server/providers/qobuz/__init__.py | 8 +++-- .../server/providers/radiobrowser/__init__.py | 1 + .../server/providers/slimproto/__init__.py | 9 ++++-- .../server/providers/slimproto/cli.py | 11 +++---- .../server/providers/slimproto/models.py | 7 ++-- .../server/providers/snapcast/__init__.py | 1 + .../server/providers/sonos/__init__.py | 1 + .../server/providers/soundcloud/__init__.py | 1 + .../soundcloudpy/asyncsoundcloudpy.py | 1 + .../server/providers/spotify/__init__.py | 1 + .../server/providers/theaudiodb/__init__.py | 8 +++-- .../server/providers/tidal/helpers.py | 32 ++++++++++++------- .../server/providers/tunein/__init__.py | 8 +++-- .../server/providers/ugp/__init__.py | 1 + .../server/providers/url/__init__.py | 1 + .../server/providers/ytmusic/__init__.py | 1 + music_assistant/server/server.py | 1 + script/profiler.py | 1 + 85 files changed, 149 insertions(+), 55 deletions(-) diff --git a/music_assistant/__main__.py b/music_assistant/__main__.py index 63d7d9b8..6ba281a7 100644 --- a/music_assistant/__main__.py +++ b/music_assistant/__main__.py @@ -1,4 +1,5 @@ """Run the Music Assistant Server.""" + from __future__ import annotations import argparse diff --git a/music_assistant/client/__init__.py b/music_assistant/client/__init__.py index 5b1088cc..731b8d52 100644 --- a/music_assistant/client/__init__.py +++ b/music_assistant/client/__init__.py @@ -1,2 +1,3 @@ """Music Assistant Client: Manage a Music Assistant server remotely.""" + from .client import MusicAssistantClient # noqa: F401 diff --git a/music_assistant/client/client.py b/music_assistant/client/client.py index 1700553d..af79e886 100644 --- a/music_assistant/client/client.py +++ b/music_assistant/client/client.py @@ -1,4 +1,5 @@ """Music Assistant Client: Manage a Music Assistant server remotely.""" + from __future__ import annotations import asyncio diff --git a/music_assistant/client/connection.py b/music_assistant/client/connection.py index b77f71ae..0fb1c49b 100644 --- a/music_assistant/client/connection.py +++ b/music_assistant/client/connection.py @@ -1,4 +1,5 @@ """"Connect o a remote Music Assistant Server using the default Websocket API.""" + from __future__ import annotations import logging diff --git a/music_assistant/client/exceptions.py b/music_assistant/client/exceptions.py index a9b17157..fb1349c3 100644 --- a/music_assistant/client/exceptions.py +++ b/music_assistant/client/exceptions.py @@ -1,4 +1,5 @@ """Client-specific Exceptions for Music Assistant.""" + from __future__ import annotations diff --git a/music_assistant/client/music.py b/music_assistant/client/music.py index 21618865..23630398 100644 --- a/music_assistant/client/music.py +++ b/music_assistant/client/music.py @@ -1,4 +1,5 @@ """Handle Music/library related endpoints for Music Assistant.""" + from __future__ import annotations import urllib.parse diff --git a/music_assistant/client/players.py b/music_assistant/client/players.py index 6e6e1f8f..b8ccda6b 100644 --- a/music_assistant/client/players.py +++ b/music_assistant/client/players.py @@ -1,4 +1,5 @@ """Handle player related endpoints for Music Assistant.""" + from __future__ import annotations from collections.abc import Iterator diff --git a/music_assistant/common/helpers/datetime.py b/music_assistant/common/helpers/datetime.py index 0006b65b..f0b262a7 100644 --- a/music_assistant/common/helpers/datetime.py +++ b/music_assistant/common/helpers/datetime.py @@ -1,4 +1,5 @@ """Helpers for date and time.""" + from __future__ import annotations import datetime diff --git a/music_assistant/common/helpers/util.py b/music_assistant/common/helpers/util.py index 89eef728..2bd40eca 100755 --- a/music_assistant/common/helpers/util.py +++ b/music_assistant/common/helpers/util.py @@ -1,4 +1,5 @@ """Helper and utility functions.""" + from __future__ import annotations import asyncio diff --git a/music_assistant/common/models/config_entries.py b/music_assistant/common/models/config_entries.py index b6e52596..f853f6f1 100644 --- a/music_assistant/common/models/config_entries.py +++ b/music_assistant/common/models/config_entries.py @@ -1,4 +1,5 @@ """Model and helpers for Config entries.""" + from __future__ import annotations import logging diff --git a/music_assistant/common/models/enums.py b/music_assistant/common/models/enums.py index af05b17e..be9fd483 100644 --- a/music_assistant/common/models/enums.py +++ b/music_assistant/common/models/enums.py @@ -1,4 +1,5 @@ """All enums used by the Music Assistant models.""" + from __future__ import annotations from enum import StrEnum diff --git a/music_assistant/common/models/media_items.py b/music_assistant/common/models/media_items.py index aace45cb..53df3831 100755 --- a/music_assistant/common/models/media_items.py +++ b/music_assistant/common/models/media_items.py @@ -1,4 +1,5 @@ """Models and helpers for media items.""" + from __future__ import annotations from dataclasses import dataclass, field, fields diff --git a/music_assistant/common/models/player.py b/music_assistant/common/models/player.py index 157a1674..86f85016 100644 --- a/music_assistant/common/models/player.py +++ b/music_assistant/common/models/player.py @@ -1,4 +1,5 @@ """Model(s) for Player.""" + from __future__ import annotations import time diff --git a/music_assistant/common/models/player_queue.py b/music_assistant/common/models/player_queue.py index eca83722..30b9cae7 100644 --- a/music_assistant/common/models/player_queue.py +++ b/music_assistant/common/models/player_queue.py @@ -1,4 +1,5 @@ """Model(s) for PlayerQueue.""" + from __future__ import annotations import time diff --git a/music_assistant/common/models/queue_item.py b/music_assistant/common/models/queue_item.py index 34729b44..d59eda26 100644 --- a/music_assistant/common/models/queue_item.py +++ b/music_assistant/common/models/queue_item.py @@ -1,4 +1,5 @@ """Model a QueueItem.""" + from __future__ import annotations from dataclasses import dataclass diff --git a/music_assistant/constants.py b/music_assistant/constants.py index ab5b8108..57155dc6 100755 --- a/music_assistant/constants.py +++ b/music_assistant/constants.py @@ -73,9 +73,9 @@ DB_TABLE_THUMBS: Final[str] = "thumbnails" DB_TABLE_PROVIDER_MAPPINGS: Final[str] = "provider_mappings" # all other -MASS_LOGO_ONLINE: Final[ - str -] = "https://github.com/home-assistant/brands/raw/master/custom_integrations/mass/icon%402x.png" +MASS_LOGO_ONLINE: Final[str] = ( + "https://github.com/home-assistant/brands/raw/master/custom_integrations/mass/icon%402x.png" +) ENCRYPT_SUFFIX = "_encrypted_" SECURE_STRING_SUBSTITUTE = "this_value_is_encrypted" CONFIGURABLE_CORE_CONTROLLERS = ( diff --git a/music_assistant/server/controllers/cache.py b/music_assistant/server/controllers/cache.py index fdb2cddc..d0995c6b 100644 --- a/music_assistant/server/controllers/cache.py +++ b/music_assistant/server/controllers/cache.py @@ -1,4 +1,5 @@ """Provides a simple stateless caching system.""" + from __future__ import annotations import asyncio diff --git a/music_assistant/server/controllers/config.py b/music_assistant/server/controllers/config.py index 8e3a983d..0b2ddc3c 100644 --- a/music_assistant/server/controllers/config.py +++ b/music_assistant/server/controllers/config.py @@ -1,4 +1,5 @@ """Logic to handle storage of persistent (configuration) settings.""" + from __future__ import annotations import asyncio diff --git a/music_assistant/server/controllers/media/albums.py b/music_assistant/server/controllers/media/albums.py index 10d9c75c..945d490d 100644 --- a/music_assistant/server/controllers/media/albums.py +++ b/music_assistant/server/controllers/media/albums.py @@ -1,4 +1,5 @@ """Manage MediaItems of type Album.""" + from __future__ import annotations import asyncio diff --git a/music_assistant/server/controllers/media/artists.py b/music_assistant/server/controllers/media/artists.py index 6e8cbd15..55794d94 100644 --- a/music_assistant/server/controllers/media/artists.py +++ b/music_assistant/server/controllers/media/artists.py @@ -1,4 +1,5 @@ """Manage MediaItems of type Artist.""" + from __future__ import annotations import asyncio diff --git a/music_assistant/server/controllers/media/base.py b/music_assistant/server/controllers/media/base.py index 56ce86af..0833f4c4 100644 --- a/music_assistant/server/controllers/media/base.py +++ b/music_assistant/server/controllers/media/base.py @@ -1,4 +1,5 @@ """Base (ABC) MediaType specific controller.""" + from __future__ import annotations import logging diff --git a/music_assistant/server/controllers/media/playlists.py b/music_assistant/server/controllers/media/playlists.py index ad9d4762..2659aa15 100644 --- a/music_assistant/server/controllers/media/playlists.py +++ b/music_assistant/server/controllers/media/playlists.py @@ -1,4 +1,5 @@ """Manage MediaItems of type Playlist.""" + from __future__ import annotations import asyncio diff --git a/music_assistant/server/controllers/media/radio.py b/music_assistant/server/controllers/media/radio.py index 4ac7c0ad..ccbf9271 100644 --- a/music_assistant/server/controllers/media/radio.py +++ b/music_assistant/server/controllers/media/radio.py @@ -1,4 +1,5 @@ """Manage MediaItems of type Radio.""" + from __future__ import annotations import asyncio diff --git a/music_assistant/server/controllers/media/tracks.py b/music_assistant/server/controllers/media/tracks.py index 4f3de56a..4f00d267 100644 --- a/music_assistant/server/controllers/media/tracks.py +++ b/music_assistant/server/controllers/media/tracks.py @@ -1,4 +1,5 @@ """Manage MediaItems of type Track.""" + from __future__ import annotations import asyncio diff --git a/music_assistant/server/controllers/metadata.py b/music_assistant/server/controllers/metadata.py index 58d34ef7..f8e15bc1 100755 --- a/music_assistant/server/controllers/metadata.py +++ b/music_assistant/server/controllers/metadata.py @@ -1,4 +1,5 @@ """All logic for metadata retrieval.""" + from __future__ import annotations import asyncio diff --git a/music_assistant/server/controllers/music.py b/music_assistant/server/controllers/music.py index 96b00cad..b1a2ecaa 100755 --- a/music_assistant/server/controllers/music.py +++ b/music_assistant/server/controllers/music.py @@ -1,4 +1,5 @@ """MusicController: Orchestrates all data from music providers and sync to internal database.""" + from __future__ import annotations import asyncio diff --git a/music_assistant/server/controllers/player_queues.py b/music_assistant/server/controllers/player_queues.py index 08b3a6ee..b234872d 100755 --- a/music_assistant/server/controllers/player_queues.py +++ b/music_assistant/server/controllers/player_queues.py @@ -1,4 +1,5 @@ """Logic to play music from MusicProviders to supported players.""" + from __future__ import annotations import logging diff --git a/music_assistant/server/controllers/players.py b/music_assistant/server/controllers/players.py index e1b76fa2..4cb8ea35 100755 --- a/music_assistant/server/controllers/players.py +++ b/music_assistant/server/controllers/players.py @@ -1,4 +1,5 @@ """Logic to play music from MusicProviders to supported players.""" + from __future__ import annotations import asyncio diff --git a/music_assistant/server/controllers/streams.py b/music_assistant/server/controllers/streams.py index 1ad7e084..61b97384 100644 --- a/music_assistant/server/controllers/streams.py +++ b/music_assistant/server/controllers/streams.py @@ -5,6 +5,7 @@ The streams controller hosts a basic, unprotected HTTP-only webserver purely to stream audio packets to players and some control endpoints such as the upnp callbacks and json rpc api for slimproto clients. """ + from __future__ import annotations import asyncio diff --git a/music_assistant/server/controllers/webserver.py b/music_assistant/server/controllers/webserver.py index 2c802102..6d82c47f 100644 --- a/music_assistant/server/controllers/webserver.py +++ b/music_assistant/server/controllers/webserver.py @@ -4,6 +4,7 @@ Controller that manages the builtin webserver that hosts the api and frontend. Unlike the streamserver (which is as simple and unprotected as possible), this webserver allows for more fine grained configuration to better secure it. """ + from __future__ import annotations import asyncio diff --git a/music_assistant/server/helpers/api.py b/music_assistant/server/helpers/api.py index 31791a9b..95af94bd 100644 --- a/music_assistant/server/helpers/api.py +++ b/music_assistant/server/helpers/api.py @@ -1,4 +1,5 @@ """Helpers for dealing with API's to interact with Music Assistant.""" + from __future__ import annotations import inspect diff --git a/music_assistant/server/helpers/audio.py b/music_assistant/server/helpers/audio.py index 62ae2b81..09e0719d 100644 --- a/music_assistant/server/helpers/audio.py +++ b/music_assistant/server/helpers/audio.py @@ -1,4 +1,5 @@ """Various helpers for audio manipulation.""" + from __future__ import annotations import asyncio diff --git a/music_assistant/server/helpers/auth.py b/music_assistant/server/helpers/auth.py index aaf1ff70..c609943a 100644 --- a/music_assistant/server/helpers/auth.py +++ b/music_assistant/server/helpers/auth.py @@ -1,4 +1,5 @@ """Helper(s) to deal with authentication for (music) providers.""" + from __future__ import annotations import asyncio diff --git a/music_assistant/server/helpers/compare.py b/music_assistant/server/helpers/compare.py index 900488a6..259a5f21 100644 --- a/music_assistant/server/helpers/compare.py +++ b/music_assistant/server/helpers/compare.py @@ -1,4 +1,5 @@ """Several helper/utils to compare objects.""" + from __future__ import annotations import re diff --git a/music_assistant/server/helpers/database.py b/music_assistant/server/helpers/database.py index 89e92721..134b60f3 100755 --- a/music_assistant/server/helpers/database.py +++ b/music_assistant/server/helpers/database.py @@ -1,4 +1,5 @@ """Database helpers and logic.""" + from __future__ import annotations from collections.abc import AsyncGenerator, Mapping diff --git a/music_assistant/server/helpers/didl_lite.py b/music_assistant/server/helpers/didl_lite.py index 3c91f2c8..dc7e84ca 100644 --- a/music_assistant/server/helpers/didl_lite.py +++ b/music_assistant/server/helpers/didl_lite.py @@ -1,4 +1,5 @@ """Helper(s) to create DIDL Lite metadata for Sonos/DLNA players.""" + from __future__ import annotations import datetime diff --git a/music_assistant/server/helpers/images.py b/music_assistant/server/helpers/images.py index 66880ee5..9f85eec1 100644 --- a/music_assistant/server/helpers/images.py +++ b/music_assistant/server/helpers/images.py @@ -1,4 +1,5 @@ """Utilities for image manipulation and retrieval.""" + from __future__ import annotations import asyncio diff --git a/music_assistant/server/helpers/logging.py b/music_assistant/server/helpers/logging.py index b95e08e5..3034c80c 100644 --- a/music_assistant/server/helpers/logging.py +++ b/music_assistant/server/helpers/logging.py @@ -6,6 +6,7 @@ https://github.com/home-assistant/core/blob/e5ccd85e7e26c167d0b73669a88bc3a7614d All rights reserved. """ + from __future__ import annotations import asyncio @@ -108,15 +109,13 @@ def log_exception(format_err: Callable[..., Any], *args: Any) -> None: @overload def catch_log_exception( func: Callable[..., Coroutine[Any, Any, Any]], format_err: Callable[..., Any] -) -> Callable[..., Coroutine[Any, Any, None]]: - ... +) -> Callable[..., Coroutine[Any, Any, None]]: ... @overload def catch_log_exception( func: Callable[..., Any], format_err: Callable[..., Any] -) -> Callable[..., None] | Callable[..., Coroutine[Any, Any, None]]: - ... +) -> Callable[..., None] | Callable[..., Coroutine[Any, Any, None]]: ... def catch_log_exception( diff --git a/music_assistant/server/helpers/playlists.py b/music_assistant/server/helpers/playlists.py index 4ea9229e..efbf2e84 100644 --- a/music_assistant/server/helpers/playlists.py +++ b/music_assistant/server/helpers/playlists.py @@ -1,4 +1,5 @@ """Helpers for parsing playlists.""" + from __future__ import annotations import asyncio diff --git a/music_assistant/server/helpers/process.py b/music_assistant/server/helpers/process.py index 515255e7..fa9ad501 100644 --- a/music_assistant/server/helpers/process.py +++ b/music_assistant/server/helpers/process.py @@ -3,6 +3,7 @@ The subprocess implementation in asyncio can (still) sometimes cause deadlocks, even when properly handling reading/writes from different tasks. """ + from __future__ import annotations import asyncio diff --git a/music_assistant/server/helpers/tags.py b/music_assistant/server/helpers/tags.py index 73882928..155e8bc8 100644 --- a/music_assistant/server/helpers/tags.py +++ b/music_assistant/server/helpers/tags.py @@ -1,4 +1,5 @@ """Helpers/utilities to parse ID3 tags from audio files with ffmpeg.""" + from __future__ import annotations import json diff --git a/music_assistant/server/helpers/util.py b/music_assistant/server/helpers/util.py index 4627e500..57b48417 100644 --- a/music_assistant/server/helpers/util.py +++ b/music_assistant/server/helpers/util.py @@ -1,4 +1,5 @@ """Various (server-only) tools and helpers.""" + from __future__ import annotations import asyncio diff --git a/music_assistant/server/helpers/webserver.py b/music_assistant/server/helpers/webserver.py index efa75f61..2ce47c50 100644 --- a/music_assistant/server/helpers/webserver.py +++ b/music_assistant/server/helpers/webserver.py @@ -1,4 +1,5 @@ """Base Webserver logic for an HTTPServer that can handle dynamic routes.""" + from __future__ import annotations import logging diff --git a/music_assistant/server/models/__init__.py b/music_assistant/server/models/__init__.py index 7317cffa..cdf98962 100644 --- a/music_assistant/server/models/__init__.py +++ b/music_assistant/server/models/__init__.py @@ -1,4 +1,5 @@ """Server specific/only models.""" + from __future__ import annotations from typing import TYPE_CHECKING, Protocol diff --git a/music_assistant/server/models/core_controller.py b/music_assistant/server/models/core_controller.py index 24199d8b..1e150dcb 100644 --- a/music_assistant/server/models/core_controller.py +++ b/music_assistant/server/models/core_controller.py @@ -1,4 +1,5 @@ """Model/base for a Core controller within Music Assistant.""" + from __future__ import annotations import logging diff --git a/music_assistant/server/models/metadata_provider.py b/music_assistant/server/models/metadata_provider.py index 0e3f75b3..f9e9beed 100644 --- a/music_assistant/server/models/metadata_provider.py +++ b/music_assistant/server/models/metadata_provider.py @@ -1,4 +1,5 @@ """Model/base for a Metadata Provider implementation.""" + from __future__ import annotations from typing import TYPE_CHECKING diff --git a/music_assistant/server/models/music_provider.py b/music_assistant/server/models/music_provider.py index fb075054..0f96b474 100644 --- a/music_assistant/server/models/music_provider.py +++ b/music_assistant/server/models/music_provider.py @@ -1,4 +1,5 @@ """Model/base for a Music Provider implementation.""" + from __future__ import annotations from collections.abc import AsyncGenerator diff --git a/music_assistant/server/models/player_provider.py b/music_assistant/server/models/player_provider.py index 0d06a2af..be404abf 100644 --- a/music_assistant/server/models/player_provider.py +++ b/music_assistant/server/models/player_provider.py @@ -1,4 +1,5 @@ """Model/base for a Metadata Provider implementation.""" + from __future__ import annotations from abc import abstractmethod diff --git a/music_assistant/server/models/plugin.py b/music_assistant/server/models/plugin.py index 6a535a39..6e7207e2 100644 --- a/music_assistant/server/models/plugin.py +++ b/music_assistant/server/models/plugin.py @@ -1,4 +1,5 @@ """Model/base for a Plugin Provider implementation.""" + from __future__ import annotations from typing import TYPE_CHECKING diff --git a/music_assistant/server/models/provider.py b/music_assistant/server/models/provider.py index c649af1e..e820f90a 100644 --- a/music_assistant/server/models/provider.py +++ b/music_assistant/server/models/provider.py @@ -1,4 +1,5 @@ """Model/base for a Provider implementation within Music Assistant.""" + from __future__ import annotations import logging diff --git a/music_assistant/server/providers/airplay/__init__.py b/music_assistant/server/providers/airplay/__init__.py index a4313daa..10eca9ff 100644 --- a/music_assistant/server/providers/airplay/__init__.py +++ b/music_assistant/server/providers/airplay/__init__.py @@ -4,6 +4,7 @@ This is more like a "virtual" player provider, running on top of slimproto. It uses the amazing work of Philippe44 who created a bridge from airplay to slimproto. https://github.com/philippe44/LMS-Raop """ + from __future__ import annotations import asyncio diff --git a/music_assistant/server/providers/chromecast/__init__.py b/music_assistant/server/providers/chromecast/__init__.py index c0205029..1bb7e826 100644 --- a/music_assistant/server/providers/chromecast/__init__.py +++ b/music_assistant/server/providers/chromecast/__init__.py @@ -1,4 +1,5 @@ """Chromecast Player provider for Music Assistant, utilizing the pychromecast library.""" + from __future__ import annotations import asyncio @@ -633,13 +634,13 @@ class ChromecastProvider(PlayerProvider): stream_type = STREAM_TYPE_BUFFERED metadata = { "metadataType": 3, - "albumName": queue_item.media_item.album.name - if queue_item.media_item.album - else "", + "albumName": ( + queue_item.media_item.album.name if queue_item.media_item.album else "" + ), "songName": queue_item.media_item.name, - "artist": queue_item.media_item.artists[0].name - if queue_item.media_item.artists - else "", + "artist": ( + queue_item.media_item.artists[0].name if queue_item.media_item.artists else "" + ), "title": queue_item.media_item.name, "images": [{"url": image_url}] if image_url else None, } diff --git a/music_assistant/server/providers/chromecast/helpers.py b/music_assistant/server/providers/chromecast/helpers.py index 925471dd..7959f5d7 100644 --- a/music_assistant/server/providers/chromecast/helpers.py +++ b/music_assistant/server/providers/chromecast/helpers.py @@ -1,4 +1,5 @@ """Helpers to deal with Cast devices.""" + from __future__ import annotations import urllib.error diff --git a/music_assistant/server/providers/deezer/__init__.py b/music_assistant/server/providers/deezer/__init__.py index 6812aa7d..65e05191 100644 --- a/music_assistant/server/providers/deezer/__init__.py +++ b/music_assistant/server/providers/deezer/__init__.py @@ -1,4 +1,5 @@ """Deezer music provider support for MusicAssistant.""" + import datetime import hashlib import uuid diff --git a/music_assistant/server/providers/deezer/gw_client.py b/music_assistant/server/providers/deezer/gw_client.py index 8e8ec528..606e662a 100644 --- a/music_assistant/server/providers/deezer/gw_client.py +++ b/music_assistant/server/providers/deezer/gw_client.py @@ -3,6 +3,7 @@ Credits go out to RemixDev (https://gitlab.com/RemixDev) for figuring out, how to get the arl cookie based on the api_token. """ + import datetime from http.cookies import BaseCookie, Morsel diff --git a/music_assistant/server/providers/dlna/__init__.py b/music_assistant/server/providers/dlna/__init__.py index 9ce9c7c9..53efeb7a 100644 --- a/music_assistant/server/providers/dlna/__init__.py +++ b/music_assistant/server/providers/dlna/__init__.py @@ -5,6 +5,7 @@ https://github.com/home-assistant/core/blob/dev/homeassistant/components/dlna_dm All rights/credits reserved. """ + from __future__ import annotations import asyncio diff --git a/music_assistant/server/providers/dlna/helpers.py b/music_assistant/server/providers/dlna/helpers.py index 0cbe74b9..88161a12 100644 --- a/music_assistant/server/providers/dlna/helpers.py +++ b/music_assistant/server/providers/dlna/helpers.py @@ -1,4 +1,5 @@ """Various helpers and utils for the DLNA Player Provider.""" + from __future__ import annotations from typing import TYPE_CHECKING diff --git a/music_assistant/server/providers/fanarttv/__init__.py b/music_assistant/server/providers/fanarttv/__init__.py index 5c04e827..6398812b 100644 --- a/music_assistant/server/providers/fanarttv/__init__.py +++ b/music_assistant/server/providers/fanarttv/__init__.py @@ -1,4 +1,5 @@ """Fanart.tv Metadata provider for Music Assistant.""" + from __future__ import annotations from json import JSONDecodeError @@ -119,9 +120,10 @@ class FanartTvMetadataProvider(MetadataProvider): """Get data from api.""" url = f"http://webservice.fanart.tv/v3/{endpoint}" kwargs["api_key"] = app_var(4) - async with self.throttler, self.mass.http_session.get( - url, params=kwargs, ssl=False - ) as response: + async with ( + self.throttler, + self.mass.http_session.get(url, params=kwargs, ssl=False) as response, + ): try: result = await response.json() except ( diff --git a/music_assistant/server/providers/filesystem_local/__init__.py b/music_assistant/server/providers/filesystem_local/__init__.py index e34b9f47..21e86ea6 100644 --- a/music_assistant/server/providers/filesystem_local/__init__.py +++ b/music_assistant/server/providers/filesystem_local/__init__.py @@ -1,4 +1,5 @@ """Filesystem musicprovider support for MusicAssistant.""" + from __future__ import annotations import asyncio diff --git a/music_assistant/server/providers/filesystem_local/base.py b/music_assistant/server/providers/filesystem_local/base.py index 41bdfe31..d9ef4da1 100644 --- a/music_assistant/server/providers/filesystem_local/base.py +++ b/music_assistant/server/providers/filesystem_local/base.py @@ -1,4 +1,5 @@ """Filesystem musicprovider support for MusicAssistant.""" + from __future__ import annotations import asyncio diff --git a/music_assistant/server/providers/filesystem_local/helpers.py b/music_assistant/server/providers/filesystem_local/helpers.py index 9ad90a50..acc42a8b 100644 --- a/music_assistant/server/providers/filesystem_local/helpers.py +++ b/music_assistant/server/providers/filesystem_local/helpers.py @@ -1,4 +1,5 @@ """Some helpers for Filesystem based Musicproviders.""" + from __future__ import annotations import os diff --git a/music_assistant/server/providers/filesystem_smb/__init__.py b/music_assistant/server/providers/filesystem_smb/__init__.py index 1641eebb..1e468442 100644 --- a/music_assistant/server/providers/filesystem_smb/__init__.py +++ b/music_assistant/server/providers/filesystem_smb/__init__.py @@ -1,4 +1,5 @@ """SMB filesystem provider for Music Assistant.""" + from __future__ import annotations import asyncio diff --git a/music_assistant/server/providers/musicbrainz/__init__.py b/music_assistant/server/providers/musicbrainz/__init__.py index da12609d..a3980ad5 100644 --- a/music_assistant/server/providers/musicbrainz/__init__.py +++ b/music_assistant/server/providers/musicbrainz/__init__.py @@ -2,6 +2,7 @@ At this time only used for retrieval of ID's but to be expanded to fetch metadata too. """ + from __future__ import annotations import re @@ -423,9 +424,10 @@ class MusicbrainzProvider(MetadataProvider): "User-Agent": f"Music Assistant/{self.mass.version} ( https://github.com/music-assistant )" # noqa: E501 } kwargs["fmt"] = "json" # type: ignore[assignment] - async with self.throttler, self.mass.http_session.get( - url, headers=headers, params=kwargs, ssl=False - ) as response: + async with ( + self.throttler, + self.mass.http_session.get(url, headers=headers, params=kwargs, ssl=False) as response, + ): try: result = await response.json() except ( diff --git a/music_assistant/server/providers/opensubsonic/__init__.py b/music_assistant/server/providers/opensubsonic/__init__.py index 46415b51..81dbdabd 100644 --- a/music_assistant/server/providers/opensubsonic/__init__.py +++ b/music_assistant/server/providers/opensubsonic/__init__.py @@ -1,4 +1,5 @@ """Open Subsonic music provider support for MusicAssistant.""" + from __future__ import annotations from music_assistant.common.models.config_entries import ( diff --git a/music_assistant/server/providers/opensubsonic/sonic_provider.py b/music_assistant/server/providers/opensubsonic/sonic_provider.py index 48598f58..1d6f72ef 100644 --- a/music_assistant/server/providers/opensubsonic/sonic_provider.py +++ b/music_assistant/server/providers/opensubsonic/sonic_provider.py @@ -1,4 +1,5 @@ """The provider class for Open Subsonic.""" + from __future__ import annotations import asyncio diff --git a/music_assistant/server/providers/plex/__init__.py b/music_assistant/server/providers/plex/__init__.py index 7dc5801d..3086be23 100644 --- a/music_assistant/server/providers/plex/__init__.py +++ b/music_assistant/server/providers/plex/__init__.py @@ -1,4 +1,5 @@ """Plex musicprovider support for MusicAssistant.""" + from __future__ import annotations import asyncio @@ -462,9 +463,9 @@ class PlexProvider(MusicProvider): provider_instance=self.instance_id, available=available, audio_format=AudioFormat( - content_type=ContentType.try_parse(content) - if content - else ContentType.UNKNOWN, + content_type=( + ContentType.try_parse(content) if content else ContentType.UNKNOWN + ), ), url=plex_track.getWebURL(), ) diff --git a/music_assistant/server/providers/plex/helpers.py b/music_assistant/server/providers/plex/helpers.py index f5b846b5..a60de938 100644 --- a/music_assistant/server/providers/plex/helpers.py +++ b/music_assistant/server/providers/plex/helpers.py @@ -1,4 +1,5 @@ """Several helpers/utils for the Plex Music Provider.""" + from __future__ import annotations import asyncio diff --git a/music_assistant/server/providers/qobuz/__init__.py b/music_assistant/server/providers/qobuz/__init__.py index e35b0699..504421c1 100644 --- a/music_assistant/server/providers/qobuz/__init__.py +++ b/music_assistant/server/providers/qobuz/__init__.py @@ -1,4 +1,5 @@ """Qobuz musicprovider support for MusicAssistant.""" + from __future__ import annotations import datetime @@ -683,9 +684,10 @@ class QobuzProvider(MusicProvider): kwargs["request_sig"] = request_sig kwargs["app_id"] = app_var(0) kwargs["user_auth_token"] = await self._auth_token() - async with self._throttler, self.mass.http_session.get( - url, headers=headers, params=kwargs, ssl=False - ) as response: + async with ( + self._throttler, + self.mass.http_session.get(url, headers=headers, params=kwargs, ssl=False) as response, + ): try: result = await response.json() # check for error in json diff --git a/music_assistant/server/providers/radiobrowser/__init__.py b/music_assistant/server/providers/radiobrowser/__init__.py index b7f40ebd..a55b0034 100644 --- a/music_assistant/server/providers/radiobrowser/__init__.py +++ b/music_assistant/server/providers/radiobrowser/__init__.py @@ -1,4 +1,5 @@ """RadioBrowser musicprovider support for MusicAssistant.""" + from __future__ import annotations from collections.abc import AsyncGenerator diff --git a/music_assistant/server/providers/slimproto/__init__.py b/music_assistant/server/providers/slimproto/__init__.py index 949fa92f..7a11a28a 100644 --- a/music_assistant/server/providers/slimproto/__init__.py +++ b/music_assistant/server/providers/slimproto/__init__.py @@ -1,4 +1,5 @@ """Base/builtin provider with support for players using slimproto.""" + from __future__ import annotations import asyncio @@ -496,9 +497,11 @@ class SlimprotoProvider(PlayerProvider): await client.play_url( url=url, mime_type=f"audio/{url.split('.')[-1].split('?')[0]}", - metadata={"item_id": queue_item.queue_item_id, "title": queue_item.name} - if queue_item - else {"item_id": client.player_id, "title": "Music Assistant"}, + metadata=( + {"item_id": queue_item.queue_item_id, "title": queue_item.name} + if queue_item + else {"item_id": client.player_id, "title": "Music Assistant"} + ), send_flush=send_flush, transition=SlimTransition.CROSSFADE if crossfade else SlimTransition.NONE, transition_duration=transition_duration, diff --git a/music_assistant/server/providers/slimproto/cli.py b/music_assistant/server/providers/slimproto/cli.py index 095b8190..3822fd2e 100644 --- a/music_assistant/server/providers/slimproto/cli.py +++ b/music_assistant/server/providers/slimproto/cli.py @@ -8,6 +8,7 @@ Output is adjusted to conform to Music Assistant logic or just for simplificatio Goal is player compatibility, not API compatibility. Users that need more, should just stay with a full blown LMS server. """ + from __future__ import annotations import asyncio @@ -362,9 +363,7 @@ class LmsCli: "timestamp": time.strftime("%a, %d %b %Y %H:%M:%S %Z", time.gmtime()), "advice": { # update interval for streaming mode - "interval": 5000 - if streaming - else 0 + "interval": 5000 if streaming else 0 }, } ) @@ -1260,9 +1259,9 @@ class LmsCli: "favorites_title": item.name, "favorites_url": item.uri, "favorites_type": item.media_type.value, - "icon": self.mass.metadata.get_image_url(item.image, 256) - if item.image - else "", + "icon": ( + self.mass.metadata.get_image_url(item.image, 256) if item.image else "" + ), }, "textkey": item.name[0].upper(), "commonParams": { diff --git a/music_assistant/server/providers/slimproto/models.py b/music_assistant/server/providers/slimproto/models.py index 214fcf53..06f4e904 100644 --- a/music_assistant/server/providers/slimproto/models.py +++ b/music_assistant/server/providers/slimproto/models.py @@ -1,4 +1,5 @@ """Models used for the JSON-RPC API.""" + from __future__ import annotations from typing import TYPE_CHECKING, Any, TypedDict @@ -190,9 +191,9 @@ def playlist_item_from_mass( "artist": artist, "album": album, "remote": 1, - "artwork_url": mass.metadata.get_image_url(queue_item.image, 512) - if queue_item.image - else "", + "artwork_url": ( + mass.metadata.get_image_url(queue_item.image, 512) if queue_item.image else "" + ), "coverid": "-187651250107376", "duration": queue_item.duration, "bitrate": bitrate, diff --git a/music_assistant/server/providers/snapcast/__init__.py b/music_assistant/server/providers/snapcast/__init__.py index b71a3ace..b624a2ae 100644 --- a/music_assistant/server/providers/snapcast/__init__.py +++ b/music_assistant/server/providers/snapcast/__init__.py @@ -1,4 +1,5 @@ """Snapcast Player provider for Music Assistant.""" + from __future__ import annotations import asyncio diff --git a/music_assistant/server/providers/sonos/__init__.py b/music_assistant/server/providers/sonos/__init__.py index 5ade6051..3106bd2a 100644 --- a/music_assistant/server/providers/sonos/__init__.py +++ b/music_assistant/server/providers/sonos/__init__.py @@ -1,4 +1,5 @@ """Sample Player provider for Music Assistant.""" + from __future__ import annotations import asyncio diff --git a/music_assistant/server/providers/soundcloud/__init__.py b/music_assistant/server/providers/soundcloud/__init__.py index 3346752b..362e1d4b 100644 --- a/music_assistant/server/providers/soundcloud/__init__.py +++ b/music_assistant/server/providers/soundcloud/__init__.py @@ -1,4 +1,5 @@ """Soundcloud support for MusicAssistant.""" + from __future__ import annotations import asyncio diff --git a/music_assistant/server/providers/soundcloud/soundcloudpy/asyncsoundcloudpy.py b/music_assistant/server/providers/soundcloud/soundcloudpy/asyncsoundcloudpy.py index 00f450ce..cfda3b23 100644 --- a/music_assistant/server/providers/soundcloud/soundcloudpy/asyncsoundcloudpy.py +++ b/music_assistant/server/providers/soundcloud/soundcloudpy/asyncsoundcloudpy.py @@ -4,6 +4,7 @@ Async helpers for connecting to the Soundcloud API. This file is based on soundcloudpy from Naím Rodríguez https://github.com/naim-prog Original package https://github.com/naim-prog/soundcloud-py """ + from __future__ import annotations from collections.abc import AsyncGenerator diff --git a/music_assistant/server/providers/spotify/__init__.py b/music_assistant/server/providers/spotify/__init__.py index 1b68efeb..94f3b434 100644 --- a/music_assistant/server/providers/spotify/__init__.py +++ b/music_assistant/server/providers/spotify/__init__.py @@ -1,4 +1,5 @@ """Spotify musicprovider support for MusicAssistant.""" + from __future__ import annotations import asyncio diff --git a/music_assistant/server/providers/theaudiodb/__init__.py b/music_assistant/server/providers/theaudiodb/__init__.py index 75d2d15c..fe6bcb60 100644 --- a/music_assistant/server/providers/theaudiodb/__init__.py +++ b/music_assistant/server/providers/theaudiodb/__init__.py @@ -1,4 +1,5 @@ """The AudioDB Metadata provider for Music Assistant.""" + from __future__ import annotations from json import JSONDecodeError @@ -265,9 +266,10 @@ class AudioDbMetadataProvider(MetadataProvider): async def _get_data(self, endpoint, **kwargs) -> dict | None: """Get data from api.""" url = f"https://theaudiodb.com/api/v1/json/{app_var(3)}/{endpoint}" - async with self.throttler, self.mass.http_session.get( - url, params=kwargs, ssl=False - ) as response: + async with ( + self.throttler, + self.mass.http_session.get(url, params=kwargs, ssl=False) as response, + ): try: result = await response.json() except ( diff --git a/music_assistant/server/providers/tidal/helpers.py b/music_assistant/server/providers/tidal/helpers.py index 919d8cb1..cfe3f862 100644 --- a/music_assistant/server/providers/tidal/helpers.py +++ b/music_assistant/server/providers/tidal/helpers.py @@ -49,21 +49,29 @@ async def library_items_add_remove( def inner() -> None: match media_type: case MediaType.ARTIST: - TidalFavorites(session, user_id).add_artist(item_id) if add else TidalFavorites( - session, user_id - ).remove_artist(item_id) + ( + TidalFavorites(session, user_id).add_artist(item_id) + if add + else TidalFavorites(session, user_id).remove_artist(item_id) + ) case MediaType.ALBUM: - TidalFavorites(session, user_id).add_album(item_id) if add else TidalFavorites( - session, user_id - ).remove_album(item_id) + ( + TidalFavorites(session, user_id).add_album(item_id) + if add + else TidalFavorites(session, user_id).remove_album(item_id) + ) case MediaType.TRACK: - TidalFavorites(session, user_id).add_track(item_id) if add else TidalFavorites( - session, user_id - ).remove_track(item_id) + ( + TidalFavorites(session, user_id).add_track(item_id) + if add + else TidalFavorites(session, user_id).remove_track(item_id) + ) case MediaType.PLAYLIST: - TidalFavorites(session, user_id).add_playlist(item_id) if add else TidalFavorites( - session, user_id - ).remove_playlist(item_id) + ( + TidalFavorites(session, user_id).add_playlist(item_id) + if add + else TidalFavorites(session, user_id).remove_playlist(item_id) + ) case MediaType.UNKNOWN: return diff --git a/music_assistant/server/providers/tunein/__init__.py b/music_assistant/server/providers/tunein/__init__.py index ecf4bd76..eebae417 100644 --- a/music_assistant/server/providers/tunein/__init__.py +++ b/music_assistant/server/providers/tunein/__init__.py @@ -1,4 +1,5 @@ """Tune-In musicprovider support for MusicAssistant.""" + from __future__ import annotations from collections.abc import AsyncGenerator @@ -258,9 +259,10 @@ class TuneInProvider(MusicProvider): kwargs["username"] = self.config.get_value(CONF_USERNAME) kwargs["partnerId"] = "1" kwargs["render"] = "json" - async with self._throttler, self.mass.http_session.get( - url, params=kwargs, ssl=False - ) as response: + async with ( + self._throttler, + self.mass.http_session.get(url, params=kwargs, ssl=False) as response, + ): result = await response.json() if not result or "error" in result: self.logger.error(url) diff --git a/music_assistant/server/providers/ugp/__init__.py b/music_assistant/server/providers/ugp/__init__.py index 054eb4e2..5f2f3dda 100644 --- a/music_assistant/server/providers/ugp/__init__.py +++ b/music_assistant/server/providers/ugp/__init__.py @@ -4,6 +4,7 @@ Universal Group Player provider. This is more like a "virtual" player provider, allowing the user to create player groups from all players known in the system. """ + from __future__ import annotations import asyncio diff --git a/music_assistant/server/providers/url/__init__.py b/music_assistant/server/providers/url/__init__.py index 32d56b7f..f1e5575b 100644 --- a/music_assistant/server/providers/url/__init__.py +++ b/music_assistant/server/providers/url/__init__.py @@ -1,4 +1,5 @@ """Basic provider allowing for external URL's to be streamed.""" + from __future__ import annotations import os diff --git a/music_assistant/server/providers/ytmusic/__init__.py b/music_assistant/server/providers/ytmusic/__init__.py index 6b3f667e..ecfc97cc 100644 --- a/music_assistant/server/providers/ytmusic/__init__.py +++ b/music_assistant/server/providers/ytmusic/__init__.py @@ -1,4 +1,5 @@ """Youtube Music support for MusicAssistant.""" + from __future__ import annotations import asyncio diff --git a/music_assistant/server/server.py b/music_assistant/server/server.py index 9af1238f..a0b1b309 100644 --- a/music_assistant/server/server.py +++ b/music_assistant/server/server.py @@ -1,4 +1,5 @@ """Main Music Assistant class.""" + from __future__ import annotations import asyncio diff --git a/script/profiler.py b/script/profiler.py index c5135bc3..681c9018 100644 --- a/script/profiler.py +++ b/script/profiler.py @@ -3,6 +3,7 @@ Helper to trace memory usage. https://www.red-gate.com/simple-talk/development/python/memory-profiling-in-python-with-tracemalloc/ """ + import asyncio import tracemalloc -- 2.34.1