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 07cd48d1..768b8282 100644 Binary files a/tests/data/library.json.gz and b/tests/data/library.json.gz differ 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 = {