changelog, tests, slight reorg for #187

This commit is contained in:
Adrian Sampson 2013-09-30 11:13:13 -07:00
parent 6ff2d09dc8
commit 787918fdc3
3 changed files with 39 additions and 18 deletions

View file

@ -198,6 +198,7 @@ def album_info(release):
for medium in release['medium-list']:
disctitle = medium.get('title')
for track in medium['track-list']:
# Basic information from the recording.
index += 1
ti = track_info(
track['recording'],
@ -206,27 +207,21 @@ def album_info(release):
int(track['position']),
len(medium['track-list']),
)
ti.disctitle = disctitle
# Prefer track data, where present, over recording data.
if track.get('title'):
# Track title may be distinct from underlying recording
# title.
ti.title = track['title']
if track.get('artist-credit'):
# Track artist may be distinct from underlying recording
# title.
# Get the artist names.
ti.artist, ti.artist_sort, ti.artist_credit = \
_flatten_artist_credit(track['artist-credit'])
# Get the ID and sort name of the first artist.
artist = track['artist-credit'][0]['artist']
ti.artist_id = artist['id']
ti.artist_id = track['artist-credit'][0]['artist']['id']
if track.get('length'):
# Track duration is preferred over the recording
# duration.
ti.length = int(track['length']) / (1000.0)
ti.disctitle = disctitle
track_infos.append(ti)
info = beets.autotag.hooks.AlbumInfo(
release['title'],
release['id'],

View file

@ -14,6 +14,9 @@ New stuff:
* The :doc:`/plugins/ftintitle`, by `@Verrus`_, is now distributed with beets.
It helps you rewrite tags to move "featured" artists from the artist field
to the title field.
* The MusicBrainz data source now uses track artists over recording
artists. This leads to better metadata when tagging classical music. Thanks
to Henrique Ferreiro.
And some fixes:

View file

@ -20,7 +20,8 @@ from beets.autotag import mb
from beets import config
class MBAlbumInfoTest(_common.TestCase):
def _make_release(self, date_str='2009', tracks=None, track_length=None):
def _make_release(self, date_str='2009', tracks=None, track_length=None,
track_artist=False):
release = {
'title': 'ALBUM TITLE',
'id': 'ALBUM ID',
@ -65,6 +66,19 @@ class MBAlbumInfoTest(_common.TestCase):
if track_length:
# Track lengths are distinct from recording lengths.
track['length'] = track_length
if track_artist:
# Similarly, track artists can differ from recording
# artists.
track['artist-credit'] = [
{
'artist': {
'name': 'TRACK ARTIST NAME',
'id': 'TRACK ARTIST ID',
'sort-name': 'TRACK ARTIST SORT NAME',
},
'name': 'TRACK ARTIST CREDIT',
}
]
track_list.append(track)
release['medium-list'].append({
'position': '1',
@ -85,11 +99,11 @@ class MBAlbumInfoTest(_common.TestCase):
track['artist-credit'] = [
{
'artist': {
'name': 'TRACK ARTIST NAME',
'id': 'TRACK ARTIST ID',
'sort-name': 'TRACK ARTIST SORT NAME',
'name': 'RECORDING ARTIST NAME',
'id': 'RECORDING ARTIST ID',
'sort-name': 'RECORDING ARTIST SORT NAME',
},
'name': 'TRACK ARTIST CREDIT',
'name': 'RECORDING ARTIST CREDIT',
}
]
return track
@ -279,10 +293,19 @@ class MBAlbumInfoTest(_common.TestCase):
d = mb.album_info(release)
self.assertEqual(d.language, None)
def test_parse_track_artist(self):
def test_parse_recording_artist(self):
tracks = [self._make_track('a', 'b', 1, True)]
release = self._make_release(None, tracks=tracks)
track = mb.album_info(release).tracks[0]
self.assertEqual(track.artist, 'RECORDING ARTIST NAME')
self.assertEqual(track.artist_id, 'RECORDING ARTIST ID')
self.assertEqual(track.artist_sort, 'RECORDING ARTIST SORT NAME')
self.assertEqual(track.artist_credit, 'RECORDING ARTIST CREDIT')
def test_track_artist_overrides_recording_artist(self):
tracks = [self._make_track('a', 'b', 1, True)]
release = self._make_release(None, tracks=tracks, track_artist=True)
track = mb.album_info(release).tracks[0]
self.assertEqual(track.artist, 'TRACK ARTIST NAME')
self.assertEqual(track.artist_id, 'TRACK ARTIST ID')
self.assertEqual(track.artist_sort, 'TRACK ARTIST SORT NAME')