Exemplo n.º 1
0
 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'])
Exemplo n.º 2
0
 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)
Exemplo n.º 3
0
 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'])
Exemplo n.º 4
0
 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)
Exemplo n.º 5
0
 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'])
Exemplo n.º 6
0
 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'])
Exemplo n.º 7
0
 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)
Exemplo n.º 8
0
 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)
Exemplo n.º 9
0
    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
Exemplo n.º 10
0
 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)
Exemplo n.º 11
0
 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)
Exemplo n.º 12
0
    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