Ejemplo n.º 1
0
def testReleaseDate_v23_v24():
    """v23 does not have release date, only original release date."""
    date = Date.parse("1980-07-03")
    date2 = Date.parse("1926-07-05")
    year = Date(1966)

    tag = Tag()
    assert tag.version == ID3_DEFAULT_VERSION

    tag.version = ID3_V2_3
    assert tag.version == ID3_V2_3

    # Setting release date sets original release date
    # v2.3 TORY get the year, XDOR get the full date; getter prefers XDOR
    tag.release_date = "2020-03-08"
    assert b"TORY" in tag.frame_set
    assert b"XDOR" in tag.frame_set
    assert tag.release_date == Date.parse("2020-03-08")
    assert tag.original_release_date == Date(year=2020, month=3, day=8)

    # Setting original release date sets release date
    tag.original_release_date = year
    assert tag.original_release_date == Date(1966)
    assert tag.release_date == Date.parse("1966")
    assert b"TORY" in tag.frame_set
    # Year only value should clean up XDOR
    assert b"XDOR" not in tag.frame_set

    # Version convert to 2.4 converts original release date only
    tag.release_date = date
    assert b"TORY" in tag.frame_set
    assert b"XDOR" in tag.frame_set
    assert tag.original_release_date == date
    assert tag.release_date == date
    tag.version = ID3_V2_4
    assert tag.original_release_date == date
    assert tag.release_date is None

    # v2.4 has both date types
    tag.release_date = date2
    assert tag.original_release_date == date
    assert tag.release_date == date2
    assert b"TORY" not in tag.frame_set
    assert b"XDOR" not in tag.frame_set

    # Convert back to 2.3 loses release date, only the year is copied to TORY
    tag.version = ID3_V2_3
    assert b"TORY" in tag.frame_set
    assert b"XDOR" in tag.frame_set
    assert tag.original_release_date == date
    assert tag.release_date == Date.parse(str(date))
Ejemplo n.º 2
0
def testTagDates():
    tag = Tag()
    tag.release_date = 2004
    assert tag.release_date == Date(2004)

    tag.release_date = None
    assert tag.release_date is None

    tag = Tag()
    for date in [
            Date(2002),
            Date(2002, 11, 26),
            Date(2002, 11, 26),
            Date(2002, 11, 26, 4),
            Date(2002, 11, 26, 4, 20),
            Date(2002, 11, 26, 4, 20),
            Date(2002, 11, 26, 4, 20, 10)
    ]:

        tag.encoding_date = date
        assert (tag.encoding_date == date)
        tag.encoding_date = str(date)
        assert (tag.encoding_date == date)

        tag.release_date = date
        assert (tag.release_date == date)
        tag.release_date = str(date)
        assert (tag.release_date == date)

        tag.original_release_date = date
        assert (tag.original_release_date == date)
        tag.original_release_date = str(date)
        assert (tag.original_release_date == date)

        tag.recording_date = date
        assert (tag.recording_date == date)
        tag.recording_date = str(date)
        assert (tag.recording_date == date)

        tag.tagging_date = date
        assert (tag.tagging_date == date)
        tag.tagging_date = str(date)
        assert (tag.tagging_date == date)

        try:
            tag._setDate(2.4)
        except TypeError:
            pass  # expected
        else:
            assert not ("Invalid date type, expected TypeError")
Ejemplo n.º 3
0
def testTagDates():
    tag = Tag()
    tag.release_date = 2004
    assert tag.release_date == Date(2004)

    tag.release_date = None
    assert tag.release_date is None

    tag = Tag()
    for date in [Date(2002), Date(2002, 11, 26), Date(2002, 11, 26),
                 Date(2002, 11, 26, 4), Date(2002, 11, 26, 4, 20),
                 Date(2002, 11, 26, 4, 20), Date(2002, 11, 26, 4, 20, 10)]:

        tag.encoding_date = date
        assert (tag.encoding_date == date)
        tag.encoding_date = str(date)
        assert (tag.encoding_date == date)

        tag.release_date = date
        assert (tag.release_date == date)
        tag.release_date = str(date)
        assert (tag.release_date == date)

        tag.original_release_date = date
        assert (tag.original_release_date == date)
        tag.original_release_date = str(date)
        assert (tag.original_release_date == date)

        tag.recording_date = date
        assert (tag.recording_date == date)
        tag.recording_date = str(date)
        assert (tag.recording_date == date)

        tag.tagging_date = date
        assert (tag.tagging_date == date)
        tag.tagging_date = str(date)
        assert (tag.tagging_date == date)


        try:
            tag._setDate(2.4)
        except TypeError:
            pass # expected
        else:
            assert not("Invalid date type, expected TypeError")
Ejemplo n.º 4
0
def set_mp3_album_tags(data: Dict[str, str], tag: id3.Tag, episode_num: int):
    # set album title and cover image
    tag.album = data["album"]
    image_type = id3.frames.ImageFrame.FRONT_COVER
    image_file = os.path.join("/srv", data["cover"].lstrip("/"))
    image_mime = mimetype.guessMimetype(image_file)

    # set cover image
    with open(image_file, "rb") as f:
        tag.images.set(image_type, f.read(), image_mime, "")

    # set various meta info
    tag.artist = data["artist"]
    tag.track_num = (episode_num, episode_num)
    tag.title = Template(data["title"]).substitute(episode_num=episode_num)
    tag.release_date = str(date.today())
    tag.genre = "Podcast"
