コード例 #1
0
 def test_identical_albums(self):
     items = []
     items.append(_make_item('one', 1))
     items.append(_make_item('two', 2))
     items.append(_make_item('three', 3))
     info = AlbumInfo(
         artist='some artist',
         album='some album',
         tracks=_make_trackinfo(),
         va=False,
         album_id=None,
         artist_id=None,
     )
     self.assertEqual(match.distance(items, info), 0)
コード例 #2
0
 def test_comp_track_artists_do_not_match(self):
     items = []
     items.append(self.item('one', 1))
     items.append(self.item('two', 2, 'someone else'))
     items.append(self.item('three', 3))
     info = AlbumInfo(
         artist='some artist',
         album='some album',
         tracks=self.trackinfo(),
         va=True,
         album_id=None,
         artist_id=None,
     )
     self.assertNotEqual(match.distance(items, info), 0)
コード例 #3
0
 def test_global_artists_differ(self):
     items = []
     items.append(self.item('one', 1))
     items.append(self.item('two', 2))
     items.append(self.item('three', 3))
     info = AlbumInfo(
         artist='someone else',
         album='some album',
         tracks=self.trackinfo(),
         va=False,
         album_id=None,
         artist_id=None,
     )
     self.assertNotEqual(match.distance(items, info), 0)
コード例 #4
0
 def test_comp_track_artists_match(self):
     items = []
     items.append(self.item('one', 1))
     items.append(self.item('two', 2))
     items.append(self.item('three', 3))
     info = AlbumInfo(
         artist='should be ignored',
         album='some album',
         tracks=self.trackinfo(),
         va=True,
         album_id=None,
         artist_id=None,
     )
     self.assertEqual(match.distance(items, info), 0)
コード例 #5
0
 def test_incomplete_album(self):
     items = []
     items.append(_make_item('one', 1))
     items.append(_make_item('three', 3))
     info = AlbumInfo(
         artist = 'some artist',
         album = 'some album',
         tracks = _make_trackinfo(),
         va = False,
         album_id = None, artist_id = None,
     )
     self.assertNotEqual(match.distance(items, info), 0)
     # Make sure the distance is not too great
     self.assertTrue(match.distance(items, info) < 0.2)
コード例 #6
0
 def test_tracks_out_of_order(self):
     items = []
     items.append(_make_item('one', 1))
     items.append(_make_item('three', 2))
     items.append(_make_item('two', 3))
     info = AlbumInfo(
         artist = 'some artist',
         album = 'some album',
         tracks = _make_trackinfo(),
         va = False,
         album_id = None, artist_id = None,
     )
     dist = match.distance(items, info)
     self.assertTrue(0 < dist < 0.2)
コード例 #7
0
ファイル: test_autotag.py プロジェクト: rsumner31/beets
 def test_global_artists_differ(self):
     items = []
     items.append(_make_item(u'one', 1))
     items.append(_make_item(u'two', 2))
     items.append(_make_item(u'three', 3))
     info = AlbumInfo(
         artist=u'someone else',
         album=u'some album',
         tracks=_make_trackinfo(),
         va=False,
         album_id=None,
         artist_id=None,
     )
     self.assertNotEqual(self._dist(items, info), 0)
コード例 #8
0
ファイル: test_autotag.py プロジェクト: rsumner31/beets
 def test_comp_track_artists_match(self):
     items = []
     items.append(_make_item(u'one', 1))
     items.append(_make_item(u'two', 2))
     items.append(_make_item(u'three', 3))
     info = AlbumInfo(
         artist=u'should be ignored',
         album=u'some album',
         tracks=_make_trackinfo(),
         va=True,
         album_id=None,
         artist_id=None,
     )
     self.assertEqual(self._dist(items, info), 0)
コード例 #9
0
ファイル: test_autotag.py プロジェクト: rsumner31/beets
 def test_comp_track_artists_do_not_match(self):
     items = []
     items.append(_make_item(u'one', 1))
     items.append(_make_item(u'two', 2, u'someone else'))
     items.append(_make_item(u'three', 3))
     info = AlbumInfo(
         artist=u'some artist',
         album=u'some album',
         tracks=_make_trackinfo(),
         va=True,
         album_id=None,
         artist_id=None,
     )
     self.assertNotEqual(self._dist(items, info), 0)
