From 06856851f7a8ba348511389a43d4de679776ccdf Mon Sep 17 00:00:00 2001 From: Stein Magnus Jodal Date: Fri, 17 Jan 2014 23:43:43 +0100 Subject: [PATCH] local: Make search filters more robust (fixes #635) --- mopidy/local/search.py | 25 +++++++++++++------------ tests/data/library.json.gz | Bin 394 -> 411 bytes tests/local/test_library.py | 3 +++ 3 files changed, 16 insertions(+), 12 deletions(-) diff --git a/mopidy/local/search.py b/mopidy/local/search.py index 870afcfd..68d0a1f5 100644 --- a/mopidy/local/search.py +++ b/mopidy/local/search.py @@ -101,25 +101,26 @@ def search(tracks, query=None, uris=None): else: q = value.strip().lower() - uri_filter = lambda t: q in t.uri.lower() - track_name_filter = lambda t: q in t.name.lower() - album_filter = lambda t: q in getattr( - t, 'album', Album()).name.lower() - artist_filter = lambda t: filter( - lambda a: q in a.name.lower(), t.artists) + uri_filter = lambda t: bool(t.uri and q in t.uri.lower()) + track_name_filter = lambda t: bool(t.name and q in t.name.lower()) + album_filter = lambda t: bool( + t.album and t.album.name and q in t.album.name.lower()) + artist_filter = lambda t: bool(filter( + lambda a: bool(a.name and q in a.name.lower()), t.artists)) albumartist_filter = lambda t: any([ - q in a.name.lower() + a.name and q in a.name.lower() for a in getattr(t.album, 'artists', [])]) composer_filter = lambda t: any([ - q in a.name.lower() + a.name and q in a.name.lower() for a in getattr(t, 'composers', [])]) performer_filter = lambda t: any([ - q in a.name.lower() + a.name and q in a.name.lower() for a in getattr(t, 'performers', [])]) track_no_filter = lambda t: q == t.track_no - genre_filter = lambda t: t.genre and q in t.genre.lower() - date_filter = lambda t: t.date and t.date.startswith(q) - comment_filter = lambda t: t.comment and q in t.comment.lower() + genre_filter = lambda t: bool(t.genre and q in t.genre.lower()) + date_filter = lambda t: bool(t.date and t.date.startswith(q)) + comment_filter = lambda t: bool( + t.comment and q in t.comment.lower()) any_filter = lambda t: ( uri_filter(t) or track_name_filter(t) or diff --git a/tests/data/library.json.gz b/tests/data/library.json.gz index 07cd48d128bb4cffcdf379a74ce7bf66469830d7..768b828232aad2d295e6b76fb1e7cfd7f6d3af84 100644 GIT binary patch literal 411 zcmV;M0c8FkiwFqVvDs1r18iwxa$$0LE^2dcZUDuV-)@5-6vpp;3c~f;AXu05Ztt+W zr7_IX)=Z%Rx|_y#A5uk|)!ILh8e{M~hXd#PReFp7fLhZ0N5LidGH(DJ?bGPA{617h z?gS%cStZu2%rYax4;z2$qnuW(3D}A8FhZp+lOJCl?kgq&(qGcJrCJMmKg z!|o@0AMd>Dd*v2eQ*Bc*Lh%gY86v0b)(=m7ad^JiJ6}A>7vI4b2jh!x{u z?_|j&S#k$i5{zteBiWH}HWyXJxVCQW3I)tf!G>~8l`e9i&mDU1ci^`A0FGo5M{)s2 zibi-O!FZ4xc_gDe_Chh~Z$pb~8+skk#U#+h)c3VzT-t(m5QjLrp6M{{^*xgtAuFF) z(`#5q98K?Y)YqTE!$-b{GyQ@SjgKW$s_ianjf1}iPa$}dj^^?E9KooL{s0x{M@`WR F005VN$`=3t literal 394 zcmV;50d@W#iwFoGcb`%M|7>Yua$$0LE^2dcZUDuVOKyWO5Qg`h!t%O_{2)}yu6O9J zijYg3fC@G;PB$obuW^DQY6#F^6(KbIGak>($DA zPL__6r8CG2`X+D;?QDqv0q4oqlP=_~>Ic0$iR2d>mV;0Q-?gm-X6 zXn;rPjR&2`BOK&W%8IMy3fep>=>LFjMuBd|-mfDU$|kf1_VMX@ro*VyORf%56-#1` o9$_7rXf$u4?av^%riS09flP`f0Il)s8o}WF0}y$t#qtRN0Om2m9{>OV diff --git a/tests/local/test_library.py b/tests/local/test_library.py index 3a0ed090..575f1fb8 100644 --- a/tests/local/test_library.py +++ b/tests/local/test_library.py @@ -24,6 +24,7 @@ class LocalLibraryProviderTest(unittest.TestCase): Artist(name='artist4'), Artist(name='artist5'), Artist(name='artist6'), + Artist(), ] albums = [ @@ -31,6 +32,7 @@ class LocalLibraryProviderTest(unittest.TestCase): Album(name='album2', artists=[artists[1]]), Album(name='album3', artists=[artists[2]]), Album(name='album4'), + Album(artists=[artists[-1]]), ] tracks = [ @@ -57,6 +59,7 @@ class LocalLibraryProviderTest(unittest.TestCase): Track( uri='local:track:path6', name='track6', genre='genre2', album=albums[3], length=4000, performers=[artists[5]]), + Track(uri='local:track:nameless', album=albums[-1]), ] config = {