From a5b454acc0087197963ddc7874866abd11582a45 Mon Sep 17 00:00:00 2001 From: Fred Hatfull Date: Wed, 31 Oct 2012 23:45:13 -0700 Subject: [PATCH 1/3] Fixes support for MPD find/search by filename Extends `find_exact` and `search` in mopidy.backends.local.library to support the `filename` query field. This field can get passed in from the MPD frontend and would break with a `LookupError` when used. This patch fixes the issue and introduces two new tests to cover the added functionality. --- mopidy/backends/local/library.py | 4 ++-- tests/backends/base/library.py | 16 ++++++++++++++++ 2 files changed, 18 insertions(+), 2 deletions(-) diff --git a/mopidy/backends/local/library.py b/mopidy/backends/local/library.py index 600bfaaa..db37edb3 100644 --- a/mopidy/backends/local/library.py +++ b/mopidy/backends/local/library.py @@ -59,7 +59,7 @@ class LocalLibraryProvider(base.BaseLibraryProvider): result_tracks = filter(album_filter, result_tracks) elif field == 'artist': result_tracks = filter(artist_filter, result_tracks) - elif field == 'uri': + elif field == 'uri' or field == 'filename': result_tracks = filter(uri_filter, result_tracks) elif field == 'any': result_tracks = filter(any_filter, result_tracks) @@ -93,7 +93,7 @@ class LocalLibraryProvider(base.BaseLibraryProvider): result_tracks = filter(album_filter, result_tracks) elif field == 'artist': result_tracks = filter(artist_filter, result_tracks) - elif field == 'uri': + elif field == 'uri' or field == 'filename': result_tracks = filter(uri_filter, result_tracks) elif field == 'any': result_tracks = filter(any_filter, result_tracks) diff --git a/tests/backends/base/library.py b/tests/backends/base/library.py index cc2a0004..b7510dbb 100644 --- a/tests/backends/base/library.py +++ b/tests/backends/base/library.py @@ -79,6 +79,15 @@ class LibraryControllerTest(object): result = self.library.find_exact(album=['album2']) self.assertEqual(result, Playlist(tracks=self.tracks[1:2])) + def test_find_exact_filename(self): + track_1_filename = 'file://' + path_to_data_dir('uri1') + result = self.library.find_exact(filename=track_1_filename) + self.assertEqual(result, Playlist(tracks=self.tracks[:1])) + + track_2_filename = 'file://' + path_to_data_dir('uri2') + result = self.library.find_exact(filename=track_2_filename) + self.assertEqual(result, Playlist(tracks=self.tracks[1:2])) + def test_find_exact_wrong_type(self): test = lambda: self.library.find_exact(wrong=['test']) self.assertRaises(LookupError, test) @@ -137,6 +146,13 @@ class LibraryControllerTest(object): result = self.library.search(uri=['RI2']) self.assertEqual(result, Playlist(tracks=self.tracks[1:2])) + def test_search_filename(self): + result = self.library.search(filename=['RI1']) + self.assertEqual(result, Playlist(tracks=self.tracks[:1])) + + result = self.library.search(filename=['RI2']) + self.assertEqual(result, Playlist(tracks=self.tracks[1:2])) + def test_search_any(self): result = self.library.search(any=['Tist1']) self.assertEqual(result, Playlist(tracks=self.tracks[:1])) From c291c9c83e6429981ebc38714adc4eb23fb383af Mon Sep 17 00:00:00 2001 From: Stein Magnus Jodal Date: Thu, 1 Nov 2012 19:36:11 +0100 Subject: [PATCH 2/3] Style fix --- mopidy/backends/local/library.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mopidy/backends/local/library.py b/mopidy/backends/local/library.py index db37edb3..09484ed0 100644 --- a/mopidy/backends/local/library.py +++ b/mopidy/backends/local/library.py @@ -59,7 +59,7 @@ class LocalLibraryProvider(base.BaseLibraryProvider): result_tracks = filter(album_filter, result_tracks) elif field == 'artist': result_tracks = filter(artist_filter, result_tracks) - elif field == 'uri' or field == 'filename': + elif field in ('uri', 'filename'): result_tracks = filter(uri_filter, result_tracks) elif field == 'any': result_tracks = filter(any_filter, result_tracks) From 3ce986f61986670152f417946f5c6034b9613132 Mon Sep 17 00:00:00 2001 From: Stein Magnus Jodal Date: Thu, 1 Nov 2012 19:36:24 +0100 Subject: [PATCH 3/3] Update changelog with search by filename --- docs/changes.rst | 2 ++ 1 file changed, 2 insertions(+) diff --git a/docs/changes.rst b/docs/changes.rst index 0203a89f..f3b2a25d 100644 --- a/docs/changes.rst +++ b/docs/changes.rst @@ -68,6 +68,8 @@ backends: - The Spotify backend now includes release year and artist on albums. +- Added support for search by filename to local backend. + v0.8.1 (2012-10-30) ===================