コード例 #10
0
ファイル: test_autotag.py プロジェクト: eghantous/beetbox
 def test_per_medium_track_numbers(self):
     items = []
     items.append(_make_item(u'one', 1))
     items.append(_make_item(u'two', 2))
     items.append(_make_item(u'three', 1))
     info = AlbumInfo(artist=u'some artist',
                      album=u'some album',
                      tracks=_make_trackinfo(),
                      va=False)
     info.tracks[0].medium_index = 1
     info.tracks[1].medium_index = 2
     info.tracks[2].medium_index = 1
     dist = self._dist(items, info)
     self.assertEqual(dist, 0)
コード例 #11
0
ファイル: test_autotag.py プロジェクト: eghantous/beetbox
 def test_comp_no_track_artists(self):
     # Some VA releases don't have track artists (incomplete metadata).
     items = []
     items.append(_make_item(u'one', 1))
     items.append(_make_item(u'two', 2))
     items.append(_make_item(u'three', 3))
     info = AlbumInfo(artist=u'should be ignored',
                      album=u'some album',
                      tracks=_make_trackinfo(),
                      va=True)
     info.tracks[0].artist = None
     info.tracks[1].artist = None
     info.tracks[2].artist = None
     self.assertEqual(self._dist(items, info), 0)
コード例 #12
0
ファイル: test_importer.py プロジェクト: zengqiang2006/beets
    def _album_task(self, asis, artist=None, album=None, existing=False):
        if existing:
            item = self.i
        else:
            item = _common.item()
        artist = artist or item.albumartist
        album = album or item.album

        task = importer.ImportTask(paths=['a path'], toppath='top path',
                                   items=[item])
        task.set_candidates(artist, album, None, None)
        if asis:
            task.set_choice(importer.action.ASIS)
        else:
            info = AlbumInfo(album, None, artist, None, None)
            task.set_choice(AlbumMatch(0, info, {}, set(), set()))
        return task
コード例 #13
0
 def test_per_medium_track_numbers(self):
     items = []
     items.append(_make_item('one', 1))
     items.append(_make_item('two', 2))
     items.append(_make_item('three', 1))
     info = AlbumInfo(
         artist = 'some artist',
         album = 'some album',
         tracks = _make_trackinfo(),
         va = False,
         album_id = None, artist_id = None,
     )
     info.tracks[0].medium_index = 1
     info.tracks[1].medium_index = 2
     info.tracks[2].medium_index = 1
     dist = match.distance(items, info)
     self.assertEqual(dist, 0)
コード例 #14
0
 def test_comp_no_track_artists(self):
     # Some VA releases don't have track artists (incomplete metadata).
     items = []
     items.append(self.item('one', 1))
     items.append(self.item('two', 2))
     items.append(self.item('three', 3))
     info = AlbumInfo(
         artist='should be ignored',
         album='some album',
         tracks=self.trackinfo(),
         va=True,
         album_id=None,
         artist_id=None,
     )
     info.tracks[0].artist = None
     info.tracks[1].artist = None
     info.tracks[2].artist = None
     self.assertEqual(match.distance(items, info), 0)
コード例 #15
0
ファイル: test_autotag.py プロジェクト: sashaseifollahi/beets
 def test_two_medium_release(self):
     items = []
     items.append(_make_item('one', 1))
     items.append(_make_item('two', 2))
     items.append(_make_item('three', 3))
     info = AlbumInfo(
         artist='some artist',
         album='some album',
         tracks=_make_trackinfo(),
         va=False,
         album_id=None,
         artist_id=None,
     )
     info.tracks[0].medium_index = 1
     info.tracks[1].medium_index = 2
     info.tracks[2].medium_index = 1
     dist = self._dist(items, info)
     self.assertEqual(dist, 0)
コード例 #16
0
    def _album_task(self, asis, artist=None, album=None, existing=False):
        if existing:
            item = self.i
        else:
            item = _common.item()
        artist = artist or item.albumartist
        album = album or item.album

        task = importer.ImportTask(path='a path',
                                   toppath='top path',
                                   items=[item])
        task.set_match(artist, album, None, None)
        if asis:
            task.set_choice(importer.action.ASIS)
        else:
            task.set_choice((AlbumInfo(album, None, artist, None,
                                       None), [item]))
        return task
