def test_current_metadata_artist_consensus(self): items = [Item(artist='The Beatles', album='The White Album'), Item(artist='The Beatles', album='The White Album'), Item(artist='The Beatles', album='Teh White Album')] likelies, consensus = match.current_metadata(items) self.assertEqual(likelies['artist'], 'The Beatles') self.assertEqual(likelies['album'], 'The White Album') self.assertTrue(consensus['artist'])
def test_current_metadata_artist_consensus(self): items = [Item({'artist': 'The Beatles', 'album': 'The White Album'}), Item({'artist': 'The Beatles', 'album': 'The White Album'}), Item({'artist': 'The Beatles', 'album': 'Teh White Album'})] l_artist, l_album, artist_consensus = match.current_metadata(items) self.assertEqual(l_artist, 'The Beatles') self.assertEqual(l_album, 'The White Album') self.assertTrue(artist_consensus)
def test_current_metadata_finds_pluralities(self): items = [Item({'artist': 'The Beetles', 'album': 'The White Album'}), Item({'artist': 'The Beatles', 'album': 'The White Album'}), Item({'artist': 'The Beatles', 'album': 'Teh White Album'})] likelies, consensus = match.current_metadata(items) self.assertEqual(likelies['artist'], 'The Beatles') self.assertEqual(likelies['album'], 'The White Album') self.assertFalse(consensus['artist'])
def test_current_metadata_likelies(self): fields = ['artist', 'album', 'albumartist', 'year', 'disctotal', 'mb_albumid', 'label', 'catalognum', 'country', 'media', 'albumdisambig'] items = [Item(**dict((f, '%s_%s' % (f, i or 1)) for f in fields)) for i in range(5)] likelies, _ = match.current_metadata(items) for f in fields: self.assertEqual(likelies[f], '%s_1' % f)
def test_albumartist_consensus(self): items = [ Item(artist='tartist1', album='album', albumartist='aartist'), Item(artist='tartist2', album='album', albumartist='aartist'), Item(artist='tartist3', album='album', albumartist='aartist') ] likelies, consensus = match.current_metadata(items) self.assertEqual(likelies['artist'], 'aartist') self.assertFalse(consensus['artist'])
def test_albumartist_consensus(self): items = [Item(artist='tartist1', album='album', albumartist='aartist'), Item(artist='tartist2', album='album', albumartist='aartist'), Item(artist='tartist3', album='album', albumartist='aartist')] likelies, consensus = match.current_metadata(items) self.assertEqual(likelies['artist'], 'aartist') self.assertFalse(consensus['artist'])
def test_current_metadata_artist_consensus(self): items = [ Item({"artist": "The Beatles", "album": "The White Album"}), Item({"artist": "The Beatles", "album": "The White Album"}), Item({"artist": "The Beatles", "album": "Teh White Album"}), ] l_artist, l_album, artist_consensus = match.current_metadata(items) self.assertEqual(l_artist, "The Beatles") self.assertEqual(l_album, "The White Album") self.assertTrue(artist_consensus)
def test_albumartist_consensus(self): items = [Item({'artist': 'tartist1', 'album': 'album', 'albumartist': 'aartist'}), Item({'artist': 'tartist2', 'album': 'album', 'albumartist': 'aartist'}), Item({'artist': 'tartist3', 'album': 'album', 'albumartist': 'aartist'})] l_artist, l_album, artist_consensus = match.current_metadata(items) self.assertEqual(l_artist, 'aartist') self.assertFalse(artist_consensus)
def _metadata_from_items(self, items): artist, album, artist_consensus = match.current_metadata(items) va_likely = ((not artist_consensus) or (artist.lower() in match.VA_ARTISTS) or any(item.comp for item in items)) if va_likely: return u'', album else: return artist, album
def test_current_metadata_likelies(self): fields = [ 'artist', 'album', 'albumartist', 'year', 'disctotal', 'mb_albumid', 'label', 'catalognum', 'country', 'media', 'albumdisambig' ] items = [ Item(**{f: '{}_{}'.format(f, i or 1) for f in fields}) for i in range(5) ] likelies, _ = match.current_metadata(items) for f in fields: if isinstance(likelies[f], int): self.assertEqual(likelies[f], 0) else: self.assertEqual(likelies[f], '%s_1' % f)
def test_albumartist_consensus(self): items = [ Item({ 'artist': 'tartist1', 'album': 'album', 'albumartist': 'aartist' }), Item({ 'artist': 'tartist2', 'album': 'album', 'albumartist': 'aartist' }), Item({ 'artist': 'tartist3', 'album': 'album', 'albumartist': 'aartist' }) ] l_artist, l_album, artist_consensus = match.current_metadata(items) self.assertEqual(l_artist, 'aartist') self.assertFalse(artist_consensus)
def import_task_start(self, task, session): task_info = self.tasks[task] = {} # In case this is a multi-disc import, find the common parent directory. base = os.path.commonpath(task.paths).decode('utf8') glob_pattern = os.path.join(glob.escape(base), self.origin_file) origin_glob = sorted(glob.glob(glob_pattern)) if len(origin_glob) < 1: task_info['origin_path'] = Path(base) / self.origin_file task_info['missing_origin'] = True return task_info['origin_path'] = origin_path = Path(origin_glob[0]) conflict = False likelies, consensus = current_metadata(task.items) task_info['tag_compare'] = tag_compare = OrderedDict() for tag in BEETS_TO_LABEL: tag_compare.update({ tag: { 'tagged': str(likelies[tag]), 'active': tag in self.extra_tags, 'origin': '', } }) for key, value in self.match_fn(origin_path): if tag_compare[key]['origin']: continue tagged_value = tag_compare[key]['tagged'] origin_value = sanitize_value(key, value) tag_compare[key]['origin'] = origin_value if key not in CONFLICT_FIELDS or not tagged_value or not origin_value: continue if key == 'catalognum': tagged_value = normalize_catno(tagged_value) origin_value = normalize_catno(origin_value) if tagged_value != origin_value: conflict = task_info['conflict'] = True if not conflict or self.use_origin_on_conflict: # Update all item with origin metadata. for item in task.items: for tag, entry in tag_compare.items(): origin_value = entry['origin'] if tag not in self.extra_tags: continue if tag == 'year' and origin_value: origin_value = int( origin_value) if origin_value.isdigit() else '' item[tag] = origin_value # beets weighs media heavily, and will even prioritize a media match over an exact catalognum match. # At the same time, media for uploaded music is often mislabeled (e.g., Enhanced CD and SACD are just # grouped as CD). This does not make a good combination. As a workaround, remove the media from the # item if we also have a catalognum. if item['media'] and item['catalognum']: del item['media'] tag_compare['media']['active'] = False