From f73d328df918a03bd34cf498f50bf8c215452c2f Mon Sep 17 00:00:00 2001 From: Lasse Bigum Date: Thu, 31 Oct 2013 22:33:48 +0100 Subject: [PATCH 1/3] Split artist and albumartist dependency, update tests based on this --- mopidy/backends/local/translator.py | 1 - mopidy/frontends/mpd/translator.py | 5 ++--- tests/backends/local/library_test.py | 18 +++++++++++++++-- tests/backends/local/translator_test.py | 26 +++++++++++++------------ tests/data/advanced_tag_cache | 5 +++++ tests/data/library_tag_cache | 10 ++++++++++ tests/data/simple_tag_cache | 1 + tests/data/utf8_tag_cache | 1 + 8 files changed, 49 insertions(+), 18 deletions(-) diff --git a/mopidy/backends/local/translator.py b/mopidy/backends/local/translator.py index 7cd46fbb50..3a02a8afc8 100644 --- a/mopidy/backends/local/translator.py +++ b/mopidy/backends/local/translator.py @@ -120,7 +120,6 @@ def _convert_mpd_data(data, tracks): if 'artist' in data: artist_kwargs['name'] = data['artist'] - albumartist_kwargs['name'] = data['artist'] if 'albumartist' in data: albumartist_kwargs['name'] = data['albumartist'] diff --git a/mopidy/frontends/mpd/translator.py b/mopidy/frontends/mpd/translator.py index 9b3313950f..d25cad4437 100644 --- a/mopidy/frontends/mpd/translator.py +++ b/mopidy/frontends/mpd/translator.py @@ -44,9 +44,6 @@ def track_to_mpd_format(track, position=None): track.track_no, track.album.num_tracks))) else: result.append(('Track', track.track_no)) - if track.album is not None and track.album.artists: - artists = artists_to_mpd_format(track.album.artists) - result.append(('AlbumArtist', artists)) if position is not None and tlid is not None: result.append(('Pos', position)) result.append(('Id', tlid)) @@ -55,6 +52,8 @@ def track_to_mpd_format(track, position=None): # FIXME don't use first and best artist? # FIXME don't duplicate following code? if track.album is not None and track.album.artists: + artists = artists_to_mpd_format(track.album.artists) + result.append(('AlbumArtist', artists)) artists = filter( lambda a: a.musicbrainz_id is not None, track.album.artists) if artists: diff --git a/tests/backends/local/library_test.py b/tests/backends/local/library_test.py index 1cb0745103..63bc4a618c 100644 --- a/tests/backends/local/library_test.py +++ b/tests/backends/local/library_test.py @@ -26,6 +26,7 @@ class LocalLibraryProviderTest(unittest.TestCase): Album(name='album1', artists=[artists[0]]), Album(name='album2', artists=[artists[1]]), Album(name='album3', artists=[artists[2]]), + Album(name='album4'), ] tracks = [ @@ -41,6 +42,10 @@ class LocalLibraryProviderTest(unittest.TestCase): uri='local:track:path3', name='track3', artists=[artists[3]], album=albums[2], date='2003', length=4000, track_no=3), + Track( + uri='local:track:path4', name='track4', + artists=[artists[2]], album=albums[3], + date='2004', length=60000, track_no=4), ] config = { @@ -108,6 +113,9 @@ def test_find_exact_no_hits(self): result = self.library.find_exact(artist=['unknown artist']) self.assertEqual(list(result[0].tracks), []) + result = self.library.find_exact(albumartist=['unknown artist']) + self.assertEqual(list(result[0].tracks), []) + result = self.library.find_exact(album=['unknown artist']) self.assertEqual(list(result[0].tracks), []) @@ -146,6 +154,12 @@ def test_find_exact_artist(self): result = self.library.find_exact(artist=['artist2']) self.assertEqual(list(result[0].tracks), self.tracks[1:2]) + import logging + logger = logging.getLogger('mopidy.backends.local') + logger.debug("==TEST= tracks: {}".format(self.tracks[2:3])) + result = self.library.find_exact(artist=['artist3']) + self.assertEqual(list(result[0].tracks), self.tracks[3:4]) + def test_find_exact_album(self): result = self.library.find_exact(album=['album1']) self.assertEqual(list(result[0].tracks), self.tracks[:1]) @@ -204,7 +218,7 @@ def test_find_exact_any(self): # Matches on track album artists result = self.library.find_exact(any=['artist3']) - self.assertEqual(list(result[0].tracks), self.tracks[2:3]) + self.assertEqual(list(result[0].tracks), [self.tracks[3], self.tracks[2]]) # Matches on track year result = self.library.find_exact(any=['2002']) @@ -338,7 +352,7 @@ def test_search_any(self): # Matches on track album artists result = self.library.search(any=['Tist3']) - self.assertEqual(list(result[0].tracks), self.tracks[2:3]) + self.assertEqual(list(result[0].tracks), [self.tracks[3], self.tracks[2]]) # Matches on URI result = self.library.search(any=['TH1']) diff --git a/tests/backends/local/translator_test.py b/tests/backends/local/translator_test.py index 5ed07fcaf8..1719500cae 100644 --- a/tests/backends/local/translator_test.py +++ b/tests/backends/local/translator_test.py @@ -93,28 +93,30 @@ class URItoM3UTest(unittest.TestCase): expected_artists = [Artist(name='name')] expected_albums = [ - Album(name='albumname', artists=expected_artists, num_tracks=2)] + Album(name='albumname', artists=expected_artists, num_tracks=2), + Album(name='albumname', num_tracks=2) + ] expected_tracks = [] -def generate_track(path, ident): +def generate_track(path, ident, album_id): uri = 'local:track:%s' % path track = Track( uri=uri, name='trackname', artists=expected_artists, - album=expected_albums[0], track_no=1, date='2006', length=4000, + album=expected_albums[album_id], track_no=1, date='2006', length=4000, last_modified=1272319626) expected_tracks.append(track) -generate_track('song1.mp3', 6) -generate_track('song2.mp3', 7) -generate_track('song3.mp3', 8) -generate_track('subdir1/song4.mp3', 2) -generate_track('subdir1/song5.mp3', 3) -generate_track('subdir2/song6.mp3', 4) -generate_track('subdir2/song7.mp3', 5) -generate_track('subdir1/subsubdir/song8.mp3', 0) -generate_track('subdir1/subsubdir/song9.mp3', 1) +generate_track('song1.mp3', 6, 0) +generate_track('song2.mp3', 7, 0) +generate_track('song3.mp3', 8, 1) +generate_track('subdir1/song4.mp3', 2, 0) +generate_track('subdir1/song5.mp3', 3, 0) +generate_track('subdir2/song6.mp3', 4, 1) +generate_track('subdir2/song7.mp3', 5, 1) +generate_track('subdir1/subsubdir/song8.mp3', 0, 0) +generate_track('subdir1/subsubdir/song9.mp3', 1, 1) class MPDTagCacheToTracksTest(unittest.TestCase): diff --git a/tests/data/advanced_tag_cache b/tests/data/advanced_tag_cache index 3288275f80..be299fb689 100644 --- a/tests/data/advanced_tag_cache +++ b/tests/data/advanced_tag_cache @@ -11,6 +11,7 @@ key: song8.mp3 file: subdir1/subsubdir/song8.mp3 Time: 4 Artist: name +AlbumArtist: name Title: trackname Album: albumname Track: 1/2 @@ -32,6 +33,7 @@ key: song4.mp3 file: subdir1/song4.mp3 Time: 4 Artist: name +AlbumArtist: name Title: trackname Album: albumname Track: 1/2 @@ -41,6 +43,7 @@ key: song5.mp3 file: subdir1/song5.mp3 Time: 4 Artist: name +AlbumArtist: name Title: trackname Album: albumname Track: 1/2 @@ -76,6 +79,7 @@ key: song1.mp3 file: /song1.mp3 Time: 4 Artist: name +AlbumArtist: name Title: trackname Album: albumname Track: 1/2 @@ -85,6 +89,7 @@ key: song2.mp3 file: /song2.mp3 Time: 4 Artist: name +AlbumArtist: name Title: trackname Album: albumname Track: 1/2 diff --git a/tests/data/library_tag_cache b/tests/data/library_tag_cache index e9e87c1b2c..904c5e5710 100644 --- a/tests/data/library_tag_cache +++ b/tests/data/library_tag_cache @@ -6,6 +6,7 @@ songList begin key: key1 file: /path1 Artist: artist1 +AlbumArtist: artist1 Title: track1 Album: album1 Date: 2001-02-03 @@ -14,6 +15,7 @@ Time: 4 key: key2 file: /path2 Artist: artist2 +AlbumArtist: artist2 Title: track2 Album: album2 Date: 2002 @@ -28,4 +30,12 @@ Album: album3 Date: 2003 Track: 3 Time: 4 +key: key4 +file: /path4 +Artist: artist3 +Title: track4 +Album: album4 +Date: 2004 +Track: 4 +Time: 60 songList end diff --git a/tests/data/simple_tag_cache b/tests/data/simple_tag_cache index cc71ac6dfc..07a474b3fb 100644 --- a/tests/data/simple_tag_cache +++ b/tests/data/simple_tag_cache @@ -7,6 +7,7 @@ key: song1.mp3 file: /song1.mp3 Time: 4 Artist: name +AlbumArtist: name Title: trackname Album: albumname Track: 1/2 diff --git a/tests/data/utf8_tag_cache b/tests/data/utf8_tag_cache index 6642ec77e8..6f6abe600d 100644 --- a/tests/data/utf8_tag_cache +++ b/tests/data/utf8_tag_cache @@ -7,6 +7,7 @@ key: song1.mp3 file: /song1.mp3 Time: 4 Artist: æøå +AlbumArtist: æøå Title: æøå Album: æøå mtime: 1272319626 From e99f0cb13bfe7b125443c666c0dcc7c9c3a0bb02 Mon Sep 17 00:00:00 2001 From: Lasse Bigum Date: Thu, 31 Oct 2013 22:33:48 +0100 Subject: [PATCH 2/3] Split artist and albumartist dependency, update tests based on this --- mopidy/backends/local/translator.py | 1 - mopidy/frontends/mpd/translator.py | 5 ++--- tests/backends/local/library_test.py | 18 +++++++++++++++-- tests/backends/local/translator_test.py | 26 +++++++++++++------------ tests/data/advanced_tag_cache | 5 +++++ tests/data/library_tag_cache | 10 ++++++++++ tests/data/simple_tag_cache | 1 + tests/data/utf8_tag_cache | 1 + 8 files changed, 49 insertions(+), 18 deletions(-) diff --git a/mopidy/backends/local/translator.py b/mopidy/backends/local/translator.py index 7cd46fbb50..3a02a8afc8 100644 --- a/mopidy/backends/local/translator.py +++ b/mopidy/backends/local/translator.py @@ -120,7 +120,6 @@ def _convert_mpd_data(data, tracks): if 'artist' in data: artist_kwargs['name'] = data['artist'] - albumartist_kwargs['name'] = data['artist'] if 'albumartist' in data: albumartist_kwargs['name'] = data['albumartist'] diff --git a/mopidy/frontends/mpd/translator.py b/mopidy/frontends/mpd/translator.py index 9b3313950f..d25cad4437 100644 --- a/mopidy/frontends/mpd/translator.py +++ b/mopidy/frontends/mpd/translator.py @@ -44,9 +44,6 @@ def track_to_mpd_format(track, position=None): track.track_no, track.album.num_tracks))) else: result.append(('Track', track.track_no)) - if track.album is not None and track.album.artists: - artists = artists_to_mpd_format(track.album.artists) - result.append(('AlbumArtist', artists)) if position is not None and tlid is not None: result.append(('Pos', position)) result.append(('Id', tlid)) @@ -55,6 +52,8 @@ def track_to_mpd_format(track, position=None): # FIXME don't use first and best artist? # FIXME don't duplicate following code? if track.album is not None and track.album.artists: + artists = artists_to_mpd_format(track.album.artists) + result.append(('AlbumArtist', artists)) artists = filter( lambda a: a.musicbrainz_id is not None, track.album.artists) if artists: diff --git a/tests/backends/local/library_test.py b/tests/backends/local/library_test.py index 1cb0745103..63bc4a618c 100644 --- a/tests/backends/local/library_test.py +++ b/tests/backends/local/library_test.py @@ -26,6 +26,7 @@ class LocalLibraryProviderTest(unittest.TestCase): Album(name='album1', artists=[artists[0]]), Album(name='album2', artists=[artists[1]]), Album(name='album3', artists=[artists[2]]), + Album(name='album4'), ] tracks = [ @@ -41,6 +42,10 @@ class LocalLibraryProviderTest(unittest.TestCase): uri='local:track:path3', name='track3', artists=[artists[3]], album=albums[2], date='2003', length=4000, track_no=3), + Track( + uri='local:track:path4', name='track4', + artists=[artists[2]], album=albums[3], + date='2004', length=60000, track_no=4), ] config = { @@ -108,6 +113,9 @@ def test_find_exact_no_hits(self): result = self.library.find_exact(artist=['unknown artist']) self.assertEqual(list(result[0].tracks), []) + result = self.library.find_exact(albumartist=['unknown artist']) + self.assertEqual(list(result[0].tracks), []) + result = self.library.find_exact(album=['unknown artist']) self.assertEqual(list(result[0].tracks), []) @@ -146,6 +154,12 @@ def test_find_exact_artist(self): result = self.library.find_exact(artist=['artist2']) self.assertEqual(list(result[0].tracks), self.tracks[1:2]) + import logging + logger = logging.getLogger('mopidy.backends.local') + logger.debug("==TEST= tracks: {}".format(self.tracks[2:3])) + result = self.library.find_exact(artist=['artist3']) + self.assertEqual(list(result[0].tracks), self.tracks[3:4]) + def test_find_exact_album(self): result = self.library.find_exact(album=['album1']) self.assertEqual(list(result[0].tracks), self.tracks[:1]) @@ -204,7 +218,7 @@ def test_find_exact_any(self): # Matches on track album artists result = self.library.find_exact(any=['artist3']) - self.assertEqual(list(result[0].tracks), self.tracks[2:3]) + self.assertEqual(list(result[0].tracks), [self.tracks[3], self.tracks[2]]) # Matches on track year result = self.library.find_exact(any=['2002']) @@ -338,7 +352,7 @@ def test_search_any(self): # Matches on track album artists result = self.library.search(any=['Tist3']) - self.assertEqual(list(result[0].tracks), self.tracks[2:3]) + self.assertEqual(list(result[0].tracks), [self.tracks[3], self.tracks[2]]) # Matches on URI result = self.library.search(any=['TH1']) diff --git a/tests/backends/local/translator_test.py b/tests/backends/local/translator_test.py index 5ed07fcaf8..1719500cae 100644 --- a/tests/backends/local/translator_test.py +++ b/tests/backends/local/translator_test.py @@ -93,28 +93,30 @@ class URItoM3UTest(unittest.TestCase): expected_artists = [Artist(name='name')] expected_albums = [ - Album(name='albumname', artists=expected_artists, num_tracks=2)] + Album(name='albumname', artists=expected_artists, num_tracks=2), + Album(name='albumname', num_tracks=2) + ] expected_tracks = [] -def generate_track(path, ident): +def generate_track(path, ident, album_id): uri = 'local:track:%s' % path track = Track( uri=uri, name='trackname', artists=expected_artists, - album=expected_albums[0], track_no=1, date='2006', length=4000, + album=expected_albums[album_id], track_no=1, date='2006', length=4000, last_modified=1272319626) expected_tracks.append(track) -generate_track('song1.mp3', 6) -generate_track('song2.mp3', 7) -generate_track('song3.mp3', 8) -generate_track('subdir1/song4.mp3', 2) -generate_track('subdir1/song5.mp3', 3) -generate_track('subdir2/song6.mp3', 4) -generate_track('subdir2/song7.mp3', 5) -generate_track('subdir1/subsubdir/song8.mp3', 0) -generate_track('subdir1/subsubdir/song9.mp3', 1) +generate_track('song1.mp3', 6, 0) +generate_track('song2.mp3', 7, 0) +generate_track('song3.mp3', 8, 1) +generate_track('subdir1/song4.mp3', 2, 0) +generate_track('subdir1/song5.mp3', 3, 0) +generate_track('subdir2/song6.mp3', 4, 1) +generate_track('subdir2/song7.mp3', 5, 1) +generate_track('subdir1/subsubdir/song8.mp3', 0, 0) +generate_track('subdir1/subsubdir/song9.mp3', 1, 1) class MPDTagCacheToTracksTest(unittest.TestCase): diff --git a/tests/data/advanced_tag_cache b/tests/data/advanced_tag_cache index 3288275f80..be299fb689 100644 --- a/tests/data/advanced_tag_cache +++ b/tests/data/advanced_tag_cache @@ -11,6 +11,7 @@ key: song8.mp3 file: subdir1/subsubdir/song8.mp3 Time: 4 Artist: name +AlbumArtist: name Title: trackname Album: albumname Track: 1/2 @@ -32,6 +33,7 @@ key: song4.mp3 file: subdir1/song4.mp3 Time: 4 Artist: name +AlbumArtist: name Title: trackname Album: albumname Track: 1/2 @@ -41,6 +43,7 @@ key: song5.mp3 file: subdir1/song5.mp3 Time: 4 Artist: name +AlbumArtist: name Title: trackname Album: albumname Track: 1/2 @@ -76,6 +79,7 @@ key: song1.mp3 file: /song1.mp3 Time: 4 Artist: name +AlbumArtist: name Title: trackname Album: albumname Track: 1/2 @@ -85,6 +89,7 @@ key: song2.mp3 file: /song2.mp3 Time: 4 Artist: name +AlbumArtist: name Title: trackname Album: albumname Track: 1/2 diff --git a/tests/data/library_tag_cache b/tests/data/library_tag_cache index e9e87c1b2c..904c5e5710 100644 --- a/tests/data/library_tag_cache +++ b/tests/data/library_tag_cache @@ -6,6 +6,7 @@ songList begin key: key1 file: /path1 Artist: artist1 +AlbumArtist: artist1 Title: track1 Album: album1 Date: 2001-02-03 @@ -14,6 +15,7 @@ Time: 4 key: key2 file: /path2 Artist: artist2 +AlbumArtist: artist2 Title: track2 Album: album2 Date: 2002 @@ -28,4 +30,12 @@ Album: album3 Date: 2003 Track: 3 Time: 4 +key: key4 +file: /path4 +Artist: artist3 +Title: track4 +Album: album4 +Date: 2004 +Track: 4 +Time: 60 songList end diff --git a/tests/data/simple_tag_cache b/tests/data/simple_tag_cache index cc71ac6dfc..07a474b3fb 100644 --- a/tests/data/simple_tag_cache +++ b/tests/data/simple_tag_cache @@ -7,6 +7,7 @@ key: song1.mp3 file: /song1.mp3 Time: 4 Artist: name +AlbumArtist: name Title: trackname Album: albumname Track: 1/2 diff --git a/tests/data/utf8_tag_cache b/tests/data/utf8_tag_cache index 6642ec77e8..6f6abe600d 100644 --- a/tests/data/utf8_tag_cache +++ b/tests/data/utf8_tag_cache @@ -7,6 +7,7 @@ key: song1.mp3 file: /song1.mp3 Time: 4 Artist: æøå +AlbumArtist: æøå Title: æøå Album: æøå mtime: 1272319626 From 1f9b5fd6643578383fd1459f9436030b88f856b7 Mon Sep 17 00:00:00 2001 From: Lasse Bigum Date: Sat, 2 Nov 2013 02:51:06 +0100 Subject: [PATCH 3/3] Fix flake8 issues --- tests/backends/local/library_test.py | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/tests/backends/local/library_test.py b/tests/backends/local/library_test.py index 63bc4a618c..bc33f150a5 100644 --- a/tests/backends/local/library_test.py +++ b/tests/backends/local/library_test.py @@ -218,7 +218,8 @@ def test_find_exact_any(self): # Matches on track album artists result = self.library.find_exact(any=['artist3']) - self.assertEqual(list(result[0].tracks), [self.tracks[3], self.tracks[2]]) + self.assertEqual(list(result[0].tracks), [self.tracks[3], + self.tracks[2]]) # Matches on track year result = self.library.find_exact(any=['2002']) @@ -352,7 +353,8 @@ def test_search_any(self): # Matches on track album artists result = self.library.search(any=['Tist3']) - self.assertEqual(list(result[0].tracks), [self.tracks[3], self.tracks[2]]) + self.assertEqual(list(result[0].tracks), [self.tracks[3], + self.tracks[2]]) # Matches on URI result = self.library.search(any=['TH1'])