From ebcd540e582ab873c85a27a6ead86d596377de94 Mon Sep 17 00:00:00 2001 From: Filipe Fortes Date: Wed, 26 Mar 2014 12:02:52 -0700 Subject: [PATCH 1/2] Only use primary artist aliases. Fixes #632. MusicBrainz will send down various artist aliases that may not be the primary (e.g. the previous name for a group). Only use an alias for the artist if it is the primary alias in one of the import locales. --- beets/autotag/mb.py | 13 +++---------- 1 file changed, 3 insertions(+), 10 deletions(-) diff --git a/beets/autotag/mb.py b/beets/autotag/mb.py index c63d8fdc5..779ec4b3c 100644 --- a/beets/autotag/mb.py +++ b/beets/autotag/mb.py @@ -80,20 +80,13 @@ def _preferred_alias(aliases): # Search configured locales in order. for locale in config['import']['languages'].as_str_seq(): - # Find matching aliases for this locale. - matches = [a for a in aliases if a['locale'] == locale] + # Find matching primary aliases for this locale. + matches = [a for a in aliases if a['locale'] == locale and 'primary' in a] # Skip to the next locale if we have no matches if not matches: continue - # Find the aliases that have the primary flag set. - primaries = [a for a in matches if 'primary' in a] - # Take the primary if we have it, otherwise take the first - # match with the correct locale. - if primaries: - return primaries[0] - else: - return matches[0] + return matches[0] def _flatten_artist_credit(credit): """Given a list representing an ``artist-credit`` block, flatten the From ea90321226b3f06fb4351a56c0d50e0559ec2565 Mon Sep 17 00:00:00 2001 From: Filipe Fortes Date: Wed, 26 Mar 2014 13:01:42 -0700 Subject: [PATCH 2/2] Update tests given new alias behavior --- test/test_mb.py | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/test/test_mb.py b/test/test_mb.py index 590578ddb..645769225 100644 --- a/test/test_mb.py +++ b/test/test_mb.py @@ -366,27 +366,28 @@ class ArtistFlatteningTest(_common.TestCase): def test_alias(self): credit_dict = self._credit_dict() - self._add_alias(credit_dict, suffix='en', locale='en') - self._add_alias(credit_dict, suffix='en_GB', locale='en_GB') + self._add_alias(credit_dict, suffix='en', locale='en', primary=True) + self._add_alias(credit_dict, suffix='en_GB', locale='en_GB', primary=True) self._add_alias(credit_dict, suffix='fr', locale='fr') self._add_alias(credit_dict, suffix='fr_P', locale='fr', primary=True) + self._add_alias(credit_dict, suffix='pt_BR', locale='pt_BR') # test no alias config['import']['languages'] = [''] flat = mb._flatten_artist_credit([credit_dict]) self.assertEqual(flat, ('NAME', 'SORT', 'CREDIT')) - # test en + # test en primary config['import']['languages'] = ['en'] flat = mb._flatten_artist_credit([credit_dict]) self.assertEqual(flat, ('ALIASen', 'ALIASSORTen', 'CREDIT')) - # test en_GB en + # test en_GB en primary config['import']['languages'] = ['en_GB', 'en'] flat = mb._flatten_artist_credit([credit_dict]) self.assertEqual(flat, ('ALIASen_GB', 'ALIASSORTen_GB', 'CREDIT')) - # test en en_GB + # test en en_GB primary config['import']['languages'] = ['en', 'en_GB'] flat = mb._flatten_artist_credit([credit_dict]) self.assertEqual(flat, ('ALIASen', 'ALIASSORTen', 'CREDIT')) @@ -396,6 +397,11 @@ class ArtistFlatteningTest(_common.TestCase): flat = mb._flatten_artist_credit([credit_dict]) self.assertEqual(flat, ('ALIASfr_P', 'ALIASSORTfr_P', 'CREDIT')) + # test for not matching non-primary + config['import']['languages'] = ['pt_BR', 'fr'] + flat = mb._flatten_artist_credit([credit_dict]) + self.assertEqual(flat, ('ALIASfr_P', 'ALIASSORTfr_P', 'CREDIT')) + def suite(): return unittest.TestLoader().loadTestsFromName(__name__)