From 8c3d3603e28464e9b8f9a5405b940080f03bab69 Mon Sep 17 00:00:00 2001 From: Stein Magnus Jodal Date: Thu, 1 Jul 2010 01:54:11 +0200 Subject: [PATCH] Add lookup by CPID to CurrentPlaylistController.get() --- mopidy/backends/__init__.py | 12 +++++++++--- tests/backends/base.py | 6 ++++++ 2 files changed, 15 insertions(+), 3 deletions(-) diff --git a/mopidy/backends/__init__.py b/mopidy/backends/__init__.py index 41bb9d9e..50e87c77 100644 --- a/mopidy/backends/__init__.py +++ b/mopidy/backends/__init__.py @@ -136,6 +136,8 @@ class BaseCurrentPlaylistController(object): Examples:: + get(cpid=7) # Returns track with CPID 7 + # (current playlist ID) get(id=1) # Returns track with ID 1 get(uri='xyz') # Returns track with URI 'xyz' get(id=1, uri='xyz') # Returns track with ID 1 and URI 'xyz' @@ -144,11 +146,15 @@ class BaseCurrentPlaylistController(object): :type criteria: dict :rtype: :class:`mopidy.models.Track` """ - matches = self.tracks + matches = self._cp_tracks for (key, value) in criteria.iteritems(): - matches = filter(lambda t: getattr(t, key) == value, matches) + if key == 'cpid': + matches = filter(lambda ct: ct[0] == value, matches) + else: + matches = filter(lambda ct: getattr(ct[1], key) == value, + matches) if len(matches) == 1: - return matches[0] + return matches[0][1] # The track part of the only match criteria_string = ', '.join( ['%s=%s' % (k, v) for (k, v) in criteria.iteritems()]) if len(matches) == 0: diff --git a/tests/backends/base.py b/tests/backends/base.py index d436b7ca..1618a221 100644 --- a/tests/backends/base.py +++ b/tests/backends/base.py @@ -61,6 +61,12 @@ class BaseCurrentPlaylistControllerTest(object): for track in self.controller.tracks: self.assertNotEqual(None, track.id) + @populate_playlist + def test_get_by_cpid(self): + track = self.controller.tracks[1] + cpid = self.controller._cp_tracks[1][0] # XXX Messing in internals + self.assertEqual(track, self.controller.get(cpid=cpid)) + @populate_playlist def test_get_by_id(self): track = self.controller.tracks[1]