コード例 #17
0
 def setUp(self):
     self.items = []
     self.items.append(Item({}))
     self.items.append(Item({}))
     trackinfo = []
     trackinfo.append(
         TrackInfo('oneNew', 'dfa939ec-118c-4d0f-84a0-60f3d1e6522c'))
     trackinfo.append(
         TrackInfo('twoNew', '40130ed1-a27c-42fd-a328-1ebefb6caef4'))
     self.info = AlbumInfo(
         tracks=trackinfo,
         artist='artistNew',
         album='albumNew',
         album_id='7edb51cb-77d6-4416-a23c-3a8c2994a2c7',
         artist_id='a6623d39-2d8e-4f70-8242-0a9553b91e50',
         albumtype='album',
         va=False,
     )
コード例 #18
0
ファイル: test_art.py プロジェクト: zhang-xun/beets
    def setUp(self):
        super(ArtImporterTest, self).setUp()

        # Mock the album art fetcher to always return our test file.
        self.art_file = os.path.join(self.temp_dir, 'tmpcover.jpg')
        _common.touch(self.art_file)
        self.old_afa = fetchart.art_for_album
        self.afa_response = self.art_file

        def art_for_album(i, p, maxwidth=None, local_only=False):
            return self.afa_response

        fetchart.art_for_album = art_for_album

        # Test library.
        self.libpath = os.path.join(self.temp_dir, 'tmplib.blb')
        self.libdir = os.path.join(self.temp_dir, 'tmplib')
        os.mkdir(self.libdir)
        os.mkdir(os.path.join(self.libdir, 'album'))
        itempath = os.path.join(self.libdir, 'album', 'test.mp3')
        shutil.copyfile(os.path.join(_common.RSRC, 'full.mp3'), itempath)
        self.lib = library.Library(self.libpath)
        self.i = _common.item()
        self.i.path = itempath
        self.album = self.lib.add_album([self.i])
        self.lib._connection().commit()

        # The plugin and import configuration.
        self.plugin = fetchart.FetchArtPlugin()
        self.session = _common.import_session(self.lib)

        # Import task for the coroutine.
        self.task = importer.ImportTask(None, None, [self.i])
        self.task.is_album = True
        self.task.album = self.album
        info = AlbumInfo(
            album='some album',
            album_id='albumid',
            artist='some artist',
            artist_id='artistid',
            tracks=[],
        )
        self.task.set_choice(AlbumMatch(0, info, {}, set(), set()))
コード例 #19
0
ファイル: test_importer.py プロジェクト: wiget/beets
    def _make_album_match(self, artist, album, tracks, distance=0):
        if distance:
            id = ' ' + 'M' * distance
        else:
            id = ''
        artist = artist.replace('Tag', 'Applied') + id
        album = album.replace('Tag', 'Applied') + id

        trackInfos = []
        for i in range(tracks):
            trackInfos.append(self._make_track_match(artist, album, i + 1))

        return AlbumInfo(artist=artist,
                         album=album,
                         tracks=trackInfos,
                         va=False,
                         album_id=u'albumid' + id,
                         artist_id=u'artistid' + id,
                         albumtype=u'soundtrack')
コード例 #20
0
ファイル: test_autotag.py プロジェクト: rsumner31/beets
    def setUp(self):
        super(ApplyTest, self).setUp()

        self.items = []
        self.items.append(Item({}))
        self.items.append(Item({}))
        trackinfo = []
        trackinfo.append(
            TrackInfo(
                u'oneNew',
                'dfa939ec-118c-4d0f-84a0-60f3d1e6522c',
                medium=1,
                medium_index=1,
                medium_total=1,
                index=1,
                artist_credit='trackArtistCredit',
                artist_sort='trackArtistSort',
            ))
        trackinfo.append(
            TrackInfo(
                u'twoNew',
                '40130ed1-a27c-42fd-a328-1ebefb6caef4',
                medium=2,
                medium_index=1,
                index=2,
                medium_total=1,
            ))
        self.info = AlbumInfo(
            tracks=trackinfo,
            artist=u'artistNew',
            album=u'albumNew',
            album_id='7edb51cb-77d6-4416-a23c-3a8c2994a2c7',
            artist_id='a6623d39-2d8e-4f70-8242-0a9553b91e50',
            artist_credit=u'albumArtistCredit',
            artist_sort=u'albumArtistSort',
            albumtype=u'album',
            va=False,
            mediums=2,
        )
