From 3ce936701a91eab303b9a9a5b98966d0720ed38a Mon Sep 17 00:00:00 2001 From: Adrian Sampson Date: Sat, 10 Jul 2010 18:24:29 -0700 Subject: [PATCH] autotagger now applies MusicBrainz IDs --- beets/autotag/__init__.py | 13 +++++++- test/test_autotag.py | 63 +++++++++++++++++++++++++++++++++++++++ 2 files changed, 75 insertions(+), 1 deletion(-) diff --git a/beets/autotag/__init__.py b/beets/autotag/__init__.py index 9216a462d..613b58d4d 100644 --- a/beets/autotag/__init__.py +++ b/beets/autotag/__init__.py @@ -282,11 +282,17 @@ def apply_metadata(items, info): """Set the items' metadata to match the data given in info. The list of items must be ordered. """ + # Global MusicBrainz IDs (album and artist). + mb_albumid = info['album_id'].rsplit('/', 1)[1] + mb_artistid = info['artist_id'].rsplit('/', 1)[1] + for index, (item, track_data) in enumerate(zip(items, info['tracks'])): + # Album, artist, track count. item.artist = info['artist'] item.album = info['album'] item.tracktotal = len(items) + # Release date. if 'year' in info: item.year = info['year'] if 'month' in info: @@ -294,10 +300,15 @@ def apply_metadata(items, info): if 'day' in info: item.day = info['day'] + # Title and track index. item.title = track_data['title'] item.track = index + 1 - #fixme Set MusicBrainz IDs + # MusicBrainz track ID. + item.mb_trackid = track_data['id'].rsplit('/', 1)[1] + # Album and artist IDs. + item.mb_albumid = mb_albumid + item.mb_artistid = mb_artistid def tag_album(items, search_artist=None, search_album=None): """Bundles together the functionality used to infer tags for a diff --git a/test/test_autotag.py b/test/test_autotag.py index 50c2e79b8..79db6165c 100644 --- a/test/test_autotag.py +++ b/test/test_autotag.py @@ -221,6 +221,69 @@ class OrderingTest(unittest.TestCase): self.assertEqual(ordered[1].title, 'two') self.assertEqual(ordered[2].title, 'three') +class ApplyTest(unittest.TestCase): + def setUp(self): + self.items = [] + self.items.append(Item({})) + self.items.append(Item({})) + trackinfo = [] + trackinfo.append({ + 'title': 'oneNew', + 'id': 'http://musicbrainz.org/track/dfa939ec-118c-4d0f-' + '84a0-60f3d1e6522c', + }) + trackinfo.append({ + 'title': 'twoNew', + 'id': 'http://musicbrainz.org/track/40130ed1-a27c-42fd-' + 'a328-1ebefb6caef4', + }) + self.info = { + 'tracks': trackinfo, + 'artist': 'artistNew', + 'album': 'albumNew', + 'album_id': 'http://musicbrainz.org/release/7edb51cb-77d6-' + '4416-a23c-3a8c2994a2c7', + 'artist_id': 'http://musicbrainz.org/artist/a6623d39-2d8e-' + '4f70-8242-0a9553b91e50', + } + + def test_titles_applied(self): + autotag.apply_metadata(self.items, self.info) + self.assertEqual(self.items[0].title, 'oneNew') + self.assertEqual(self.items[1].title, 'twoNew') + + def test_album_and_artist_applied_to_all(self): + autotag.apply_metadata(self.items, self.info) + self.assertEqual(self.items[0].album, 'albumNew') + self.assertEqual(self.items[1].album, 'albumNew') + self.assertEqual(self.items[0].artist, 'artistNew') + self.assertEqual(self.items[1].artist, 'artistNew') + + def test_track_index_applied(self): + autotag.apply_metadata(self.items, self.info) + self.assertEqual(self.items[0].track, 1) + self.assertEqual(self.items[1].track, 2) + + def test_track_total_applied(self): + autotag.apply_metadata(self.items, self.info) + self.assertEqual(self.items[0].tracktotal, 2) + self.assertEqual(self.items[1].tracktotal, 2) + + def test_mb_trackid_applied(self): + autotag.apply_metadata(self.items, self.info) + self.assertEqual(self.items[0].mb_trackid, + 'dfa939ec-118c-4d0f-84a0-60f3d1e6522c') + self.assertEqual(self.items[1].mb_trackid, + '40130ed1-a27c-42fd-a328-1ebefb6caef4') + + def test_mb_albumid_and_artistid_applied(self): + autotag.apply_metadata(self.items, self.info) + for item in self.items: + self.assertEqual(item.mb_albumid, + '7edb51cb-77d6-4416-a23c-3a8c2994a2c7') + self.assertEqual(item.mb_artistid, + 'a6623d39-2d8e-4f70-8242-0a9553b91e50') + def suite(): return unittest.TestLoader().loadTestsFromName(__name__)