chore: enable mypy for new modules by default (#1849)
authorJc2k <john.carr@unrouted.co.uk>
Thu, 9 Jan 2025 16:39:36 +0000 (16:39 +0000)
committerGitHub <noreply@github.com>
Thu, 9 Jan 2025 16:39:36 +0000 (17:39 +0100)
20 files changed:
music_assistant/providers/builtin/__init__.py
music_assistant/providers/filesystem_local/__init__.py
music_assistant/providers/filesystem_local/helpers.py
music_assistant/providers/filesystem_smb/__init__.py
music_assistant/providers/fully_kiosk/__init__.py
music_assistant/providers/jellyfin/__init__.py
music_assistant/providers/plex/__init__.py
music_assistant/providers/plex/helpers.py
music_assistant/providers/radiobrowser/__init__.py
music_assistant/providers/test/__init__.py
music_assistant/providers/theaudiodb/__init__.py
music_assistant/providers/tidal/__init__.py
mypy.ini [deleted file]
pyproject.toml
tests/common.py
tests/conftest.py
tests/core/test_server_base.py
tests/core/test_tags.py
tests/providers/jellyfin/test_init.py
tests/providers/jellyfin/test_parsers.py

index 25aa0c6222b9d165bb6201103e5c58fd2814e0f0..1786e35e2499d7a0956f34202103bf3ba6a69b71 100644 (file)
@@ -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
 
 
index fa746715f112af5e7f101c38e10b7ec987f2acca..51691abeeea0841022d6a0c9155044f1ec9943e3 100644 (file)
@@ -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"
index e7a66201dd311ff3545b351c49f70a465b8118cd..a42416f6277ef981943403bef1f15363c0640de3 100644 (file)
@@ -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(
index b29b5b7121515dca99267263dddb90a244e1b055..3d2c9cfc1d2ae389da26eaf6aeb8e8167e2cd586 100644 (file)
@@ -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"
index bc49df356f9710b37bfb653597743a8c63e1ea49..6f7b2c2967cd34ccdaa125e7eff7a186a1f6d0a4 100644 (file)
@@ -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
index 8ccdd425cc6682cd8747691602c4857c92f02312..7c79b1e4ba4c8b890fa3f68316066860d424f64f 100644 (file)
@@ -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 (
index f6967b71e46b920f77933b6aaa1c67a4ae59668b..f5ccc32feac28b6eeb49731e8d86a2b2740cf280 100644 (file)
@@ -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"
index 0c303bcc9489833584e5ac3a4797fffa1dd89a86..98850835ba58666a1fdcc91018ae3a9a5eddae85 100644 (file)
@@ -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(
index 318c0aa24c2512ad095eb6daabdd3c077aca1b0c..03962792eb5d1eab87bca08fc6f3b120497e0ba8 100644 (file)
@@ -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"
index e04e629853cf74126f9c2dff2ec3915b46fe2d12..92f5756055bfc085e026e656d813bc382942c2e0 100644 (file)
@@ -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
 
 
index cfaca28be7df1390527da1a9f7983087736d33e2..ded4f5598e1b86dd5ce4290610376682b015ebac 100644 (file)
@@ -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 = {
index 2e0701084b7467befe0396569190d9eb1a432313..8dac82e168bbb0b0fa213706a83de1bc31e2b90b 100644 (file)
@@ -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 (file)
index aa3c624..0000000
--- 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
index 47716102dfaee0d19736ebf01769582845b891bd..459189f26fe85b88b687be32d7b4ed0f1dd04593 100644 (file)
@@ -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
index b2be5ddf806cb55383dafea08e68645c8ebbc6bf..52536b9722e1819d4adbee2e9e620bc85263d2f9 100644 (file)
@@ -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:
index de17ce16c1611daddd95b7c6ddf7f2560e71d6dd..2dc3e1f63934f12c783fbe23924a8fc3e6068ba9 100644 (file)
@@ -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")
index d408678728e036d29ea307c1cafd52735f929b8f..0bf116da638b926b687cb8af61f5173af3397de7 100644 (file)
@@ -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:
index d04a33f3ef18c8a7c0ed1cb36df2e440932d4cab..663b8eb1d514146ddc29a59073bb504edf5e5903 100644 (file)
@@ -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 == ()
index 792aa0eecbdb3c38d38db6ce4dced24091837501..4db3828b6943c28b533cfcc18755d064ae4b0d86 100644 (file)
@@ -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
 
 
index 7952cae5143ff3e33b59b416d4d534edfb7572ec..dc29cc5ecec4a6574dab5dbbbd32d854de757b63 100644 (file)
@@ -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