diff --git a/docs/changelog.rst b/docs/changelog.rst index c997d1f4..b95b6e00 100644 --- a/docs/changelog.rst +++ b/docs/changelog.rst @@ -21,8 +21,8 @@ v0.15.0 (UNRELEASED) mark songs, some Playback properties have been converted into functions and both functions and properties have been moved into Tracklist to have more modularity: - - Properties converted into functions that need arguments: - :meth:`tracklist_position` + - Properties merged into functions: :attr:`tracklist_position` merged to + :meth:`index` - Properties moved: :attr:`random`, :attr:`repeat`, :attr:`consume` and :attr:`single` - Method created from properties: :meth:`next_track` from diff --git a/mopidy/core/tracklist.py b/mopidy/core/tracklist.py index 51d45e81..ebac89e8 100644 --- a/mopidy/core/tracklist.py +++ b/mopidy/core/tracklist.py @@ -133,14 +133,14 @@ class TracklistController(object): Playback continues after current song. """ - def tracklist_position(self, tl_track): + def index(self, tl_track): """ The position of the given track in the tracklist. """ if tl_track is None: return None try: - return self.tl_tracks.index(tl_track) + return self._tl_tracks.index(tl_track) except ValueError: return None @@ -172,7 +172,7 @@ class TracklistController(object): if tl_track is None: return self.tl_tracks[0] - position = self.tracklist_position(tl_track) + position = self.index(tl_track) if self.repeat and self.single: return self.tl_tracks[position] @@ -214,7 +214,7 @@ class TracklistController(object): if tl_track is None: return self.tl_tracks[0] - position = self.tracklist_position(tl_track) + position = self.index(tl_track) if self.repeat: return self.tl_tracks[(position + 1) % len(self.tl_tracks)] @@ -240,7 +240,7 @@ class TracklistController(object): if self.repeat or self.consume or self.random: return tl_track - position = self.tracklist_position(tl_track) + position = self.index(tl_track) if position in (None, 0): return None @@ -335,18 +335,6 @@ class TracklistController(object): lambda ct: getattr(ct.track, key) == value, matches) return matches - def index(self, tl_track): - """ - Get index of the given :class:`mopidy.models.TlTrack` in the tracklist. - - Raises :exc:`ValueError` if not found. - - :param tl_track: track to find the index of - :type tl_track: :class:`mopidy.models.TlTrack` - :rtype: int - """ - return self._tl_tracks.index(tl_track) - def move(self, start, end, to_position): """ Move the tracks in the slice ``[start:end]`` to ``to_position``. diff --git a/mopidy/frontends/mpd/protocol/playback.py b/mopidy/frontends/mpd/protocol/playback.py index 06a456d9..b9289d8a 100644 --- a/mopidy/frontends/mpd/protocol/playback.py +++ b/mopidy/frontends/mpd/protocol/playback.py @@ -330,7 +330,7 @@ def seek(context, songpos, seconds): - issues ``seek 1 120`` without quotes around the arguments. """ tl_track = context.core.playback.current_tl_track.get() - if context.core.tracklist.tracklist_position(tl_track).get() != int(songpos): + if context.core.tracklist.index(tl_track).get() != int(songpos): playpos(context, songpos) context.core.playback.seek(int(seconds) * 1000).get() diff --git a/mopidy/frontends/mpd/protocol/status.py b/mopidy/frontends/mpd/protocol/status.py index 8f2207f6..49e08ee8 100644 --- a/mopidy/frontends/mpd/protocol/status.py +++ b/mopidy/frontends/mpd/protocol/status.py @@ -38,7 +38,7 @@ def currentsong(context): """ tl_track = context.core.playback.current_tl_track.get() if tl_track is not None: - position = context.core.tracklist.tracklist_position(tl_track).get() + position = context.core.tracklist.index(tl_track).get() return track_to_mpd_format(tl_track, position=position) @@ -184,8 +184,8 @@ def status(context): 'tracklist.single': context.core.tracklist.single, 'playback.state': context.core.playback.state, 'playback.current_tl_track': context.core.playback.current_tl_track, - 'tracklist.tracklist_position': ( - context.core.tracklist.tracklist_position( + 'tracklist.index': ( + context.core.tracklist.index( context.core.playback.current_tl_track.get())), 'playback.time_position': context.core.playback.time_position, } @@ -254,7 +254,7 @@ def _status_songid(futures): def _status_songpos(futures): - return futures['tracklist.tracklist_position'].get() + return futures['tracklist.index'].get() def _status_state(futures): diff --git a/tests/backends/base/playback.py b/tests/backends/base/playback.py index 4436ac6c..0b40f8cf 100644 --- a/tests/backends/base/playback.py +++ b/tests/backends/base/playback.py @@ -180,14 +180,14 @@ class PlaybackControllerTest(object): self.playback.play() tl_track = self.playback.current_tl_track - old_position = self.tracklist.tracklist_position(tl_track) + old_position = self.tracklist.index(tl_track) old_uri = tl_track.track.uri self.playback.next() tl_track = self.playback.current_tl_track self.assertEqual( - self.tracklist.tracklist_position(tl_track), old_position + 1) + self.tracklist.index(tl_track), old_position + 1) self.assertNotEqual(self.playback.current_track.uri, old_uri) @populate_tracklist @@ -208,7 +208,7 @@ class PlaybackControllerTest(object): self.assertEqual(self.playback.state, PlaybackState.PLAYING) self.assertEqual(self.playback.current_track, track) tl_track = self.playback.current_tl_track - self.assertEqual(self.tracklist.tracklist_position(tl_track), i) + self.assertEqual(self.tracklist.index(tl_track), i) self.playback.next() @@ -328,14 +328,14 @@ class PlaybackControllerTest(object): self.playback.play() tl_track = self.playback.current_tl_track - old_position = self.tracklist.tracklist_position(tl_track) + old_position = self.tracklist.index(tl_track) old_uri = tl_track.track.uri self.playback.on_end_of_track() tl_track = self.playback.current_tl_track self.assertEqual( - self.tracklist.tracklist_position(tl_track), old_position + 1) + self.tracklist.index(tl_track), old_position + 1) self.assertNotEqual(self.playback.current_track.uri, old_uri) @populate_tracklist @@ -356,7 +356,7 @@ class PlaybackControllerTest(object): self.assertEqual(self.playback.state, PlaybackState.PLAYING) self.assertEqual(self.playback.current_track, track) tl_track = self.playback.current_tl_track - self.assertEqual(self.tracklist.tracklist_position(tl_track), i) + self.assertEqual(self.tracklist.index(tl_track), i) self.playback.on_end_of_track() @@ -528,29 +528,29 @@ class PlaybackControllerTest(object): self.assertEqual(self.playback.current_track, self.tracks[1]) @populate_tracklist - def test_initial_tracklist_position(self): + def test_initial_index(self): tl_track = self.playback.current_tl_track - self.assertEqual(self.tracklist.tracklist_position(tl_track), None) + self.assertEqual(self.tracklist.index(tl_track), None) @populate_tracklist - def test_tracklist_position_during_play(self): + def test_index_during_play(self): self.playback.play() tl_track = self.playback.current_tl_track - self.assertEqual(self.tracklist.tracklist_position(tl_track), 0) + self.assertEqual(self.tracklist.index(tl_track), 0) @populate_tracklist - def test_tracklist_position_after_next(self): + def test_index_after_next(self): self.playback.play() self.playback.next() tl_track = self.playback.current_tl_track - self.assertEqual(self.tracklist.tracklist_position(tl_track), 1) + self.assertEqual(self.tracklist.index(tl_track), 1) @populate_tracklist - def test_tracklist_position_at_end_of_playlist(self): + def test_index_at_end_of_playlist(self): self.playback.play(self.tracklist.tl_tracks[-1]) self.playback.on_end_of_track() tl_track = self.playback.current_tl_track - self.assertEqual(self.tracklist.tracklist_position(tl_track), None) + self.assertEqual(self.tracklist.index(tl_track), None) def test_on_tracklist_change_gets_called(self): callback = self.playback.on_tracklist_change diff --git a/tests/backends/base/tracklist.py b/tests/backends/base/tracklist.py index 5140d3aa..dd56e9e3 100644 --- a/tests/backends/base/tracklist.py +++ b/tests/backends/base/tracklist.py @@ -165,9 +165,9 @@ class TracklistControllerTest(object): self.assertEquals(1, self.controller.index(tl_tracks[1])) self.assertEquals(2, self.controller.index(tl_tracks[2])) - def test_index_raises_value_error_if_item_not_found(self): - test = lambda: self.controller.index(TlTrack(0, Track())) - self.assertRaises(ValueError, test) + def test_index_returns_none_if_item_not_found(self): + index = self.controller.index(TlTrack(0, Track())) + self.assertEquals(None, index) @populate_tracklist def test_move_single(self): diff --git a/tests/utils/jsonrpc_test.py b/tests/utils/jsonrpc_test.py index a0709ebc..2df8b0ba 100644 --- a/tests/utils/jsonrpc_test.py +++ b/tests/utils/jsonrpc_test.py @@ -313,7 +313,7 @@ class JsonRpcBatchTest(JsonRpcTestBase): class JsonRpcSingleCommandErrorTest(JsonRpcTestBase): - def test_application_error_response(self): + def test_application_error_response_is_none(self): request = { 'jsonrpc': '2.0', 'method': 'core.tracklist.index', @@ -322,17 +322,11 @@ class JsonRpcSingleCommandErrorTest(JsonRpcTestBase): } response = self.jrw.handle_data(request) - self.assertNotIn('result', response) + print response + self.assertIn('result', response) - error = response['error'] - self.assertEqual(error['code'], 0) - self.assertEqual(error['message'], 'Application error') - - data = error['data'] - self.assertEqual(data['type'], 'ValueError') - self.assertIn('not in list', data['message']) - self.assertIn('traceback', data) - self.assertIn('Traceback (most recent call last):', data['traceback']) + result = response['result'] + self.assertEqual(result, None) def test_missing_jsonrpc_member_causes_invalid_request_error(self): request = {