コード例 #21
0
ファイル: test_importer.py プロジェクト: coolkehon/beets
    def setUp(self):
        # Mock the album art fetcher to always return our test file.
        self.art_file = os.path.join(_common.RSRC, 'tmpcover.jpg')
        _common.touch(self.art_file)
        self.old_afa = art.art_for_album
        art.art_for_album = lambda a, b: self.art_file

        # Test library.
        self.libpath = os.path.join(_common.RSRC, 'tmplib.blb')
        self.libdir = os.path.join(_common.RSRC, 'tmplib')
        os.mkdir(self.libdir)
        os.mkdir(os.path.join(self.libdir, 'album'))
        itempath = os.path.join(self.libdir, 'album', 'test.mp3')
        shutil.copyfile(os.path.join(_common.RSRC, 'full.mp3'), itempath)
        self.lib = library.Library(self.libpath)
        self.i = _common.item()
        self.i.path = itempath
        self.album = self.lib.add_album([self.i])
        self.lib.save()

        # Set up an art-fetching coroutine.
        self.config = _common.iconfig(self.lib)
        self.config.art = True
        self.coro = importer.fetch_art(self.config)
        self.coro.next()

        # Import task for the coroutine.
        self.task = importer.ImportTask(None, None, [self.i])
        self.task.is_album = True
        self.task.album_id = self.album.id
        info = AlbumInfo(
            album='some album',
            album_id='albumid',
            artist='some artist',
            artist_id='artistid',
            tracks=[TrackInfo('one', 'trackid', 'some artist', 'artistid', 1)],
        )
        self.task.set_choice((info, [self.i]))
コード例 #22
0
    def tag_album(self, items, **kwargs):
        artist = (items[0].artist or '') + ' tag'
        album = (items[0].album or '') + ' tag'
        mapping = {}
        dist = Distance()
        dist.tracks = {}
        for item in items:
            title = (item.title or '') + ' tag'
            track_info = TrackInfo(title=title, track_id=self.nextid())
            mapping[item] = track_info
            dist.tracks[track_info] = Distance()

        album_info = AlbumInfo(album='album',
                               album_id=self.nextid(),
                               artist='artist',
                               artist_id=self.nextid(),
                               tracks=mapping.values())
        match = AlbumMatch(distance=dist,
                           info=album_info,
                           mapping=mapping,
                           extra_items=[],
                           extra_tracks=[])
        return artist, album, [match], Recommendation.strong
