mirror of
https://github.com/beetbox/beets.git
synced 2026-01-07 16:34:45 +01:00
changelog, tests, slight reorg for #187
This commit is contained in:
parent
6ff2d09dc8
commit
787918fdc3
3 changed files with 39 additions and 18 deletions
|
|
@ -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'],
|
||||
|
|
|
|||
|
|
@ -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:
|
||||
|
||||
|
|
|
|||
|
|
@ -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')
|
||||
|
|
|
|||
Loading…
Reference in a new issue