def testTagGenre(): from eyed3.id3 import Genre tag = Tag() assert (tag.genre is None) try: tag.genre = b"Not Unicode" except TypeError: pass # expected else: assert not ("Non unicode genre, expected TypeError") gobj = Genre(u"Hardcore") tag.genre = u"Hardcore" assert (tag.genre.name == u"Hardcore") assert (tag.genre == gobj) tag.genre = 130 assert tag.genre.id == 130 assert tag.genre.name == u"Terror" tag.genre = 0 assert tag.genre.id == 0 assert tag.genre.name == u"Blues" tag.genre = None assert tag.genre is None assert tag.frame_set[b"TCON"] is None
def save_button_action(self): self.gui_fields_to_fld_val() for key, val in self.fld_val.items(): print(key, ":", val) tag = self.audio_file.tag tag.version = ID3_DEFAULT_VERSION # These fields are assigned normally tag.title = self.fld_val['title'] tag.artist = self.fld_val['artist'] tag.album = self.fld_val['album'] tag.album_artist = self.fld_val['album_artist'] tag.original_release_date = self.fld_val['original_release_date'] tag.release_date = self.fld_val['release_date'] tag.recording_date = self.fld_val['recording_date'] # These fields need some converting or special assignments tag.genre = Genre(self.fld_val['genre']) tag.track_num = (self.fld_val['track_num'], self.fld_val['num_tracks']) if self.fld_val[ 'comments'] is not None and self.fld_val['comments'] != "": tag.comments.set(self.fld_val['comments']) tag.save(encoding="utf_8")
def testTagGenre(): from eyed3.id3 import Genre tag = Tag() assert_is_none(tag.genre) try: tag.genre = "Not Unicode" except TypeError: pass # expected else: assert_false("Non unicode genre, expected TypeError") gobj = Genre(u"Hardcore") tag.genre = u"Hardcore" assert_equal(tag.genre.name, u"Hardcore") assert_equal(tag.genre, gobj) tag.genre = 130 assert_equal(tag.genre.id, 130) assert_equal(tag.genre.name, u"Terror") tag.genre = 0 assert_equal(tag.genre.id, 0) assert_equal(tag.genre.name, u"Blues") tag.genre = None assert_is_none(tag.genre) assert_is_none(tag.frame_set["TCON"])
def process_tags(self, dest: str, entry: Mapping[str, Any]) -> None: """ Set ID3v2 tags on downloaded MP3 file. :param dest: File to change tags on. :param entry: Entry from RSS feed to use, alongside metadata, to populate ID3v2 tags. """ audiofile = eyed3.load(dest) # Process tags. If set to set_tags and tags are empty, write tags. # Pull tags into sub metadata if it's not set. # Pull tags into entry unless they're empty, and then try sub. # TODO do this cleaner, but we shouldn't crash out if tags can't be set. try: LOG.info(f"Artist tag is '{audiofile.tag.artist}'.") if audiofile.tag.artist == "" and self.settings["set_tags"]: LOG.info(f"Setting artist tag to '{self.metadata['artist']}'.") audiofile.tag.artist = self.metadata["artist"] if self.metadata["artist"] == "": self.metadata["artist"] = audiofile.tag.artist if audiofile.tag.artist != "": entry["metadata"]["artist"] = audiofile.tag.artist else: entry["metadata"]["artist"] = self.metadata["artist"] LOG.info(f"Album tag is '{audiofile.tag.album}'.") if audiofile.tag.album == "": LOG.info(f"Setting album tag to '{self.metadata['album']}'.") audiofile.tag.album = self.metadata["album"] if self.metadata["album"] == "": self.metadata["album"] = audiofile.tag.album if audiofile.tag.album != "": entry["metadata"]["album"] = audiofile.tag.album else: entry["metadata"]["album"] = self.metadata["album"] LOG.info(f"Album Artist tag is '{audiofile.tag.album_artist}'.") if audiofile.tag.album_artist == "": LOG.info( f"Setting album_artist tag to '{self.metadata['album_artist']}'." ) audiofile.tag.album_artist = self.metadata["album_artist"] if self.metadata["album_artist"] == "": self.metadata["album_artist"] = audiofile.tag.album_artist if audiofile.tag.album_artist != "": entry["metadata"]["album_artist"] = audiofile.tag.album_artist else: entry["metadata"]["album_artist"] = self.metadata[ "album_artist"] LOG.info(f"Title tag is '{audiofile.tag.title}'.") LOG.info( f"Overwrite setting is set to '{self.settings['overwrite_title']}'." ) if audiofile.tag.title == "" or self.settings["overwrite_title"]: LOG.info(f"Setting title tag to '{entry['title']}'.") audiofile.tag.title = entry["title"] # Store some extra tags on the entry. # Doesn't matter if they're empty, they're empty on the # entry too. # If the genre tag is not set, # default it to the Podcast genre. # Genre id list can be found at: # https://eyed3.readthedocs.io/en/latest/plugins/genres_plugin.html?highlight=genre if audiofile.tag.genre is None: audiofile.tag.genre = Genre(id=186) entry["metadata"]["genre"] = audiofile.tag.genre.name entry["metadata"]["date"] = str( audiofile.tag.getBestDate(prefer_recording_date=True)) # TODO this is catching "Unable to write ID3 v2.2" error. # should be able to do more gracefully. try: audiofile.tag.save() except NotImplementedError as ef: LOG.warning( f"Caught NotImplementedError {ef}. Skipping tag setting.") return # TODO this is catching tag not being present at all, I think, which should be fixable. except AttributeError as e: LOG.warning(f"Caught AttributeError {e}. Skipping tag setting.") return