コード例 #23
0
ファイル: test_autotag.py プロジェクト: eghantous/beetbox
class ApplyTest(_common.TestCase, ApplyTestUtil):
    def setUp(self):
        super(ApplyTest, self).setUp()

        self.items = []
        self.items.append(Item({}))
        self.items.append(Item({}))
        trackinfo = []
        trackinfo.append(
            TrackInfo(
                title=u'oneNew',
                track_id=u'dfa939ec-118c-4d0f-84a0-60f3d1e6522c',
                medium=1,
                medium_index=1,
                medium_total=1,
                index=1,
                artist_credit='trackArtistCredit',
                artist_sort='trackArtistSort',
            ))
        trackinfo.append(
            TrackInfo(
                title=u'twoNew',
                track_id=u'40130ed1-a27c-42fd-a328-1ebefb6caef4',
                medium=2,
                medium_index=1,
                index=2,
                medium_total=1,
            ))
        self.info = AlbumInfo(
            tracks=trackinfo,
            artist=u'artistNew',
            album=u'albumNew',
            album_id='7edb51cb-77d6-4416-a23c-3a8c2994a2c7',
            artist_id='a6623d39-2d8e-4f70-8242-0a9553b91e50',
            artist_credit=u'albumArtistCredit',
            artist_sort=u'albumArtistSort',
            albumtype=u'album',
            va=False,
            mediums=2,
        )

    def test_titles_applied(self):
        self._apply()
        self.assertEqual(self.items[0].title, 'oneNew')
        self.assertEqual(self.items[1].title, 'twoNew')

    def test_album_and_artist_applied_to_all(self):
        self._apply()
        self.assertEqual(self.items[0].album, 'albumNew')
        self.assertEqual(self.items[1].album, 'albumNew')
        self.assertEqual(self.items[0].artist, 'artistNew')
        self.assertEqual(self.items[1].artist, 'artistNew')

    def test_track_index_applied(self):
        self._apply()
        self.assertEqual(self.items[0].track, 1)
        self.assertEqual(self.items[1].track, 2)

    def test_track_total_applied(self):
        self._apply()
        self.assertEqual(self.items[0].tracktotal, 2)
        self.assertEqual(self.items[1].tracktotal, 2)

    def test_disc_index_applied(self):
        self._apply()
        self.assertEqual(self.items[0].disc, 1)
        self.assertEqual(self.items[1].disc, 2)

    def test_disc_total_applied(self):
        self._apply()
        self.assertEqual(self.items[0].disctotal, 2)
        self.assertEqual(self.items[1].disctotal, 2)

    def test_per_disc_numbering(self):
        self._apply(per_disc_numbering=True)
        self.assertEqual(self.items[0].track, 1)
        self.assertEqual(self.items[1].track, 1)

    def test_per_disc_numbering_track_total(self):
        self._apply(per_disc_numbering=True)
        self.assertEqual(self.items[0].tracktotal, 1)
        self.assertEqual(self.items[1].tracktotal, 1)

    def test_artist_credit(self):
        self._apply(artist_credit=True)
        self.assertEqual(self.items[0].artist, 'trackArtistCredit')
        self.assertEqual(self.items[1].artist, 'albumArtistCredit')
        self.assertEqual(self.items[0].albumartist, 'albumArtistCredit')
        self.assertEqual(self.items[1].albumartist, 'albumArtistCredit')

    def test_artist_credit_prefers_artist_over_albumartist_credit(self):
        self.info.tracks[0].artist = 'oldArtist'
        self.info.tracks[0].artist_credit = None
        self._apply(artist_credit=True)
        self.assertEqual(self.items[0].artist, 'oldArtist')

    def test_artist_credit_falls_back_to_albumartist(self):
        self.info.artist_credit = None
        self._apply(artist_credit=True)
        self.assertEqual(self.items[1].artist, 'artistNew')

    def test_mb_trackid_applied(self):
        self._apply()
        self.assertEqual(self.items[0].mb_trackid,
                         'dfa939ec-118c-4d0f-84a0-60f3d1e6522c')
        self.assertEqual(self.items[1].mb_trackid,
                         '40130ed1-a27c-42fd-a328-1ebefb6caef4')

    def test_mb_albumid_and_artistid_applied(self):
        self._apply()
        for item in self.items:
            self.assertEqual(item.mb_albumid,
                             '7edb51cb-77d6-4416-a23c-3a8c2994a2c7')
            self.assertEqual(item.mb_artistid,
                             'a6623d39-2d8e-4f70-8242-0a9553b91e50')

    def test_albumtype_applied(self):
        self._apply()
        self.assertEqual(self.items[0].albumtype, 'album')
        self.assertEqual(self.items[1].albumtype, 'album')

    def test_album_artist_overrides_empty_track_artist(self):
        my_info = self.info.copy()
        self._apply(info=my_info)
        self.assertEqual(self.items[0].artist, 'artistNew')
        self.assertEqual(self.items[1].artist, 'artistNew')

    def test_album_artist_overridden_by_nonempty_track_artist(self):
        my_info = self.info.copy()
        my_info.tracks[0].artist = 'artist1!'
        my_info.tracks[1].artist = 'artist2!'
        self._apply(info=my_info)
        self.assertEqual(self.items[0].artist, 'artist1!')
        self.assertEqual(self.items[1].artist, 'artist2!')

    def test_artist_credit_applied(self):
        self._apply()
        self.assertEqual(self.items[0].albumartist_credit, 'albumArtistCredit')
        self.assertEqual(self.items[0].artist_credit, 'trackArtistCredit')
        self.assertEqual(self.items[1].albumartist_credit, 'albumArtistCredit')
        self.assertEqual(self.items[1].artist_credit, 'albumArtistCredit')

    def test_artist_sort_applied(self):
        self._apply()
        self.assertEqual(self.items[0].albumartist_sort, 'albumArtistSort')
        self.assertEqual(self.items[0].artist_sort, 'trackArtistSort')
        self.assertEqual(self.items[1].albumartist_sort, 'albumArtistSort')
        self.assertEqual(self.items[1].artist_sort, 'albumArtistSort')

    def test_full_date_applied(self):
        my_info = self.info.copy()
        my_info.year = 2013
        my_info.month = 12
        my_info.day = 18
        self._apply(info=my_info)

        self.assertEqual(self.items[0].year, 2013)
        self.assertEqual(self.items[0].month, 12)
        self.assertEqual(self.items[0].day, 18)

    def test_date_only_zeros_month_and_day(self):
        self.items = []
        self.items.append(Item(year=1, month=2, day=3))
        self.items.append(Item(year=4, month=5, day=6))

        my_info = self.info.copy()
        my_info.year = 2013
        self._apply(info=my_info)

        self.assertEqual(self.items[0].year, 2013)
        self.assertEqual(self.items[0].month, 0)
        self.assertEqual(self.items[0].day, 0)

    def test_missing_date_applies_nothing(self):
        self.items = []
        self.items.append(Item(year=1, month=2, day=3))
        self.items.append(Item(year=4, month=5, day=6))

        self._apply()

        self.assertEqual(self.items[0].year, 1)
        self.assertEqual(self.items[0].month, 2)
        self.assertEqual(self.items[0].day, 3)

    def test_data_source_applied(self):
        my_info = self.info.copy()
        my_info.data_source = 'MusicBrainz'
        self._apply(info=my_info)

        self.assertEqual(self.items[0].data_source, 'MusicBrainz')
