diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index c6038a4..aa44ad9 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -27,9 +27,9 @@ jobs: python: "3.14" tox: "3.14" coverage: true - # - name: "pyright" - # python: "3.14" - # tox: "pyright" + - name: "pyright" + python: "3.14" + tox: "pyright" - name: "ruff check" python: "3.14" tox: "ruff-check" diff --git a/pyproject.toml b/pyproject.toml index 762bdc9..40b0ecb 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -14,7 +14,7 @@ classifiers = [ ] dynamic = ["version"] dependencies = [ - "mopidy >= 4.0.0a8", + "mopidy >= 4.0.0a10", "pygobject >= 3.50", "pykka >= 4.1", ] diff --git a/src/mopidy_mpd/network.py b/src/mopidy_mpd/network.py index 0573c29..fff1002 100644 --- a/src/mopidy_mpd/network.py +++ b/src/mopidy_mpd/network.py @@ -11,7 +11,9 @@ from typing import TYPE_CHECKING, Any, Never import pykka -from gi.repository import GLib # pyright: ignore[reportMissingModuleSource] +from gi.repository import ( + GLib, # pyright: ignore[reportAttributeAccessIssue, reportMissingModuleSource] +) logger = logging.getLogger(__name__) diff --git a/src/mopidy_mpd/protocol/current_playlist.py b/src/mopidy_mpd/protocol/current_playlist.py index dad7e6d..e5d0cd4 100644 --- a/src/mopidy_mpd/protocol/current_playlist.py +++ b/src/mopidy_mpd/protocol/current_playlist.py @@ -3,6 +3,8 @@ from typing import TYPE_CHECKING from urllib.parse import urlparse +from mopidy.types import TracklistId + from mopidy_mpd import exceptions, protocol, translator if TYPE_CHECKING: @@ -153,7 +155,7 @@ def moveid(context: MpdContext, tlid: int, to: int) -> None: the playlist. If ``TO`` is negative, it is relative to the current song in the playlist (if there is one). """ - position = context.core.tracklist.index(tlid=tlid).get() + position = context.core.tracklist.index(tlid=TracklistId(tlid)).get() if position is None: raise exceptions.MpdNoExistError("No such song") context.core.tracklist.move(position, position + 1, to) @@ -428,8 +430,8 @@ def swapid(context: MpdContext, tlid1: int, tlid2: int) -> None: Swaps the positions of ``SONG1`` and ``SONG2`` (both song ids). """ - position1 = context.core.tracklist.index(tlid=tlid1).get() - position2 = context.core.tracklist.index(tlid=tlid2).get() + position1 = context.core.tracklist.index(tlid=TracklistId(tlid1)).get() + position2 = context.core.tracklist.index(tlid=TracklistId(tlid2)).get() if position1 is None or position2 is None: raise exceptions.MpdNoExistError("No such song") swap(context, position1, position2) diff --git a/src/mopidy_mpd/protocol/music_db.py b/src/mopidy_mpd/protocol/music_db.py index 3c28a3d..0f3db3b 100644 --- a/src/mopidy_mpd/protocol/music_db.py +++ b/src/mopidy_mpd/protocol/music_db.py @@ -98,7 +98,7 @@ def _artist_as_track(artist: Artist) -> Track: return Track( uri=artist.uri, name=f"Artist: {artist.name}", - artists=[artist], + artists=frozenset([artist]), ) @@ -192,7 +192,7 @@ def findadd(context: MpdContext, *args: str) -> None: return results = context.core.library.search(query=query, exact=True).get() - uris = [track.uri for track in _get_tracks(results)] + uris = [track.uri for track in _get_tracks(results) if track.uri is not None] context.core.tracklist.add(uris=uris).get() @@ -498,8 +498,8 @@ def searchadd(context: MpdContext, *args: str) -> None: return results = context.core.library.search(query).get() - - context.core.tracklist.add(uris=[track.uri for track in _get_tracks(results)]).get() + uris = [track.uri for track in _get_tracks(results) if track.uri is not None] + context.core.tracklist.add(uris=uris).get() @protocol.commands.add("searchaddpl") diff --git a/src/mopidy_mpd/protocol/stored_playlists.py b/src/mopidy_mpd/protocol/stored_playlists.py index 168fc91..46042d7 100644 --- a/src/mopidy_mpd/protocol/stored_playlists.py +++ b/src/mopidy_mpd/protocol/stored_playlists.py @@ -65,7 +65,7 @@ def listplaylist(context: MpdContext, name: str) -> protocol.Result: file: relative/path/to/file3.mp3 """ playlist = _get_playlist(context, name, must_exist=True) - return [("file", track.uri) for track in playlist.tracks] + return [("file", track.uri) for track in playlist.tracks if track.uri is not None] @protocol.commands.add("listplaylistinfo") @@ -83,7 +83,7 @@ def listplaylistinfo(context: MpdContext, name: str) -> protocol.Result: Album, Artist, Track """ playlist = _get_playlist(context, name, must_exist=True) - track_uris = [track.uri for track in playlist.tracks] + track_uris = [track.uri for track in playlist.tracks if track.uri is not None] tracks_map = context.core.library.lookup(uris=track_uris).get() tracks = [] for uri in track_uris: @@ -180,7 +180,7 @@ def load( "tuple[Track]", playlist.tracks[playlist_slice], # pyright: ignore[reportIndexIssue] ) - track_uris = [track.uri for track in tracks] + track_uris = [track.uri for track in tracks if track.uri is not None] context.core.tracklist.add(uris=track_uris).get() @@ -358,6 +358,7 @@ def rename(context: MpdContext, old_name: str, new_name: str) -> None: _check_playlist_name(new_name) old_playlist = _get_playlist(context, old_name, must_exist=True) + assert old_playlist.uri if _get_playlist(context, new_name, must_exist=False): raise exceptions.MpdExistError("Playlist already exists")