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))
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")
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")
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"
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"
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"