コード例 #24
0
ファイル: test_autotag.py プロジェクト: eghantous/beetbox
class ApplyCompilationTest(_common.TestCase, ApplyTestUtil):
    def setUp(self):
        super(ApplyCompilationTest, self).setUp()

        self.items = []
        self.items.append(Item({}))
        self.items.append(Item({}))
        trackinfo = []
        trackinfo.append(
            TrackInfo(
                title=u'oneNew',
                track_id=u'dfa939ec-118c-4d0f-84a0-60f3d1e6522c',
                artist=u'artistOneNew',
                artist_id=u'a05686fc-9db2-4c23-b99e-77f5db3e5282',
                index=1,
            ))
        trackinfo.append(
            TrackInfo(
                title=u'twoNew',
                track_id=u'40130ed1-a27c-42fd-a328-1ebefb6caef4',
                artist=u'artistTwoNew',
                artist_id=u'80b3cf5e-18fe-4c59-98c7-e5bb87210710',
                index=2,
            ))
        self.info = AlbumInfo(
            tracks=trackinfo,
            artist=u'variousNew',
            album=u'albumNew',
            album_id='3b69ea40-39b8-487f-8818-04b6eff8c21a',
            artist_id='89ad4ac3-39f7-470e-963a-56509c546377',
            albumtype=u'compilation',
        )

    def test_album_and_track_artists_separate(self):
        self._apply()
        self.assertEqual(self.items[0].artist, 'artistOneNew')
        self.assertEqual(self.items[1].artist, 'artistTwoNew')
        self.assertEqual(self.items[0].albumartist, 'variousNew')
        self.assertEqual(self.items[1].albumartist, 'variousNew')

    def test_mb_albumartistid_applied(self):
        self._apply()
        self.assertEqual(self.items[0].mb_albumartistid,
                         '89ad4ac3-39f7-470e-963a-56509c546377')
        self.assertEqual(self.items[1].mb_albumartistid,
                         '89ad4ac3-39f7-470e-963a-56509c546377')
        self.assertEqual(self.items[0].mb_artistid,
                         'a05686fc-9db2-4c23-b99e-77f5db3e5282')
        self.assertEqual(self.items[1].mb_artistid,
                         '80b3cf5e-18fe-4c59-98c7-e5bb87210710')

    def test_va_flag_cleared_does_not_set_comp(self):
        self._apply()
        self.assertFalse(self.items[0].comp)
        self.assertFalse(self.items[1].comp)

    def test_va_flag_sets_comp(self):
        va_info = self.info.copy()
        va_info.va = True
        self._apply(info=va_info)
        self.assertTrue(self.items[0].comp)
        self.assertTrue(self.items[1].comp)