Ejemplo n.º 5
0
from eyed3.id3 import ID3_V1_0, ID3_V1_1, ID3_V2_3, ID3_V2_4

import logging
from eyed3 import log
log.setLevel(logging.DEBUG)

t = Tag()
t.artist = u"M.O.P."
t.title = u"How About Some Hardcore"
t.album = u"To The Death"
t.genre = u"Hip-Hop"
t.track_num = (3, 5)
t.disc_num = (1, 1)

t.original_release_date = "1994-04-07"
t.release_date = "1994-04-07"
t.encoding_date = "2002-03"
t.recording_date = 1996
t.tagging_date = "2012-2-5"

t.comments.set(u"Gritty, yo!")
t.comments.set(u"Brownsville, Brooklyn", u"Origin")

t.user_text_frames.set(u"****", u"Rating")
t.artist_url = b"http://allmusic.com/artist/mop-p194909"
t.user_url_frames.set(b"http://eyed3.nicfit.net/")

t.bpm = 187
t.play_count = 125
t.unique_file_ids.set(b"43e888e067ea107f964916af6259cbe7", "md5sum")
t.cd_id = b"\x3c\x33\x4d\x41\x43\x59\x3c\x33"
Ejemplo n.º 6
0
    def download_song(self, id) -> bytes:
        from gmusiccache.service.context import StatusInteraction
        from urllib.request import urlretrieve, urlopen
        from tempfile import mkstemp
        import os
        import eyed3
        from eyed3.id3 import Tag
        from eyed3.id3.frames import ImageFrame
        from datetime import datetime

        self.__context.interact(StatusInteraction("Retrieving song info..."))
        song_info = Service.__make_song_info(
            self.__gmusic_client.get_track_info(id))

        album_art = None
        if song_info.album_art:
            self.__context.interact(
                StatusInteraction("Reading album cover..."))
            try:
                with urlopen(song_info.album_art) as stream:
                    album_art = stream.read()
            except:
                self.__context.interact(
                    StatusInteraction("Album art download failed!"))

        self.__context.interact(StatusInteraction("Making id3 tags..."))

        id3_tags = Tag()

        id3_tags.title = song_info.name
        id3_tags.artist = song_info.artist
        id3_tags.album = song_info.album

        id3_tags.release_date = song_info.year
        id3_tags.recording_date = song_info.year
        id3_tags.original_release_date = song_info.year
        id3_tags.tagging_date = datetime.now().year
        id3_tags.encoding_date = datetime.now().year

        id3_tags.track_num = song_info.track_number, song_info.tracks_in_album

        if album_art:
            id3_tags.images.set(ImageFrame.FRONT_COVER, album_art,
                                'image/jpeg')

        self.__context.interact(StatusInteraction("Downloading stream..."))
        stream_url = self.__gmusic_client.get_stream_url(song_info.id)

        fd, path = None, None

        try:
            try:
                fd, path = mkstemp(prefix='gmusiccache_')
                urlretrieve(stream_url, path)
            finally:
                if fd:
                    os.close(fd)

            self.__context.interact(
                StatusInteraction(
                    "Fixing metadata on file {0}...".format(path)))

            mp3_file = eyed3.load(path)
            mp3_file.initTag()  # update to the newest version
            mp3_file.tag = id3_tags
            mp3_file.tag.save()

            self.__context.interact(
                StatusInteraction("Done. Returning file with metadata."))

            with open(path, 'rb') as file:
                return file.read()

        finally:
            self.__context.interact(
                StatusInteraction("Removing temp file {0}...".format(path)))
            if path:
                os.remove(path)
from eyed3.id3 import ID3_V1_0, ID3_V1_1, ID3_V2_3, ID3_V2_4

import logging
from eyed3 import log
log.setLevel(logging.DEBUG)

t = Tag()
t.artist = u"M.O.P."
t.title = u"How About Some Hardcore"
t.album = u"To The Death"
t.genre = u"Hip-Hop"
t.track_num = (3,5)
t.disc_num = (1,1)

t.original_release_date = "1994-04-07"
t.release_date = "1994-04-07"
t.encoding_date = "2002-03"
t.recording_date = 1996
t.tagging_date = "2012-2-5"

t.comments.set(u"Gritty, yo!")
t.comments.set(u"Brownsville, Brooklyn", u"Origin")

t.user_text_frames.set(u"****", u"Rating")
t.artist_url = b"http://allmusic.com/artist/mop-p194909"
t.user_url_frames.set(b"http://eyed3.nicfit.net/")

t.bpm = 187
t.play_count = 125
t.unique_file_ids.set(b"43e888e067ea107f964916af6259cbe7", "md5sum")
t.cd_id = b"\x3c\x33\x4d\x41\x43\x59\x3c\x33"