From: Jc2k Date: Thu, 9 Jan 2025 16:39:36 +0000 (+0000) Subject: chore: enable mypy for new modules by default (#1849) X-Git-Url: https://git.kitaultman.com/?a=commitdiff_plain;h=3de275708e7ba98fb14138f5cb58b9d7274b8094;p=music-assistant-server.git chore: enable mypy for new modules by default (#1849) --- diff --git a/music_assistant/providers/builtin/__init__.py b/music_assistant/providers/builtin/__init__.py index 25aa0c62..1786e35e 100644 --- a/music_assistant/providers/builtin/__init__.py +++ b/music_assistant/providers/builtin/__init__.py @@ -48,7 +48,7 @@ if TYPE_CHECKING: from music_assistant_models.config_entries import ConfigValueType, ProviderConfig from music_assistant_models.provider import ProviderManifest - from music_assistant import MusicAssistant + from music_assistant.mass import MusicAssistant from music_assistant.models import ProviderInstanceType diff --git a/music_assistant/providers/filesystem_local/__init__.py b/music_assistant/providers/filesystem_local/__init__.py index fa746715..51691abe 100644 --- a/music_assistant/providers/filesystem_local/__init__.py +++ b/music_assistant/providers/filesystem_local/__init__.py @@ -74,7 +74,7 @@ if TYPE_CHECKING: from music_assistant_models.config_entries import ProviderConfig from music_assistant_models.provider import ProviderManifest - from music_assistant import MusicAssistant + from music_assistant.mass import MusicAssistant from music_assistant.models import ProviderInstanceType CONF_MISSING_ALBUM_ARTIST_ACTION = "missing_album_artist_action" diff --git a/music_assistant/providers/filesystem_local/helpers.py b/music_assistant/providers/filesystem_local/helpers.py index e7a66201..a42416f6 100644 --- a/music_assistant/providers/filesystem_local/helpers.py +++ b/music_assistant/providers/filesystem_local/helpers.py @@ -61,7 +61,7 @@ class FileSystemItem: return os.path.dirname(self.relative_path) @classmethod - def from_dir_entry(cls, entry: os.DirEntry, base_path: str) -> FileSystemItem: + def from_dir_entry(cls, entry: os.DirEntry[str], base_path: str) -> FileSystemItem: """Create FileSystemItem from os.DirEntry. NOT Async friendly.""" if entry.is_dir(follow_symlinks=False): return cls( diff --git a/music_assistant/providers/filesystem_smb/__init__.py b/music_assistant/providers/filesystem_smb/__init__.py index b29b5b71..3d2c9cfc 100644 --- a/music_assistant/providers/filesystem_smb/__init__.py +++ b/music_assistant/providers/filesystem_smb/__init__.py @@ -24,7 +24,7 @@ if TYPE_CHECKING: from music_assistant_models.config_entries import ProviderConfig from music_assistant_models.provider import ProviderManifest - from music_assistant import MusicAssistant + from music_assistant.mass import MusicAssistant from music_assistant.models import ProviderInstanceType CONF_HOST = "host" diff --git a/music_assistant/providers/fully_kiosk/__init__.py b/music_assistant/providers/fully_kiosk/__init__.py index bc49df35..6f7b2c29 100644 --- a/music_assistant/providers/fully_kiosk/__init__.py +++ b/music_assistant/providers/fully_kiosk/__init__.py @@ -30,7 +30,7 @@ if TYPE_CHECKING: from music_assistant_models.config_entries import ProviderConfig from music_assistant_models.provider import ProviderManifest - from music_assistant import MusicAssistant + from music_assistant.mass import MusicAssistant from music_assistant.models import ProviderInstanceType AUDIOMANAGER_STREAM_MUSIC = 3 diff --git a/music_assistant/providers/jellyfin/__init__.py b/music_assistant/providers/jellyfin/__init__.py index 8ccdd425..7c79b1e4 100644 --- a/music_assistant/providers/jellyfin/__init__.py +++ b/music_assistant/providers/jellyfin/__init__.py @@ -10,8 +10,9 @@ from collections.abc import AsyncGenerator from typing import TYPE_CHECKING from aiojellyfin import MediaLibrary as JellyMediaLibrary -from aiojellyfin import NotFound, SessionConfiguration, authenticate_by_name +from aiojellyfin import NotFound, authenticate_by_name from aiojellyfin import Track as JellyTrack +from aiojellyfin.session import SessionConfiguration from music_assistant_models.config_entries import ConfigEntry, ConfigValueType, ProviderConfig from music_assistant_models.enums import ( ConfigEntryType, @@ -32,8 +33,8 @@ from music_assistant_models.media_items import ( ) from music_assistant_models.streamdetails import StreamDetails -from music_assistant import MusicAssistant from music_assistant.constants import UNKNOWN_ARTIST_ID_MBID +from music_assistant.mass import MusicAssistant from music_assistant.models import ProviderInstanceType from music_assistant.models.music_provider import MusicProvider from music_assistant.providers.jellyfin.parsers import ( diff --git a/music_assistant/providers/plex/__init__.py b/music_assistant/providers/plex/__init__.py index f6967b71..f5ccc32f 100644 --- a/music_assistant/providers/plex/__init__.py +++ b/music_assistant/providers/plex/__init__.py @@ -69,7 +69,7 @@ if TYPE_CHECKING: from plexapi.media import Media as PlexMedia from plexapi.media import MediaPart as PlexMediaPart - from music_assistant import MusicAssistant + from music_assistant.mass import MusicAssistant from music_assistant.models import ProviderInstanceType CONF_ACTION_AUTH_MYPLEX = "auth_myplex" diff --git a/music_assistant/providers/plex/helpers.py b/music_assistant/providers/plex/helpers.py index 0c303bcc..98850835 100644 --- a/music_assistant/providers/plex/helpers.py +++ b/music_assistant/providers/plex/helpers.py @@ -12,7 +12,7 @@ from plexapi.library import MusicSection as PlexMusicSection from plexapi.server import PlexServer if TYPE_CHECKING: - from music_assistant import MusicAssistant + from music_assistant.mass import MusicAssistant async def get_libraries( diff --git a/music_assistant/providers/radiobrowser/__init__.py b/music_assistant/providers/radiobrowser/__init__.py index 318c0aa2..03962792 100644 --- a/music_assistant/providers/radiobrowser/__init__.py +++ b/music_assistant/providers/radiobrowser/__init__.py @@ -47,7 +47,7 @@ if TYPE_CHECKING: from music_assistant_models.config_entries import ConfigValueType, ProviderConfig from music_assistant_models.provider import ProviderManifest - from music_assistant import MusicAssistant + from music_assistant.mass import MusicAssistant from music_assistant.models import ProviderInstanceType CONF_STORED_RADIOS = "stored_radios" diff --git a/music_assistant/providers/test/__init__.py b/music_assistant/providers/test/__init__.py index e04e6298..92f57560 100644 --- a/music_assistant/providers/test/__init__.py +++ b/music_assistant/providers/test/__init__.py @@ -31,18 +31,14 @@ from music_assistant_models.media_items import ( ) from music_assistant_models.streamdetails import StreamDetails -from music_assistant.constants import ( - MASS_LOGO, - SILENCE_FILE_LONG, - VARIOUS_ARTISTS_FANART, -) +from music_assistant.constants import MASS_LOGO, SILENCE_FILE_LONG, VARIOUS_ARTISTS_FANART from music_assistant.models.music_provider import MusicProvider if TYPE_CHECKING: from music_assistant_models.config_entries import ConfigValueType, ProviderConfig from music_assistant_models.provider import ProviderManifest - from music_assistant import MusicAssistant + from music_assistant.mass import MusicAssistant from music_assistant.models import ProviderInstanceType diff --git a/music_assistant/providers/theaudiodb/__init__.py b/music_assistant/providers/theaudiodb/__init__.py index cfaca28b..ded4f559 100644 --- a/music_assistant/providers/theaudiodb/__init__.py +++ b/music_assistant/providers/theaudiodb/__init__.py @@ -35,7 +35,7 @@ if TYPE_CHECKING: from music_assistant_models.config_entries import ConfigValueType, ProviderConfig from music_assistant_models.provider import ProviderManifest - from music_assistant import MusicAssistant + from music_assistant.mass import MusicAssistant from music_assistant.models import ProviderInstanceType SUPPORTED_FEATURES = { diff --git a/music_assistant/providers/tidal/__init__.py b/music_assistant/providers/tidal/__init__.py index 2e070108..8dac82e1 100644 --- a/music_assistant/providers/tidal/__init__.py +++ b/music_assistant/providers/tidal/__init__.py @@ -82,7 +82,7 @@ if TYPE_CHECKING: from tidalapi.media import Lyrics as TidalLyrics from tidalapi.media import Stream as TidalStream - from music_assistant import MusicAssistant + from music_assistant.mass import MusicAssistant from music_assistant.models import ProviderInstanceType TOKEN_TYPE = "Bearer" diff --git a/mypy.ini b/mypy.ini deleted file mode 100644 index aa3c6247..00000000 --- a/mypy.ini +++ /dev/null @@ -1,24 +0,0 @@ -[mypy] -python_version = 3.12 -platform = linux -show_error_codes = true -follow_imports = silent -local_partial_types = true -strict_equality = true -no_implicit_optional = true -warn_incomplete_stub = true -warn_redundant_casts = true -warn_unused_configs = true -warn_unused_ignores = true -enable_error_code = ignore-without-code, redundant-self, truthy-iterable -disable_error_code = annotation-unchecked, import-not-found, import-untyped -extra_checks = false -check_untyped_defs = true -disallow_incomplete_defs = true -disallow_subclassing_any = true -disallow_untyped_calls = true -disallow_untyped_decorators = true -disallow_untyped_defs = true -warn_return_any = true -warn_unreachable = true -packages=tests,music_assistant.providers.builtin,music_assistant.providers.filesystem_local,music_assistant.providers.filesystem_smb,music_assistant.providers.fully_kiosk,music_assistant.providers.jellyfin,music_assistant.providers.plex,music_assistant.providers.radiobrowser,music_assistant.providers.test,music_assistant.providers.theaudiodb,music_assistant.providers.tidal diff --git a/pyproject.toml b/pyproject.toml index 47716102..459189f2 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -92,10 +92,10 @@ max-statements = 50 [tool.mypy] platform = "linux" -python_version = "3.11" +python_version = "3.12" -# show error messages from unrelated files -follow_imports = "normal" +# set this to normal when we have fixed all exclusions +follow_imports = "silent" # suppress errors about unsatisfied imports ignore_missing_imports = true @@ -117,6 +117,58 @@ warn_redundant_casts = true warn_return_any = true warn_unused_configs = true warn_unused_ignores = true +show_error_codes = true +local_partial_types = true +strict_equality = true +enable_error_code = [ + "ignore-without-code", + "redundant-self", + "truthy-iterable", +] +disable_error_code = [ + "annotation-unchecked", + "import-not-found", + "import-untyped" +] +extra_checks = false +warn_unreachable = true +packages = [ + "tests", + "music_assistant", +] +exclude = [ + '^music_assistant/controllers/.*$', + '^music_assistant/helpers/.*$', + '^music_assistant/models/.*$', + '^music_assistant/mass\.py$', + '^music_assistant/__main__\.py$', + '^music_assistant/providers/_template_music_provider/.*$', + '^music_assistant/providers/_template_player_provider/.*$', + '^music_assistant/providers/airplay/.*$', + '^music_assistant/providers/apple_music/.*$', + '^music_assistant/providers/bluesound/.*$', + '^music_assistant/providers/chromecast/.*$', + '^music_assistant/providers/deezer/.*$', + '^music_assistant/providers/dlna/.*$', + '^music_assistant/providers/fanarttv/.*$', + '^music_assistant/providers/hass/.*$', + '^music_assistant/providers/hass_players/.*$', + '^music_assistant/providers/ibroadcast/.*$', + '^music_assistant/providers/musicbrainz/.*$', + '^music_assistant/providers/opensubsonic/.*$', + '^music_assistant/providers/player_group/.*$', + '^music_assistant/providers/podcastfeed/.*$', + '^music_assistant/providers/qobuz/.*$', + '^music_assistant/providers/siriusxm/.*$', + '^music_assistant/providers/slimproto/.*$', + '^music_assistant/providers/sonos/.*$', + '^music_assistant/providers/sonos_s1/.*$', + '^music_assistant/providers/soundcloud/.*$', + '^music_assistant/providers/snapcast/.*$', + '^music_assistant/providers/spotify/.*$', + '^music_assistant/providers/tunein/.*$', + '^music_assistant/providers/ytmusic/.*$', +] [tool.ruff.format] # Force Linux/MacOS line endings diff --git a/tests/common.py b/tests/common.py index b2be5ddf..52536b97 100644 --- a/tests/common.py +++ b/tests/common.py @@ -9,7 +9,7 @@ import aiofiles.os from music_assistant_models.enums import EventType from music_assistant_models.event import MassEvent -from music_assistant import MusicAssistant +from music_assistant.mass import MusicAssistant def _get_fixture_folder(provider: str | None = None) -> pathlib.Path: diff --git a/tests/conftest.py b/tests/conftest.py index de17ce16..2dc3e1f6 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -6,7 +6,7 @@ from collections.abc import AsyncGenerator import pytest -from music_assistant import MusicAssistant +from music_assistant.mass import MusicAssistant @pytest.fixture(name="caplog") diff --git a/tests/core/test_server_base.py b/tests/core/test_server_base.py index d4086787..0bf116da 100644 --- a/tests/core/test_server_base.py +++ b/tests/core/test_server_base.py @@ -5,7 +5,7 @@ import asyncio from music_assistant_models.enums import EventType from music_assistant_models.event import MassEvent -from music_assistant import MusicAssistant +from music_assistant.mass import MusicAssistant async def test_start_and_stop_server(mass: MusicAssistant) -> None: diff --git a/tests/core/test_tags.py b/tests/core/test_tags.py index d04a33f3..663b8eb1 100644 --- a/tests/core/test_tags.py +++ b/tests/core/test_tags.py @@ -2,6 +2,7 @@ import pathlib +from music_assistant.constants import UNKNOWN_ARTIST from music_assistant.helpers import tags RESOURCES_DIR = pathlib.Path(__file__).parent.parent.resolve().joinpath("fixtures") @@ -67,7 +68,7 @@ async def test_parse_metadata_from_invalid_filename() -> None: assert _tags.title == "test" assert _tags.duration == 1.032 assert _tags.album_artists == () - assert _tags.artists == (tags.UNKNOWN_ARTIST,) + assert _tags.artists == (UNKNOWN_ARTIST,) assert _tags.genres == () assert _tags.musicbrainz_albumartistids == () assert _tags.musicbrainz_artistids == () diff --git a/tests/providers/jellyfin/test_init.py b/tests/providers/jellyfin/test_init.py index 792aa0ee..4db3828b 100644 --- a/tests/providers/jellyfin/test_init.py +++ b/tests/providers/jellyfin/test_init.py @@ -7,7 +7,7 @@ import pytest from aiojellyfin.testing import FixtureBuilder from music_assistant_models.config_entries import ProviderConfig -from music_assistant import MusicAssistant +from music_assistant.mass import MusicAssistant from tests.common import get_fixtures_dir, wait_for_sync_completion diff --git a/tests/providers/jellyfin/test_parsers.py b/tests/providers/jellyfin/test_parsers.py index 7952cae5..dc29cc5e 100644 --- a/tests/providers/jellyfin/test_parsers.py +++ b/tests/providers/jellyfin/test_parsers.py @@ -7,7 +7,8 @@ from collections.abc import AsyncGenerator import aiofiles import aiohttp import pytest -from aiojellyfin import Artist, Connection, SessionConfiguration +from aiojellyfin import Artist, Connection +from aiojellyfin.session import SessionConfiguration from mashumaro.codecs.json import JSONDecoder from syrupy.assertion import SnapshotAssertion