コード例 #25
0
 def test_main_interface_returns_none_for_missing_asin_and_path(self):
     album = AlbumInfo(None, None, None, None, None, asin=None)
     artpath = art.art_for_album(album, None)
     self.assertEqual(artpath, None)
コード例 #26
0
ファイル: deezer.py プロジェクト: kergoth/beets
    def album_for_id(self, album_id):
        """Fetch an album by its Deezer ID or URL and return an
        AlbumInfo object or None if the album is not found.

        :param album_id: Deezer ID or URL for the album.
        :type album_id: str
        :return: AlbumInfo object for album.
        :rtype: beets.autotag.hooks.AlbumInfo or None
        """
        deezer_id = self._get_id('album', album_id)
        if deezer_id is None:
            return None

        album_data = requests.get(self.album_url + deezer_id).json()
        artist, artist_id = self.get_artist(album_data['contributors'])

        release_date = album_data['release_date']
        date_parts = [int(part) for part in release_date.split('-')]
        num_date_parts = len(date_parts)

        if num_date_parts == 3:
            year, month, day = date_parts
        elif num_date_parts == 2:
            year, month = date_parts
            day = None
        elif num_date_parts == 1:
            year = date_parts[0]
            month = None
            day = None
        else:
            raise ui.UserError(u"Invalid `release_date` returned "
                               u"by {} API: '{}'".format(
                                   self.data_source, release_date))

        tracks_data = requests.get(self.album_url + deezer_id +
                                   '/tracks').json()['data']
        tracks = []
        medium_totals = collections.defaultdict(int)
        for i, track_data in enumerate(tracks_data, start=1):
            track = self._get_track(track_data)
            track.index = i
            medium_totals[track.medium] += 1
            tracks.append(track)
        for track in tracks:
            track.medium_total = medium_totals[track.medium]

        return AlbumInfo(
            album=album_data['title'],
            album_id=deezer_id,
            artist=artist,
            artist_credit=self.get_artist([album_data['artist']])[0],
            artist_id=artist_id,
            tracks=tracks,
            albumtype=album_data['record_type'],
            va=len(album_data['contributors']) == 1
            and artist.lower() == 'various artists',
            year=year,
            month=month,
            day=day,
            label=album_data['label'],
            mediums=max(medium_totals.keys()),
            data_source=self.data_source,
            data_url=album_data['link'],
        )
コード例 #27
0
 def test_main_interface_gives_precedence_to_fs_art(self):
     _common.touch(os.path.join(self.dpath, 'a.jpg'))
     art.urllib.urlretrieve = MockUrlRetrieve('anotherpath', 'image/jpeg')
     album = AlbumInfo(None, None, None, None, None, asin='xxxx')
     artpath = art.art_for_album(album, self.dpath)
     self.assertEqual(artpath, os.path.join(self.dpath, 'a.jpg'))
コード例 #28
0
 def test_main_interface_tries_amazon_before_aao(self):
     self.urlopen_called = False
     art.urllib.urlretrieve = MockUrlRetrieve('anotherpath', 'image/jpeg')
     album = AlbumInfo(None, None, None, None, None, asin='xxxx')
     art.art_for_album(album, self.dpath)
     self.assertFalse(self.urlopen_called)
コード例 #29
0
 def test_main_interface_falls_back_to_aao(self):
     self.urlopen_called = False
     art.urllib.urlretrieve = MockUrlRetrieve('anotherpath', 'text/html')
     album = AlbumInfo(None, None, None, None, None, asin='xxxx')
     art.art_for_album(album, self.dpath)
     self.assertTrue(self.urlopen_called)
コード例 #30
0
 def test_main_interface_returns_amazon_art(self):
     art.urllib.urlretrieve = MockUrlRetrieve('anotherpath', 'image/jpeg')
     album = AlbumInfo(None, None, None, None, None, asin='xxxx')
     artpath = art.art_for_album(album, None)
     self.assertEqual(artpath, 'anotherpath')